PCIアドレスを作成したい。アセンブリ言語で16ビットをEAXに(AXではなく)書き込むにはどうすればよいですか?例:0b1000000000000001と書く
EAX before
|_____16-bit_____||_______AX_______|
EAX after:
|1000000000000001||_______AX_______|
ありがとう!
PCIアドレスを作成したい。アセンブリ言語で16ビットをEAXに(AXではなく)書き込むにはどうすればよいですか?例:0b1000000000000001と書く
EAX before
|_____16-bit_____||_______AX_______|
EAX after:
|1000000000000001||_______AX_______|
ありがとう!
それを行うには多くの方法があります、ここにいくつかあります。
スタックを使用して、フラグを変更しません。
プッシュeax mov [esp + 2]、word 0b1000000000000001; 一部のアセンブラは単語ptrを必要とします ポップイークス
左または右に回転します。スタックは必要ありませんが、フラグを変更します。
rol eax、16; rol / ror mov ax、0b1000000000000001 rol eax、16; rol / ror
ハードコードされた値の場合(質問のように)、//とともに使用することもand
できます。ハードコードされていない値の場合、この方法を使用するには、他のレジスタまたはメモリ内の値をシフトする必要があります。or
xor
add
およびeax、0x0000ffff またはeax、0x80010000; または/xor/ add
上位 16 ビットにアクセスすることはできませんが、ちょっとしたトリックを使用できます。
push ax
mov ax, 1000000000000001b
shl eax, 16
pop ax
これにより、下位 16 ビットを破壊することなく、上位 16 ビットが任意の値に設定されます。