您的位置:首页 > 其它

汇编实现16位有符号二进制数排序并输出

2009-05-17 17:04 567 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐