80x86 汇编语言编程:数据排序与显示

;=========================================================

;http://zhidao.baidu.com/question/456716225692248325

;已知在数据段中,字数组ARRAY有N个元素
;编写程序,把数组中的负数求绝对值,然后对数组按降序排列

;=========================================================

;做而论道编程如下:

QWER   SEGMENT

   DATA   DW   12386, 0, -9987, 767, 898, -2, 0, 9, 8, -10
   ;数据范围:-32768~32767

NNN  EQU  ($ - DATA) / 2     ;数据个数:< 32000 个字

   MSG1   DB  13, 10, 'Before  Sort: ', 13, 10, 36
   MSG2   DB  13, 10, 'After   Sort: ', 13, 10, 36
QWER   ENDS

;---------------------------------------------------------

CCCC   SEGMENT
   ASSUME  CS:CCCC, DS:QWER
START:
    MOV   AX, QWER
    MOV   DS, AX

    LEA   DX, MSG1
    CALL  DISP_DATA    ;显示数据

SORT:
    MOV   CX, NNN
    DEC   CX
S0: PUSH  CX
    LEA   SI, DATA    
S1: MOV   AX, [SI]
    CMP   AX, [SI + 2]
    JA    S3
    XCHG  AX, [SI + 2]
    XCHG  AX, [SI]
S3: ADD   SI, 2
    LOOP  S1
    POP   CX
    LOOP  S0 

    LEA   DX, MSG2
    CALL  DISP_DATA    ;显示数据

EXIT:
    MOV   AH, 4CH
    INT   21H
;----------------------
DISP_DATA:
    MOV   AH, 09H
    INT   21H
    LEA   SI, DATA
    MOV   CX, NNN
DL1:MOV   AX, [SI]
    CALL  PRINT
    ADD   SI, 2
    LOOP  DL1
    RET
;----------------------
PRINT:
    CMP   AX, 0
    JGE   ZH0
    NEG   AX
    MOV   [SI], AX
    MOV   DL, '-'
    MOV   AH, 2
    INT   21H
ZH0:MOV   AX, [SI]
    MOV   BX, 10
    PUSH  CX
    MOV   CX, 0
ZH1:MOV   DX, 0
    DIV   BX
    ADD   DL, '0'
    PUSH  DX
    INC   CX
    CMP   AX, 0
    JNZ   ZH1
    MOV   AH, 2
ZH2:POP   DX
    INT   21H
    LOOP  ZH2
    MOV   DL, ' '
    INT   21H
    POP   CX
    RET
;----------------------
CCCC   ENDS
    END   START

;=========================================================

经过实验,本程序完全符合题目要求。

发布了532 篇原创文章 · 获赞 355 · 访问量 129万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览