Assembly ADD指令的结果是什么意思;环绕;如果大于参数的大小
我正在学习Udemy的汇编语言冒险:完整课程 在解释ADD指令时,讲师说,如果ADD指令的结果大于参数的大小,则该结果将“环绕” 它环绕着什么意思Assembly ADD指令的结果是什么意思;环绕;如果大于参数的大小,assembly,x86,Assembly,X86,我正在学习Udemy的汇编语言冒险:完整课程 在解释ADD指令时,讲师说,如果ADD指令的结果大于参数的大小,则该结果将“环绕” 它环绕着什么意思 据我所知,在4位带符号的数字中,我不能添加两个(正)数字,这会导致数字大于7,或者结果溢出,从而改变符号位。这就是讲师的意思吗?基本上就是这个意思。如果添加两个数字,结果无法存储在目标中,则: 如果存在最重要的存储列*的进位,则将精确设置进位;及 如果结果的符号不正确**,则将完全设置溢出 因此,一般来说,进位用于将加法扩展到多个字,但如果处理有
据我所知,在4位带符号的数字中,我不能添加两个(正)数字,这会导致数字大于7,或者结果溢出,从而改变符号位。这就是讲师的意思吗?基本上就是这个意思。如果添加两个数字,结果无法存储在目标中,则:
- 如果存在最重要的存储列*的进位,则将精确设置进位;及
- 如果结果的符号不正确**,则将完全设置溢出
*例如,好像它是任何其他长的加法:
1100 +
0101
----
0101 (result)
11 (carry)
最重要的列(位于左侧)生成进位。因此处理器将设置进位标志
**这里的逻辑很简单:
- 如果两个正数相加产生负数,则设置溢出李>
- 如果两个负数相加产生一个正数,则设置溢出李>
- 否则,请重置溢出
- 127+(-128)=-1,这符合
- 127+(任何比-128更接近于0的值)=介于-1和127之间的值,这符合
- (任何比127更接近于0的值)+(-128)=介于-1和128之间的值,适合
添加al,
并且结果不适合8位,ah
不会受到影响,因为指令中只指定了al
。要将溢出值转换为ah
,您需要显式地将右侧的8位值转换为16位值,al
转换为ax
(再次是8->16b),并添加ax,,这将使ah
包含结果的上8位(对于两个8位值相加后的无符号数学,结果将始终适合9位,因此ah=0或1(与add al时的进位相同,…
).两个有符号8位值将以ah=0或-1@Aquazi当有疑问时,运行一些调试器,打开任何可执行文件,大多数调试器都允许直接在其中写入少量指令,所以只需编写少量的mov
来设置寄存器来测试值,然后将您有疑问的指令放在那里,然后单步执行。就像moval,0C4h
添加al,al
->al
将是0x88
,CF=1,OF=0,ZF=0,SF=1,ah
不变,等等。想想模,如下面所回答的,缩写形式,它会将较低的位剪掉。添加0xFF和0xFF无符号。如果允许无限个结果位,则得到0x1FE,但如果限制为8 in和8 out,则结果is FE是结果2^8或256的模。将结果中较低的8位像模一样剪掉。模是指如果限制为8位,并且您希望计数为0x1FE或510,则它会环绕多少。510/256是1余数254(0xFE)。有符号和无符号溢出标志进一步帮助查看它是否适合结果(进位=无符号溢出)想想十进制,99+99=198,但就像计算机一样,如果我将自己限制为两位数,结果是98,它超过了100/0的滚动点。