質問

まさに指示は何ですか

movzbl  0x01(%eax,%ecx),%eax

やりますか?

役に立ちましたか?

解決

AT&T構文は分割します movzx Intel Instruction Mnemonic さまざまなソースサイズの異なるニーモニックに(movzb vs。 movzw)。 Intelの構文では、次のようになります。

movzx eax, byte ptr [eax+ecx+1]

IEは、EAX+ECX+1のメモリからバイトをロードし、ゼロエクステンデンドフルレジスタに拡張します。

ところで、ほとんどのGNUツールには、Intel構文を好むスイッチまたは設定オプションがあります。 (そのような objdump -Mintel また gcc -S -masm=intel, 、後者は、インラインASMをコンパイルするときに使用される構文に影響します)。あなたが生活のためにAT&Tアセンブリをしないなら、私は確かにそれを調べることをお勧めします。を参照してください より多くのドキュメントとガイドについては、wikiにタグを付けます。

他のヒント

最小限の例

mov $0x01234567, %eax
mov $1, %bl
movzbl %bl, %eax
/* %eax == 0000 0001 */

mov $0x01234567, %eax
mov $-1, %bl
movzbl %bl, %eax
/* %eax == 0000 00FF */

アサーションを備えたRunanble Github上流.

ニーモニックは次のとおりです。

  • mov
  • ゼロ拡張
  • バイト(8ビット)
  • 長い(32ビット)

他のサイズのバージョンもあります。

  • movzbw: :byte(8ビット)からワード(16ビット)
  • movzwl: :単語(16ビット)から長い(32ビット)

ほとんどのガス指示と同様に、レジスタを扱うときに最後のサイズの文字を省略できます。

movzb %bl, %eax

しかし、前の手紙を省略できない理由を理解できません。たとえば、次の失敗:

movz %bl, %eax

オペランドが登録しているときに、オペランドのサイズからそれを推測してみませんか mov およびIntelの構文?

また、間違ったサイズのレジスタを使用する場合、例:

movzb %ax, %eax
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top