鱼C论坛

 找回密码
 立即注册
查看: 4048|回复: 7

[学习笔记] 《零基础入门学习汇编语言》第五十五讲及检测点11.2

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

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

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

x
本帖最后由 shuiyu 于 2017-12-5 17:31 编辑

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

一、CF:进位标志位(总结:记录无符号运算结果是否有进/借位,结果有进/借位时,CF=1)
(1)一般情况下,在进行无符号数运算的时候,它记录了运算结果的最高有效位向更高位的进位值,或从更高位的借位值。对于位数为8的无符号数(从0开始)来说,其对应的二进制信息的最高位,即第7位,的最高有效位,而假想存在的第8位,就是相对于最高有效位的更高位。
(2)通俗的说就是:一个8 位的数因为加减乘除等原因变为9位时,这个第九位会被记录到标志寄存器的CF中。
(3)当两个数据做加法的时候,有可能向更高位借位。比如,两个 8 位数据:98H+98H,将产生借位。
另外一种情况,而当两个数据做减法的时候,有可能向更高位借位。比如,两个 8 位数据:97H-98H,将产生借位,借位后,相当于计算197H-98H。而flag的CF位也可以用来记录这个借位值。
(4)标志寄存器第0位中:当为NC时表示为0即无进位,CY表示为1即有进位。

二、OF标志:溢出标志位(总结:记录有符号运算结果是否溢出,结果溢出时,OF=1)
(1)OF与CF标志基本相似,要注意CF和OF的区别:CF是对无符号数运算有意义的标志位;而OF是对有符号数运算有意义的标志位。
对于无符号数运算,CPU用CF位来记录是否产生了进位;
对于有符号数运算,CPU 用 OF 位来记录是否产生了溢出,
(2)差别就是有符号数和无符号数之间的问题。比如:98+99=197;在无符号数的计算中,答案就是197(11000101),而在有符号数的计算中,答案则是-69,造成这种情况的原因是在 8 位寄存器al中存放不下。发生了溢出
(3)对于有无符号,计算机是分不清楚状况的,因此他必须两种都记载着,要怎么用,看的是你当他是什么!


检测点11.2
写出下面每条指令执行后,ZF、PF、SF、CF、OF等标志位的值。
这个检测点难就难在怎么区分CF和OF,我们主要记住下面两点就可以了:
1.CF:进位标志位:记录无符号运算结果是否有进/借位,结果有进/借位时,SF=1
2.OF标志:溢出标志位:记录有符号运算结果是否溢出,结果溢出时,OF=1

2.PNG



三、adc指令
(1)adc是带进位加法指令 ,它利用了CF位上记录的进位值。(其实就是说两个数相加之后再加上此时CF的值)
比如:adc ax,bx 实现的功能是:
(ax)=(ax)+(bx)+CF
(2)在执行 adc 指令的时候加上的 CF 的值的含义,由 adc指令前面的指令决定的,也就是说,关键在于所加上的CF值是被什么指令设置的。显然,如果CF 的值是被sub指令设置的,那么它的含义就是借位值;如果是被add指令设置的,那么它的含义就是进位值。

编程任务
编程计算1EF000H+201000H,结果放在ax(高16位)和bx(低16位)中。
解:
分析:因为这两个数都超过了通用寄存器的存储范围,所以我们要分解运算(就是先计算处低16位相加的结果,再求去高16位相加的结果)。
通过计算器得到答案为:3F0000
看图,图中有解析:
3.PNG
由图可知我得到了正确答案。。


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

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

本帖被以下淘专辑推荐:

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

使用道具 举报

发表于 2017-12-4 20:24:51 | 显示全部楼层
mov al,10h        al=10h        0                0                0                1                1
楼主确定PF和ZF没错吗?al=10h,也就是16啊,PF应该等于0,并且ZF也应该等于0吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-12-4 20:27:21 | 显示全部楼层
不会好意思,懵逼了。懂了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-12-4 23:00:55 From FishC Mobile | 显示全部楼层
add al,90h的of不是0吗为啥是1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-12-5 17:33:24 | 显示全部楼层
xiaohaituan 发表于 2017-12-4 23:00
add al,90h的of不是0吗为啥是1

谢谢指正,我把题目错的都改正了(错了好几个地方)谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-4 21:27:04 | 显示全部楼层
楼主,我想问一下,在MOV AL,0FCH这条指令中的CF 和ZF为1,是不是因为mov这条不是运算指令,标志寄存器的CF和ZF的值是保存的上一条指令的1?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-2-4 22:27:06 | 显示全部楼层
社会我杭哥 发表于 2018-2-4 21:27
楼主,我想问一下,在MOV AL,0FCH这条指令中的CF 和ZF为1,是不是因为mov这条不是运算指令,标志寄存器的CF ...

嗯对!mov 是传送指令,不会改变标志寄存器的值,课本的214页有讲哦~(指出一个小毛病:“标志寄存器的CF和ZF的值是保存的上一条指令的1?”不一定是上一条,只能说是上一次改变后的值
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-5 14:18:35 | 显示全部楼层
好的谢谢楼主
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-6 07:42

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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