有没有办法计算寄存器使用NASM保存的字节数?

时间:2014-02-25 19:50:17

标签: assembly 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个字节表示?”

3 个答案:

答案 0 :(得分:5)

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

从您的问题看起来您似乎对另一个问题的答案感兴趣:“如何确定EAX存储的值是否可以使用1个字节表示”。如果情况确实如此,那么您所要做的就是将EAX与适合一个字节的最大数量进行比较。

答案 1 :(得分:3)

您可以使用Bit Scan Reverse指令扫描前导数字,并使用线性代数将输出映射到0..31到范围0..4之间。当操作数为零时,必须特别注意这种情况。

答案 2 :(得分:2)

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

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

等等。