sub指令 标志位-关于sub指令是怎么影响CF标志位的

问题描述

关于sub指令是怎么影响CF标志位的

楼主猜想:sub a, b 和 add a, -b 应该差不多。
举个例子:
mov al, 1
mov bl, 2
sub al, bl
首先sub al, bl === add al, -bl
al是正数,原码补码相同为:00000001B
-bl是负数,原码位:10000010B, 补码为:11111110B
add al, -bl的补码结果为:11111111B
所以没有进位,所以CF = 0
因此执行sub al, bl之后的CF应该为0

解决方案

SUB如何影响标志位:
1.减法的CF反应的是无符号数运算中的借位情况:当减数>被减数是CF=1,否则CF=0
2.OF:如果两个数的符号相反而结果的符号与减数相同,则OF=1,否则OF=0;
3.SF(运算结果<0为1否则为0)、ZF(零标志)、AF(辅助进位标志)、PF(奇偶标志)根据其含义设置

mov eax, 1
sub eax, 2
;这两个结果是EAX=FFFFFFFFH,而1不够2减,所以产生了借位,CF=1
mov eax, 1
add eax, -2
;而这两个就不同了,第一条执行后EAX=1,第二条的-2取补码后是不是等于FFFFFFFEH?而FFFFFFFEH加上EAX中的1是不是就等于FFFFFFFFH???所以没有产生进位也没有产生借位,CF=0
你纠结在-2这里,你试试把2个值颠倒一下变成这样
mov eax, -2
add eax, 1
然后调试,看着EAX中的值你就明白了

解决方案二:

不好意思了,好像间隔时间有点长了--回答的真不错

时间: 2025-01-21 02:17:10

sub指令 标志位-关于sub指令是怎么影响CF标志位的的相关文章

ARM指令寻址方式之: 数据处理指令的寻址方式

4.1  数据处理指令的寻址方式 4.1.1  数据处理指令的寻址方式概要 数据处理指令的基本语法格式如下. <opcode> {<cond>} {S} <Rd>,<Rn>,<shifter_operand> 其中<shifter_operand>有下面11种形式,如表4.1所示. 表4.1        <shifter_operand>的寻址方式   语    法 寻 址 方 式 1 #<immediate>

哪些因素影响Win7 64位旗舰版的运行速度?

想必谁都想自己的电脑运行速度够快,时间久了也不会变慢,不过这一些只有了解系统中会影响速度的方方面面才能结合维护让系统始络运行在一个快速的环境之下,下面小编跟大家分享一下影响win7 64位旗舰版运行速度的一些因素,方便大家在使用的时候进行优化,或是更好的保持良好状态. 一.电脑配置 很显然,电脑配置跟系统运行速度是最直接的联系,虽然很多用户在开始的时候使用win7旗舰版感觉速度还过的去,不过在随着系统不停的更新,整个系统会变得越来越庞大,那么这时有着较高配置的电脑能使win7旗舰版系统不会因为多

数据库-64位sqlserver 2008 r2企业版可以安装在32位win7上吗

问题描述 64位sqlserver 2008 r2企业版可以安装在32位win7上吗 我的系统是win7的32位版本,可不可以装64位sqlserver 2008 r2企业版的数据库,如果不可以,可否提供32位sqlserver 2008 r2企业版的下载地址,感激不尽 解决方案 不可以.32bit操作系统只能安装32bit程序,反之,64bit系统可以安装32bit程序. 下载原版微软软件:http://msdn.itellyou.cn 解决方案二: 另外,SQL Server 2008 R2

32位xp安装visual c#2010 想访问64位win7上的oracle10g数据库?

问题描述 32位xp安装visual c#2010 想访问64位win7上的oracle10g数据库? 32位xp安装visual c#2010 想访问64位win7上的oracle10g数据库,请问怎么实现?? 解决方案 win7安装oracle10g数据库win7 旗舰版 64位安装 oracle10g 32位win7 64位oracle10G 的安装 解决方案二: 按照好oracle驱动,直接就可以访问,你的服务器需要打开防火墙端口.

des加密-DES加密问题,DES加密是8位输出的,为什么网上下工具都不是8位输出,在线DES也不是8位输出

问题描述 DES加密问题,DES加密是8位输出的,为什么网上下工具都不是8位输出,在线DES也不是8位输出 DES加密问题,DES加密是8位输出的,为什么网上下工具都不是8位输出,在线DES也不是8位输出 解决方案 谁告诉你"DES加密是8位输出的".加密块的大小可以是任意的. 这里找到一个8bithttp://blog.csdn.net/linfeng999/article/details/29592591 你可以参考下.而且要注意密钥

正则表达式-输入9位整数或以下可以带小数点后面两位一共11位数 像1.111这样是不成功的

问题描述 输入9位整数或以下可以带小数点后面两位一共11位数 像1.111这样是不成功的 输入9位整数或以下可以带小数点后面两位一共11位数 像1.111这样是不成功的 999999999.22这样是可以的 求正则表达式 (表达不清楚 在线等答案.....) 解决方案 ^d{1,9}(.d{1,2})?$ 解决方案二: 看清楚了: d{1,9}(.d{1,2})

64位操作系统 在64位的vs2008中的工具箱中添加64位的ocx控件出错

问题描述 64位操作系统在64位的vs2008中的工具箱中添加64位的ocx控件出错:注文件注册路径是(c:windowssystem32目录下).错误提示是 解决方案 解决方案二:有64bit的VisualStudio2008吗?引用http://support.microsoft.com/kb/951801 No.Unfortunately,wedonothavea64-bitversionofVisualStudio2005orVisualStudio2008.... 32位的程序(Vis

怎样求一个固定4位随机数(字母+数字),且第一位不能为数字0,字母I和O不能在随机数中出现,不能连续两位都出现数字0.应该怎么做?

问题描述 怎样求一个固定4位随机数(字母+数字),且第一位不能为数字0,字母I和O不能在随机数中出现,不能连续两位都出现数字0.应该怎么做? 解决方案 解决方案二:首先构造一个字符串seed,排除了I.O等然后在字符串中随机取,取出来是0的话判断上一个是否也是0解决方案三:不好意思,我看得不是很明白!!是否能说详细点,或者贴段代码上来看看!!麻烦啦!!解决方案四:我一会给你个代码,很容易的.解决方案五:privatestringRandomStr4(){Randomr=newRandom();c

安装SQL server 2005 出现警告 32位ASP.NET已经注册,需要注册64位的解决方法_mssql2005

可以运行以下两条命令: 1.将64位.net注册到iis上. cscript C:\inetpub\adminscripts\adsutil.vbs SET W3SVC/AppPools/Enable32bitAppOnWin64 0 和 C:\WINDOWS\Microsoft.NET\Framework64\v2.0.50727\aspnet_regiis.exe -i 2.注册32位.net: 不需要卸载32位,注册命令就是上面的命令.系统默认安装的是64位系统,但是由于客户程序大部分都是