有没有办法使用 NASM 计算寄存器持有多少字节



>假设寄存器EAX只保存字符'a',所以AL将持有61(这个数字是十六进制的,61是'a'的ASCII值)。有没有办法使用 NASM 知道 EAX 只保存 1 字节的数据?我想将此号码存储在另一个寄存器中,例如 EBX,然后执行类似操作

cmp EBX, 1 je do_something_if_EAX_has_1_byte

编辑:正如其中一个答案中所述,我的问题的一个更好的名称是:"我如何确定EAX存储的值是否可以使用1个字节表示?

每个寄存器都有固定的大小,无论您在其中存储什么。

从您的问题来看,您似乎对另一个问题的答案感兴趣:"我如何确定 EAX 存储的值是否可以使用 1 字节表示"。如果确实如此,您所要做的就是将EAX与一个字节中可容纳的最大数字进行比较。

您可以使用位扫描反向指令扫描前导数字,并使用线性代数将 0..31 之间的输出映射到 0..4 之间。当操作数为零时,必须特别小心。

使用前将其清零,然后使用位掩码或比较检查大小。

xor eax, eax ; clear it
mov eax, whatever
cmp eax, 255
jle eax_has_one_byte ; if it is less than or equal to 255, it uses one byte
cmp eax, 65535
jle eax_has_two_bytes

等等。

最新更新