2012-03-27 8 views
1

注:私の記憶が正しければ、これが呼び出されたサブルーチン/関数に対する引数はレジスタオペコード用のAT&T構文ポストフィックスは何ですか?

に配置されていないスタックにプッシュされて、私はアセンブリをしようとしてきたと私は望んでいた意味ので、私はBSDベースのシステムを使用しています私の単純なカーネル出口プログラムを試してみてください:

.globl _start 

_start: 
    movl $0x20, %eax 
    pushl %eax 
    movl $0x1, %eax 
    subl $0x4, %esp 
    int $0x80 

64ビットアセンブリです。

大きな違いは、プレフィックスがの32ビット標準の代わりにrに変更されていることです。

しかし、lが既に32ビットの長さを意味する場合、64ビットオペコードの新しいポストフィックスは何ですか?

なぜ新しいレジスタの接頭辞はですか?

また、詳しい情報がある適切なリソースがある場合。またはチュートリアル、チュートリアルは常に楽しいです。

+0

呼び出し規約は、32ビットアプリケーションよりも64ビットアプリケーションでは異なるため、スタックではなくレジスタを使用します。詳細については、[この回答](http://stackoverflow.com/a/2538212/458390)を参照してください。 64ビットの接尾辞はクワッドワードの 'q 'です。 「r」という接頭辞はおそらくAMDが64ビット拡張を最初に作成したため、Intelは「拡張」を意味する他の文字を追加する機会を持っていなかったでしょう。 – ughoavgfhw

答えて

2

PostfixがQWORDためqあり、そしてrはおそらくレジスタの略です。 Here'sは、AT & T構文での紹介です。

+0

dwordに 'l'が' d'でない理由は何ですか?それとも、Cコンパイルのために作られたGASの残党だけですか?それでなぜCは 'short'と' long'の代わりに 'word'と' dword'を使うのでしょうか? – Hawken

+1

AT&Tの構文に入った意思決定に関しては、Cと強く結びついているとしか考えられません。そして、Cに入った設計の決定に関して、私は言うことができませんでした:P –

関連する問題