显示有符号十进制数,
程序运行结果不正确,请各位帮忙看一看!
本人估计是用除法指令是有点错误,初学汇编还不是很懂!
data segment
count=3
array dw 0,12,-34
data ends
code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax
mov cx,count
mov si,offset array
dis:
mov ax,[si]
cmp ax,0
jnz dis1
mov dl,30h ;为0直接输出
mov ah,2
int 21h
jmp dis5
dis1:
cmp ax,0
jg dis2 ;为负数先输出付号
mov bx,ax
mov dl, '- '
mov ah,2
int 21h
mov ax,bx
neg ax ;对负数求补
dis2:
mov bx,10
push bx ;10压入堆栈,作为退出标志
dis3:
cmp ax,0
jz dis4
sub dx,dx
div bx ;数据除以10,ax存商,dx存余数
add dl,30h
push dx ;数据各位先低位后高位压入堆栈
jmp dis3
dis4:
pop dx ;数据各位先高位后低位弹出堆栈
cmp dl,10 ;是结束标志10,则退出
je dis5
mov ah,2
int 21h
jmp dis4
dis5:
mov dl, ', ' ;每个数用逗号隔开
mov ah,2
int 21h
inc si
dec cx
jnz dis
exit:
mov ah,4ch
int 21h
code ends
end start
------解决方案--------------------------------------------------------
....
add si, 2 ;* inc si ;* 因为数据是以 dw 定义并使用的, 所以应增 2
dec cx
jnz dis
exit:
....
------解决方案--------------------------------------------------------
楼上正解,也可以改成
add si,TYPE array
这样灵活性更大些