0

以下の2番目の値のアドレスをレジスタにロードしたいと思います。

Unix構文の私のコードは次のとおりです。

.data
Lz7:
    .long 24
    .long 34
    .long 80
    .long 108
    .long 101
    .long 97
    .long 115
    .long 101
    .long 32
    .long 105
    .long 110
        ...etc...

私はこのコードを使おうとしています:

movl Lz7, %eax /* %g14 */ 
movl $4, %ebx /* %g15 */ 
addl %ebx /* %g15 */ , %eax /* %g16 */  

しかし、gccは実行時のバスエラーについて文句を言います。GDBでは、GCCがラベルLz7を16進値0x2068に変換していることがわかります。これは小さすぎるようです。私も4(Lz7)を試しましたが、GCCが文句を言います。プログラム内のバスエラーの場所を特定するにはどうすればよいですか?このコードが正しくない場合、代わりに何を書くべきですか?

4

1 に答える 1

1

次のように、有効なアドレスを取得するには、「leal」命令を使用する必要があります。

leal Lz7, %eax
addl $4, %eax
于 2011-04-30T01:52:14.637 に答える