Assembly 标志、进位和溢出标志(组件)
如果使用ADD指令将val2增加1,进位的值是多少 然后签名 如果使用ADD指令将val4增加1,则Over的值是多少- 流和签名标志Assembly 标志、进位和溢出标志(组件),assembly,Assembly,如果使用ADD指令将val2增加1,进位的值是多少 然后签名 如果使用ADD指令将val4增加1,则Over的值是多少- 流和签名标志 我两个都答错了。为什么答案是这样的?1.指定平台标志可以在不同的平台上进行不同的设置 2.使用的指令的位宽是多少 .data val1 BYTE 10h val2 WORD 8000h val3 DWORD 0FFFFh val4 WORD 7FFFh 大多数CPU不处理带符号的数字,而是使用2'os补码二进制表示 试图总结大多数评论中已经讨论过的内容 x8
我两个都答错了。为什么答案是这样的?1.指定平台标志可以在不同的平台上进行不同的设置 2.使用的指令的位宽是多少
.data
val1 BYTE 10h
val2 WORD 8000h
val3 DWORD 0FFFFh
val4 WORD 7FFFh
- 大多数CPU不处理带符号的数字,而是使用2'os补码二进制表示
- 试图总结大多数评论中已经讨论过的内容
x86,以及到目前为止我所看到的所有其他处理器体系结构,都没有真正意义上的有符号和无符号数字。由您的解释确定16位值
8000h
是+32768(无符号)还是-32768(有符号)
没有单独的有符号和无符号指令进行加法和减法;同样,您可以决定7FFFh+0001h
是有效的(无符号)加法还是溢出(因为7FFFh
是16位2的补码中的最大有符号整数)
为了帮助程序员,算术运算为两种解释都设置了标志。操作完成后,测试相应的标志。经验法则:
- 对于有符号的数字,测试溢出和符号标志
- 对于无符号数字,测试进位标志;它或多或少起到“未签名溢出”的作用
有符号时溢出(设置了OF),无符号时溢出(CF=0);签名时结果8000h为负(SF=1)7FFFh+1
未签名时溢出(设置CF),未签名时溢出(OF=0);结果0000h不为负(SF=0)FFFFh+1
“我两个都回答了”。你回答了什么?我说的第一个问题都是0,因为val2是一个无符号字节,加一不会使它为负。答案是符号标志是1。第二个问题我又说了0。答案是都是1。哦,我明白了,你误解了我的意思。我这样措辞是为了避免引导你的答案,尽管我不太可能这样做。这只是一种预防措施。
val2
被声明为一个单词
。假设这是针对x86的(您没有指定CPU体系结构),一个字是16位。所以它不是一个字节。此外,该值可以同时被视为有符号和无符号。选择哪种查看方式取决于您使用的说明。符号是操作最高位的副本第二个问题要求的是溢出标志,而不是进位标志。是的,对不起。它说的仍然是=1,尽管。。。您在答案中加入了进位。@user3682802 x86如果我的内存运行良好,则添加溢出与进位相同“如果我的内存运行良好,则添加溢出与进位相同”。不是真的。如果您添加两个具有相同符号的数字并得到具有不同符号的结果,则会发生溢出。
8000h
+0001h
------
8001h -> Carry=0,Sign16=1
7FFFh
+0001h
------
8000h -> Carry=0,Sign16=1