思路:定义数据段,代码段,让堆栈段自动装入;X,Y,Z,MAX 16位带符号数没有给出,那就自己写几个吧,那问题来了,16位带符号数该怎么输入呢?
DB是八位,一字节;那就用DW了,它是字,16位;
试着用分支程序
分支程序正确代码DATA SEGMENT
X DW 7
Y DW 5
Z DW 8
MAX DW ?,?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX, DATA
MOV DS, AX
MOV AX, X
MOV BX, Y
MOV CX, Z
CMP AX, BX
JGE NEXT
MOV MAX,BX
CMP MAX,CX
JGE DONE
MOV MAX,CX
JMP DONE
NEXT: MOV MAX,AX
CMP MAX,CX
JGE DONE
MOV MAX, CX
JMP DONE
DONE: MOV DX, MAX ;便于使用debug查看结果是否正确
MOV AH,4CH
INT 21H
CODE ENDS
END START
运行结果
从上图可以看到,程序完好执行,没有发生卡死
用debug检验程序功能是否完备且逻辑正确u命令:
d ds:0006 由于是字,所以地址从AX到MAX从 0000,0002,0004到0006;0006是MAX的地址:
d ds:0000:
下方可以看到,DX已经存入8,程序执行正确:
代码编写的心路历程下面的分支程序,谨慎使用,此代码为作者整理思路,有逻辑错误, 错误在于,如果CX最大,那么DONE就无法被执行,导致程序无法中断;
DATA SEGMENT
X DW 7
Y DW 5
Z DW 8
MAX DW ?,?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX, DATA
MOV DS, AX
MOV AX, X
MOV BX, Y
MOV CX, Z
CMP AX, BX
JGE NEXT
CMP BX, CX
JGE NEXT1
MOV MAX, CX
NEXT: CMP AX, CX
JGE DONE
MOV MAX, CX
NEXT1: MOV MAX, BX
DONE: MOV MAX, AX
MOV DX, MAX; 方便查看结果是否正确
MOV AL, 4CH
INT 21H
CODE ENDS
END START
换种思路
结果,代码延时严重,卡死,原因是下面三行代码错误
DONE: MOV DX,MAX
MOV AL, 4CH ;MOV AX,4CH 也不行,应为 MOV AH,4CH
INT 21H
DATA SEGMENT
X DW 7
Y DW 5
Z DW 8
MAX DW ?,?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX, DATA
MOV DS, AX
MOV AX, X
MOV BX, Y
MOV CX, Z
CMP AX, BX
JGE NEXT
MOV MAX,BX
CMP MAX,CX
JGE DONE
MOV MAX,CX
JMP DONE
NEXT: MOV MAX,AX ;第一次写的时候,:(冒号)写成了中文符,所以不断报错
CMP MAX,CX
JGE DONE
MOV MAX, CX
JMP DONE
DONE: MOV DX, MAX; 方便查看结果是否正确
MOV AL, 4CH
INT 21H
CODE ENDS
END START
采用子程序的结构也可以实现这样的功能,感兴趣可以自己尝试下。
总结下:程序的逻辑编写还算是比较上手吧,因为有C++的基础,先在DEVC++上梳理了两种三个数比大小的方法,然后分别用汇编语言进行实现,结果就是第二种并列两个if语句的方式,更实现更简单一点,C++的程序见下,有助于梳理思路,理解汇编语言语句块
(16条消息) 三个数比大小 输出最大值_Elvin域文的博客-CSDN博客https://blog.csdn.net/m0_51787573/article/details/124096242?spm=1001.2014.3001.5502当然,程序的分支结构理解和基本指令含义理解也很重要,之前有几篇文章有讲,收录在“计算机硬件基础”专栏中,可以简单了解下,真正理解还是要去系统学习下。
这是实验报告中的一个小任务,代码确立很快,但小问题层出不穷,第一次学,手还比较生,对软件功能的编译不熟悉,大量时间花在了解决初始代码报错和对报错语句的理解上,修修改改,前后花了将近4个小时的时间,还是很开心能够把它写出来,困难就是用来克服的嘛,下一步想着这个代码怎么再能精简点就更好了,继续努力吧,做一个开心学习的人儿。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)