假设寄存器EAX仅保持字符'a',因此AL将保持61(此数字为十六进制,61为'a'的ASCII值)。有没有办法使用NASM知道EAX只保存1个字节的数据?我想将这个号码存储在另一个寄存器中,比如EBX,并执行类似
的操作 cmp EBX, 1
je do_something_if_EAX_has_1_byte
答案 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
等等。