写给bl和bh

问题描述 投票:0回答:1

我试图了解以下行为:

mov bl, 51 ; now print $ebx in gdb returns 51         
mov bh, 52 ; now it is 13363 but I thought it would be 5251

为什么?我在Intel x86上使用Linux nasm

assembly x86 nasm radix number-systems
1个回答
1
投票

当您打印16位整数时,不要单独将两个字节转换为十进制字符串并将它们连接起来。您必须将整个16位数转换为一个位值数字字符串。

它不起作用的原因是基数10不是2的幂。对于均匀分割256的基数,如十六进制,分别执行每个字节(或十六进制的4位半字节)。

例如bh = 0x34:bl = 0x33给你52*256 + 51 = 0x3433

这是转换为十六进制比转换为十进制更容易(也更有效)的一个原因:您可以先从最重要的数字开始。

对于与256不一致的基数(如果这是正确的术语),除以基数(例如除以10得到低位)改变高位


顺便说一句,请注意写入BL和BH不会使EBX的高2字节为零。 BH:BL的16位串联可以作为BX寻址,而不是EBX。但如果EBX的高2字节为零,则打印EBX与BX相同。

© www.soinside.com 2019 - 2024. All rights reserved.