我正在汇编中编写一个小程序,我需要计算一个2的幂的int并使用寄存器中的最后一位。假设我需要计算2 ^ 31并将结果存储在ebx寄存器中。
如何将此int视为无符号的算术运算?
答案 0 :(得分:2)
要计算2的幂,您可以使用左移操作 - 类似
SAL EAX,31
对于有符号和无符号值,加法和减法运算是相同的 - 也就是说,只有当你对结果做某事时(比如显示它),你必须考虑它是有符号的或无符号的
对于除法和乘法,签名(IDIV
,IMUL
)和无符号(DIV
,MUL
)
答案 1 :(得分:1)
许多汇编语言(即指令集架构)中的数据是无类型的,除非它有一个大小:即8位是与16不同的“类型”。
您的EBX注册既没有签名也没有签名;它只是一个32位的银行。
位的语义(位的含义)取决于所应用的操作,而不是像更高级语言那样在任何类型的声明类型上。
x86将“逻辑转换”与“算术转换”区分开来。
所以计算1 << 31
你想要使用逻辑左移(SAL)。对于移位有符号数量,请使用算术移位。