第1个回答 2012-10-16
data segment
num dw 0
decasc db 6 dup('0')
ends
stack segment para stack
dw 128 dup(0)
ends
code segment
start:
mov ax, data
mov ds, ax
mov bx,num
and bx,bx
jns next1 ;判断正负
mov decasc,'-'
neg bx ;是负数,则求其相反数
next1:mov si,5 ;将二进制数转换成十进制数的ASCII码
mov ax,bx
mov cx,5
mov di,10
next2:xor dx,dx
div di
or dl,30h
mov decasc[si],dl
dec si
loop next2
mov cx,5
mov si,0
mov dl,decasc[si]
cmp dl,'-' ;若是负数,则显示负号,正数不显示符号
jne next3
mov ah,02h
int 21h
next3: ;跳过前导0
inc si
mov dl,decasc[si]
cmp dl,'0'
jne next4
loop next3
next4:mov ah,02h ;显示有效数字,若BX为0,则只显示0
int 21h
inc si
mov dl,decasc[si]
jcxz next5
loop next4
next5:
mov ax, 4c00h ; exit to operating system.
int 21h
ends
end start