Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 在有符号算术上设置进位标志_Assembly_X86_Nasm - Fatal编程技术网

Assembly 在有符号算术上设置进位标志

Assembly 在有符号算术上设置进位标志,assembly,x86,nasm,Assembly,X86,Nasm,考虑到计算不需要进位这一事实,这段代码为什么设置CF?或者更好,CF在有符号算术中的行为和of在无符号算术中的行为是什么?加法按进行,结果大于8位0x80+0x80=0x100或二进制: mov ah, -128 mov bh, 80h add ah,bh 因此结果为0,并设置进位标志 不要把-128看作一个负数,而应该把它看作一个正数(128),它的位模式与二者对负数的补充相同,然后执行无符号加法。(因此设置进位标志。)加法按进行,结果大于8位0x80+0x80=0x100或二进制:

考虑到计算不需要进位这一事实,这段代码为什么设置CF?或者更好,CF在有符号算术中的行为和of在无符号算术中的行为是什么?

加法按进行,结果大于8位<代码>0x80+0x80=0x100或二进制:

mov ah, -128 
mov bh, 80h 
add ah,bh 
因此结果为0,并设置进位标志

不要把
-128
看作一个负数,而应该把它看作一个正数(
128
),它的位模式与二者对负数的补充相同,然后执行无符号加法。(因此设置进位标志。)

加法按进行,结果大于8位<代码>0x80+0x80=0x100或二进制:

mov ah, -128 
mov bh, 80h 
add ah,bh 
因此结果为0,并设置进位标志


不要把
-128
看作一个负数,而应该把它看作一个正数(
128
),它的位模式与二者对负数的补充相同,然后执行无符号加法。(因此设置了进位标志。)

不能用有符号的8位值表示128:

   0b10000000
+  0b10000000
-------------
= 0b100000000
因此,您正在计算:

-128 = 0x80
进位设定好了


8位有符号值适用于范围:-128。。。127

不能用有符号的8位值表示128:

   0b10000000
+  0b10000000
-------------
= 0b100000000
因此,您正在计算:

-128 = 0x80
进位设定好了


8位有符号值适用于范围:-128。。。127

因为第一个是负数,据我所知-128+128是0,没有任何借贷或结转。我可能错了,这就是我问这个问题的原因…因为第一个是否定的,据我所知-128+128是0,没有任何借贷或携带。我可能错了,这就是我问这个问题的原因…进位不关心有符号的值,它关心从MSB执行的进位。因此相关的一点是
0x100
不适合8位寄存器,并且无符号值的范围是
0..255
。你的答案读起来像是解释了为什么也设置了。我添加了-128和128,而不是-128和-128。你不能在8位寄存器中添加-128和128;它们不可能都合身。如果将其视为已签名,则可以添加-128和-128。或者,如果将其视为未签名,则可以添加128和128。在这两种情况下,它都会溢出。Carry不关心有符号的值,它关心从MSB执行的进位。因此相关的一点是
0x100
不适合8位寄存器,并且无符号值的范围是
0..255
。你的答案读起来像是解释了为什么也设置了。我添加了-128和128,而不是-128和-128。你不能在8位寄存器中添加-128和128;它们不可能都合身。如果将其视为已签名,则可以添加-128和-128。或者,如果将其视为未签名,则可以添加128和128。无论哪种情况,它都会溢出。
add
不知道上下文是“已签名”还是“未签名”,它不需要知道。加法操作是按位定义的,因此,
add
将使用它接收到的两个位模式遵循该算法,并按照指令指南中的描述设置所有标志,即当输入位模式被解释为无符号值溢出时设置CF,当输入位模式相同时设置OF/SF,但解释为有符号值、溢出/为负等。。。与
1000_0000
(80h)一样,当解释为无符号值时为+128,当解释为有符号8位值时为-128。然后,无符号/有符号上下文由以下代码给出,该代码将选择它将检测并用于进一步处理的标志,但是
add
本身对于两种上下文都是相同的,不需要知道程序员在想哪一种。
add
不知道上下文是“有符号的”还是“无符号的”,也不需要知道。加法操作是按位定义的,因此,
add
将使用它接收到的两个位模式遵循该算法,并按照指令指南中的描述设置所有标志,即当输入位模式被解释为无符号值溢出时设置CF,当输入位模式相同时设置OF/SF,但解释为有符号值、溢出/为负等。。。与
1000_0000
(80h)一样,当解释为无符号值时为+128,当解释为有符号8位值时为-128。然后,无符号/有符号上下文由以下代码给出,该代码将选择它将检测并用于进一步处理的标志,但是,
add
本身对于两种上下文都是相同的,并且不需要知道程序员考虑的是哪一种。