1

重複の可能性:
movsbl命令は何をしますか?

関連:movsbl命令は何をしますか?

プログラムを逆アセンブルすると、本当に独特な指示が見つかりました。

0x0000000000401106: movsbl (%rbx,%rax,1),%ecx

私はmovsblが何をするか知っていると思います:それは基本的にバイトを拡張し、先頭のもの(符号拡張)をレジスタに追加します。

しかし、それが上記の文脈で使用されたときにそれが何をするのか、私にはまったくわかりません。

この指示に光を当てることができれば幸いです。

4

2 に答える 2

2

指示

movsbl <%rbx,%rax,1>,%ecx

最初のオペランドでアドレス指定されたメモリ位置から1バイトを読み取り、signはそのバイトを32ビットに拡張し、結果をecxレジスタに格納します。

今から<%rbx,%rax,1>rbxこれは、との値を合計することによって形成されるメモリアドレスを単に示しますrax。ご参考までに、1はに適用される乗数raxです。

于 2012-12-14T15:56:18.423 に答える
0

その命令はアドレスからバイトをロードしrbx+rax、signはそれをに拡張しecxます。符号拡張は、ソースの最上位ビットを宛先の最上位ビットに複製するため、常に「先頭のビット」であるとは限らないことに注意してください。これは、2の補数の符号付き数値として解釈されたときに、値が変更されないようにするためです。

于 2012-12-14T15:56:57.643 に答える