鱼C论坛

 找回密码
 立即注册
查看: 2517|回复: 0

[学习笔记] 《零基础入门学习汇编语言》第五十七讲

[复制链接]
发表于 2017-10-16 20:38:25 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 shuiyu 于 2017-10-18 22:03 编辑

越努力,越幸运。欢迎大家来看我的笔记,不对的请各位大佬指正,谢谢

一、对于cmp指令的深入学习
(1)回顾一下cmp指令:功能相当于减法指令,只是不保存结果。模拟执行减法命令,减法命令后会导致标志寄存器发生什么变化;而这个标志寄存器的变化会保存下来,但是其它的都不会发生变化,所以说是模拟咯
(2)我们以cmp ah,bh为例进行说明:
   如果(ah)=(bh) 则(ah)-(bh)=0,所以:ZF=1;
   如果(ah)≠(bh) 则(ah)-(bh) ≠0,所以:ZF=0;
所以,我们根据cmp指令执行后ZF的值,就可以知道两个数据是否相等。 以此类推,可以得到很多信息。
(3)但是在有符号数的计算中,对于这个问题:cmp 操作对象1,操作对象2 指令执行后,SF=1,就说明操作对象1<操作对象2?当然不是。因为有一些数它在无符号数的情况下是正数,但是在无符号数是负数,所以造成了这个结论的不正确。(例如:0A0H在有符号数中他就是-20)
(4)总结:所得到的相应结果的正负,并不能说明,运算所应该得到的结果的正负。这是因为在运算的过程中可能发生溢出。如果有这样的情况发生,那么,SF的值就不能说明任何问题。 如果没有溢出发生的话,那么,实际结果的正负和逻辑上真正结果的正负就一致了。所以,我们应该在考察SF(得知实际结果的正负)的同时考察OF(得知有没有溢出),就可以得知逻辑上真正结果的正负,同时就可以知道比较的结果
(5)即:
如果SF=1,而OF=0
OF=0,说明没有溢出,逻辑上真正结果的正负=实际结果的正负;(ah<bh)

如果SF=1,而OF=1
OF=1 ,说明有溢出,逻辑上真正结果的正负≠实际结果的正负;(相反ah>bh)

如果SF=0,而OF=1
OF=1 ,说明有溢出,逻辑上真正结果的正负≠实际结果的正负;(与逻辑真正结果相同ah<bh)

如果SF=0,而OF=0
OF=0,说明没有溢出,逻辑上真正结果的正负=实际结果的正负;(ah≥bh)


二、检测比较结果的条件转移指令(这一讲是对于无符号数的)
(1)下面的内容中我们将学习一些根据cmp指令的比较结果(即,cmp指令执行后,相关标志位的值)进行工作的指令。
根据无符号数的比较结果进行转移的条件转移指令,它们检测ZF、CF的值;
和根据有符号数的比较结果进行转移的条件转移指令,它们检测 SF、OF和 ZF的值。
(2)条件转移指令小结:
1.png
(3)这些指令比较常用,它们都很好记忆,它们的第一个字母都是j,表示jump;后面的:
e:表示equal;
ne:表示not equal;
b:表示below;
nb:表示not below;
a:表示above;
na:表示not above。


编程训练
编程实现如下功能:
如果(ah)=(bh)则(ah)=(ah)+(ah),否则  (ah)=(ah)+(bh)。

解:很简单的一个程序,看下面的图:
2.PNG





谢谢小甲鱼带来的视频教程,感谢!!

本节结束,多谢览阅!
越努力,越幸运。谢谢大家来看我的笔记,不对的请各位大佬指教,谢谢

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-29 15:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表