当前位置: 代码迷 >> 汇编语言 >> 大家帮忙看一下代码,不知为什么不能正确显示结果。该如何解决
  详细解决方案

大家帮忙看一下代码,不知为什么不能正确显示结果。该如何解决

热度:6657   发布时间:2013-02-26 00:00:00.0
大家帮忙看一下代码,不知为什么不能正确显示结果。
;功能:计算   z=x-y+3   并显示结果x=10,y=4。

.model   small
.stack   200h
.data

z   dw   1   dup(?)
x   dw   10
y   dw   4

.code

mov   ax,   @data
mov   ds,   ax

mov   ax,   x
sub   ax,   y
add   ax,   3
mov   z,   ax
call   disp1
call   disp2

mov   ax,   4c00h
int   21h

disp1   proc

mov   dl,   ah
                or   dl,   30h
                mov   ah,   2
int   21h
                ret

disp1   endp

disp2   proc

mov   dl,   al
or   dl,   30h
mov   ah,   2
int   21h
ret

disp2   endp

end

------解决方案--------------------------------------------------------
要显示 x=10, 需要显示字符串 "x= " 以及将 x 的数值转换为字符串显示输出才可以. int21h 的 02h 功能只是显示 dl 寄存器中的字符而已
------解决方案--------------------------------------------------------
调用disp1的时候,al的值被修改了,导致disp2显示不正常
把disp1 proc和disp2 proc 改成下面这样就可以了
disp1 proc
push ax ;保存ax的值
mov dl, ah
or dl, 30h
mov ah, 2
int 21h
pop ax
ret

disp1 endp

disp2 proc
push ax ;保存ax的值
mov dl, al
or dl, 30h
mov ah, 2
int 21h
pop ax
ret

disp2 endp