汇编改错,谢谢!

来源:百度知道 编辑:UC知道 时间:2024/05/13 14:05:55
求r=x+y+z的值,如果x=1,y=2,z=3, 怎样输出r=6,郁闷啊,整半天没弄出来,高手帮帮啊
data segment
str1 db 'x=','$'
str2 db 'y=','$'
str3 db 'z=','$'
str4 db 'r=','$'
x db ?
y db ?
z db ?
r db ?
data ends
code segment
assume cs:code,ds:data
start: mov ax,data
mov ds,ax
lea dx,str1
mov ah,09h
int 21h
mov ah,01h
int 21h
mov x,al
lea dx,str2
mov ah,09h
int 21h
mov ah,01h
int 21h
mov y,al
lea dx,str3
mov ah,09h
int 21h
mov ah,01h
int 21h
mov z,al
mov al,x
mov bl,y
add al,bl
mov bl,z
add al,bl
mov r,al
sub r,60h
lea dx,str4
mov ah,09h
int 21h

lea dx,r
改为
MOV DL,r

不太确定,
sub r,60h 真的编译通过了吗?另外,为什么要减60H,如果确定r只是一位十进制数,那转成ASCII码应该加30H才对吧
建议把
mov r,al
sub r,60h
改为
ADD AL,30H
MOV r,AL
当然只有r的值在0--9之间时可以这样转化ASCII码(0--F也可以)

后面你用AH=2的INT 21中断,那DL中应该装入要显示字符的ASCII码,你用了LEA命令,我记得是把r的地址装入了DX,而不是r中的数据吧。
建议把
lea dx,r
改为
MOV DL,r

data segment
str1 db 'x=','$'
str2 db 'y=','$'
str3 db 'z=','$'
str4 db 'r=','$'
x db ?
y db ?
z db ?
r db ?
data ends
code segment
assume cs:code,ds:data
start: mov ax,data
mov ds,ax
lea dx,str1
mov ah,09h
int 21h
mov ah,01h
int 21h
mov x,al
lea dx,str2
mov ah,09h
int 21h
mov ah,01h
int 21h
mov y,al
lea dx,str3
mov ah,09h
int 21h
mov ah,01h
int 21h
mov z,al