相关疑难解决方法(0)

ASM如何知道算术运算是有符号还是无符号?

我正在使用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 = …

x86 assembly masm irvine32

5
推荐指数
2
解决办法
415
查看次数

在机器代码中区分有符号和无符号

我在看一本教科书,上面写着:

重要的是要注意机器代码如何区分有符号和无符号值。与 C 不同,它不将数据类型与每个程序值相关联。相反,它主要对这两种情况使用相同的(汇编)指令,因为许多算术运算对于无符号和补码算术具有相同的位级行为。

我不明白这是什么意思,谁能给我举个例子?

c assembly unsigned

1
推荐指数
2
解决办法
1648
查看次数

标签 统计

assembly ×2

c ×1

irvine32 ×1

masm ×1

unsigned ×1

x86 ×1