1

PCIアドレスを作成したい。アセンブリ言語で16ビットをEAXに(AXではなく)書き込むにはどうすればよいですか?例:0b1000000000000001と書く

EAX before
|_____16-bit_____||_______AX_______|
EAX after:
|1000000000000001||_______AX_______|

ありがとう!

4

2 に答える 2

4

それを行うには多くの方法があります、ここにいくつかあります。

スタックを使用して、フラグを変更しません。

プッシュeax
mov [esp + 2]、word 0b1000000000000001; 一部のアセンブラは単語ptrを必要とします
ポップイークス

左または右に回転します。スタックは必要ありませんが、フラグを変更します。

rol eax、16; rol / ror
mov ax、0b1000000000000001
rol eax、16; rol / ror

ハードコードされた値の場合(質問のように)、//とともに使用することもandできます。ハードコードされていない値の場合、この方法を使用するには、他のレジスタまたはメモリ内の値をシフトする必要があります。orxoradd

およびeax、0x0000ffff
またはeax、0x80010000; または/xor/ add
于 2013-03-21T18:24:05.053 に答える
3

上位 16 ビットにアクセスすることはできませんが、ちょっとしたトリックを使用できます。

push    ax
mov     ax, 1000000000000001b
shl     eax, 16
pop     ax

これにより、下位 16 ビットを破壊することなく、上位 16 ビットが任意の値に設定されます。

于 2013-03-21T15:38:58.610 に答える