Assembly 有没有一种方法可以通过使用NASM计算一个寄存器包含多少字节?

Assembly 有没有一种方法可以通过使用NASM计算一个寄存器包含多少字节?,assembly,nasm,Assembly,Nasm,假设寄存器EAX只包含字符“a”,那么AL将包含61(该数字是十六进制的,61是“a”的ASCII值)。有没有办法使用NASM知道EAX只保存1字节的数据?我想把这个号码存储在另一个寄存器中,比如EBX,然后做类似的事情 cmp-EBX,1 如果EAX有1字节,我会做些什么 编辑:如其中一个答案中所述,我的问题的更好名称是:“如何确定EAX存储的值是否可以用1字节表示?”每个寄存器都有一个固定的大小,而不管您在其中存储了什么 从您的问题来看,您似乎对另一个问题的答案感兴趣:“如何确定EAX存储的

假设寄存器EAX只包含字符“a”,那么AL将包含61(该数字是十六进制的,61是“a”的ASCII值)。有没有办法使用NASM知道EAX只保存1字节的数据?我想把这个号码存储在另一个寄存器中,比如EBX,然后做类似的事情

cmp-EBX,1
如果EAX有1字节,我会做些什么


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

每个寄存器都有一个固定的大小,而不管您在其中存储了什么


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

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

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

依此类推。

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