QQ登录

只需一步,快速开始

搜索
查看: 85|回复: 0

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

[复制链接]
最佳答案
0 
累计签到:91 天
连续签到:5 天
发表于 2017-10-12 22:06:16 | 显示全部楼层 |阅读模式

马上注册加入鱼C,享用更多服务吧^_^

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

x
本帖最后由 shuiyu 于 2017-10-18 21:38 编辑

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

一、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

                        al                CF                OF                SF                PF                ZF               
sub al,al                al=0                0                0                0                1                1
mov al,10h        al=10h        0                0                0                1                1
add al,90h        al=0a0h        0                1                1                1                0
mov al,80h        al=20h        1                1                1                1                0
add al,80h        al=0h        1                1                0                1                1
mov al,0fch        al=ofch        0                0                0                1                1
add al,05h        al=1h        1                0                0                0                0
mov al,7dh        al=7EH        0                0                0                1                0
add al,0bh        al=88h        0                1                1                1                0
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
由图可知我得到了正确答案。。


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

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

本帖被以下淘专辑推荐:

1. 如果您的提问得到满意的答案,请务必选择【最佳答案】;2. 如果想鼓励一下楼主或帮助到您的朋友,可以给他们【评分】作为奖励;
3. 善用【论坛搜索】功能,那里可能有您想要的答案;4. 粘贴代码请点击编辑框上的 <> 按钮,否则您的代码可能会被“吃掉”!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

小甲鱼强烈推荐上一条 /1 下一条

小黑屋手机版Archiver( 粤公网安备 44051102000370号 | 粤ICP备11014136号

© 2010-2017 FishC.com GMT+8, 2017-10-22 03:26 Powered by Discuz! X2.5 Theme by dreambred

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