我正在使用MASM 14.0进行组装,我对以下代码的输出感到困惑.
TITLE Exercise 4 from chapter 4
; Author : Saad Ahmed
INCLUDE Irvine32.inc
.code
main PROC
mov eax, 0
mov al, 255
add al, 1
call DumpRegs ; Display registers
mov al, 127
add al, 1
call DumpRegs ; Display registers
exit
main ENDP
END main
Run Code Online (Sandbox Code Playgroud)
两个算术运算都在无符号整数255和127上完成.
但是,CPU将第一个操作255视为无符号整数并设置进位标志,当您将1添加到无符号255时会发生这种情况.
完整的状态标志是CF = 1 SF = 0 ZF = 1 OF = 0 AF = 1 PF = 1,eax为0
但是,第二个操作将127视为有符号整数,因为它设置了溢出标志,如果你将1加到+127就会发生这种情况.
完整的状态标志为CF = 0 SF = 1 ZF = 0 OF = …
我在看一本教科书,上面写着:
重要的是要注意机器代码如何区分有符号和无符号值。与 C 不同,它不将数据类型与每个程序值相关联。相反,它主要对这两种情况使用相同的(汇编)指令,因为许多算术运算对于无符号和补码算术具有相同的位级行为。
我不明白这是什么意思,谁能给我举个例子?