1. 程式人生 > >彙編實現16位有符號二進位制數排序並輸出

彙編實現16位有符號二進位制數排序並輸出

data segment
 BUF DW 2560,-3,4387,12,6250,-79,54,88
 COUNT EQU $-BUF
 OUTBUF DB 7 DUP(0),'$'
data ends
code segment
assume cs:code,ds:data
OUTPUT PROC
 PUSH AX
 PUSH BX
 PUSH CX
 PUSH DX
 MOV BX,OFFSET OUTBUF+5
 MOV BYTE PTR [BX],' '
        MOV AX,[DI]
 CMP AX,0
 JGE LGE
 MOV DL,'-'
 PUSH AX
 MOV AH,2
 INT 21H
 POP AX
 XOR CX,CX
 SUB CX,AX
 MOV AX,CX
LGE:
 MOV CX,10         ;做32位除以16位的除法,故將10送CX
AGAIN:
 MOV DX,0         ;無符號數擴充套件將16位擴充套件為32位
 DIV CX
 ADD DL,30H            ;將DL中的一位十進位制數轉換為ASCII碼
 DEC BX             ;調整指標
 MOV [BX],DL
 OR AX,AX         ;根據商是否為0,設定ZF
 JNZ AGAIN         ;判商是否為0,不為0繼續除以10
 MOV DX,BX         ;將輸出資料區的偏移首地址送DX
 MOV AH,9
 INT 21H
 POP DX
 POP CX
 POP BX
 POP AX
 RET
OUTPUT ENDP
start proc far
 push ds
 sub ax,ax
 push ax
 mov ax,data
 mov ds,ax
 MOV DI,OFFSET BUF
 MOV DX,(COUNT/2)-1                ;設定外迴圈計數器
OUTSID:
 MOV CX,DX                     ;設定內迴圈計數器
 MOV SI,DI
INSIDE:
 INC SI
 INC SI
 MOV AX,[DI]
 MOV BX,[SI]
 CMP AX,BX
 JLE NEXCHG
 MOV [DI],BX
 MOV [SI],AX
NEXCHG:
 LOOP INSIDE
 CALL OUTPUT
 INC DI
 INC DI
 DEC DX
 JNZ OUTSID
 ret
start endp
code ends
end start