私はアセンブリコードを見ていますが、何かを理解しようとして立ち往生しています:
incl (%ebx, %eax, 4)
これは正確に何をしますか?ファイルにプラグインして.s
コンパイルしてGDBのレジスタを監視しようとしましたがebx
、アドレスに設定して1に設定した後に命令を渡すと、eax
何も変わりませんでした...適切に使用する方法を理解していないと思います。誰でも助けることができますか?
私はアセンブリコードを見ていますが、何かを理解しようとして立ち往生しています:
incl (%ebx, %eax, 4)
これは正確に何をしますか?ファイルにプラグインして.s
コンパイルしてGDBのレジスタを監視しようとしましたがebx
、アドレスに設定して1に設定した後に命令を渡すと、eax
何も変わりませんでした...適切に使用する方法を理解していないと思います。誰でも助けることができますか?
レジスタをインクリメントしていません。命令のレジスタの内容から計算されたメモリ位置をインクリメントしています。
GAS と AT&T の構文は使用しないことをお勧めします。これは、構文を難読化し、初心者にとって不明確で魅力のないものにするために特に考案されました。
この構文は、HLL コンパイラのバックエンドで使用するために作成されています。人間が書いたプログラミングはマゾヒズムです。
私 (25 年のアセンブリ プログラミングのバックグラウンドを持つ) でさえ、通常の命令をほとんど認識できません。
inc dword [ebx+4*eax]
; increment a double word at memory address (ebx+4*eax)
代わりにFASMを使用してください。手書きのアセンブリ プログラムに最適な、明確で人間中心の構文を備えています。