汇编关于比较三个数字大小

来源:百度知道 编辑:UC知道 时间:2024/07/06 14:15:38
代码可以通过编译,但是运行有错,请高手指点!
源代码如下:
data segment
x db 7
y db 9
z db 5
w db ?
data ends
program segment
main proc far
assume cs:program,ds:data
start:
mov al,[x]
cmp al,[y]
ja comparexz
jb compareyz
comparexz:
cmp al,[z]
ja putx
jb putz
ret
compareyz:
mov al,[y]
cmp al,[z]
ja puty
jb putz
ret
putx:
mov w,al
lea dx,w
jmp disp
puty:
mov al,[y]
mov w,al
lea dx,w
jmp disp
putz:
mov al,[z]
mov w,al
lea dx,w
jmp disp
disp:
mov ah,w
int 21h
ret
main endp
program ends
end start
真不好意思,没有说清楚,最初的时候并没有用中括号。可以编译运行,但是得不到想要的结果,我想要比较出最小的无符号数字并打印在屏幕上,用了disp子程序,可是不知道哪里出现了错误,运行程序的时候出现cpu遇到无效指令!
data segment
x db 7
y db

问题不是有没有加括号的问题,问题而在于你的程序结构不合理,而且有逻辑问题
data segment
x db 7
y db 9
z db 5
w db ?
data ends
program segment
assume cs:program,ds:data
main proc far
push ds
xor ax,ax
push ax
mov ax,data
mov ds,ax
mov dl,x
cmp dl,y
jae comparexz
mov dl,y
cmp dl,z
jae disp
mov dl,z
jmp disp
comparexz:
cmp dl,z
jae disp
mov dl,z
disp:
add dl,30h
mov ah,2
int 21h
ret
main endp
program ends
end main

mov al,[x]
cmp al,[y]
寻址方式有错。。
直接mov al,x

补充:mov al,[z] 应为:mov al,z
变量符号本质上就是一个地址啊

下面的程序是完成三个数从大到小排序并将排序后的三个数都在屏幕上输出的程序,程序简化并调试通过。如果只输出最小数,则只需要输出Z的值即可。
data segment
x db 7
y db 9
z db 5
w db ?
data ends
program segment
main proc far
assume cs:program,ds:data
start:
mov ax,data
mov ds,ax
mov al,x
cmp al,y