我正在用汇编编写一个小程序,我需要计算一个整数,它是 2 的幂,并使用寄存器中的最后一位。假设我需要计算 2^31 并将结果存储在 ebx 寄存器中。
对于算术运算,如何将此 int 视为无符号数?
To compute a power of two you use a shift left operation - something like
SAL EAX,31
Addition and subtraction operations are the same for signed and unsigned values - i.e. it is only when you do something with the result (like displaying it) that you have to consider it signed or unsigned
For division and multiplication there are different instructions for signed (IDIV
, IMUL
) and unsigned (DIV
, MUL
)
许多汇编语言(即指令集架构)中的数据是无类型的,除了它有大小:即 8 位是不同于 16 位的“类型”。
您的 EBX 寄存器既没有签名也没有签名;它只是一个 32 位的库。
位的语义(位的含义)取决于所应用的操作,而不是像在高级语言中那样的任何类型的声明类型。
x86 将“逻辑移位”与“算术移位”区分开来。
因此,要计算1 << 31
您要使用逻辑左移 (SAL)。对于有符号数量的移位,请使用算术移位。