;功能:计算 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