3

私はアセンブリ言語に比較的慣れていません。ML64とMASM32を使用してHelloWorldアプリケーションを作成する方法を説明するチュートリアルをたくさん見つけましたが、プログラムの詳細を説明しているチュートリアルはありません。たとえば、私がオンラインで見つけてコンパイルした以下の例を見てください(64ビット):

main proc
sub rsp, 68h      ; space for 4 arguments + 16byte aligned stack
xor r9d, r9d        ; 4. argument: r9d = uType = 0
lea r8, [caption]   ; 3. argument: r8  = caption
lea rdx, [text]     ; 2. argument: edx = window text
xor rcx, rcx        ; 1. argument: rcx = hWnd = NULL
call MessageBoxA
xor ecx, ecx        ; ecx = exit code
call ExitProcess
main endp

end

私はこれをフォローすることができます。汎用レジスタとセグメントレジスタがあることは理解していますが、どちらを使用するかをどのように決定しますか。たとえば、「r8」にr9ではなくキャプションが含まれているのはなぜですか。WinAPIのアセンブリリファレンスはありますか?これが基本的な質問だと思います。これは64ビットの例を使用した一般的な質問であるため、MASM32タグを選択しました。

4

2 に答える 2

2

Windows x64の呼び出し規約は、たとえばここで説明されています。

MessageBoxA 引数の順序を知るには、たとえばここを探してください。

于 2012-03-20T14:12:56.087 に答える
0

最初に、アセンブリ言語の学習とオペレーティングシステムコールの学習を別々に行うことをお勧めします。次に、最初のアセンブリ言語としてx86から​​始めないでください。それをあなたが学ぶ3番目か4番目か最後のものにしてください。あなたがしなければならないと感じるなら、私は8088/8086から始めて、それがどうなったかに飛び込む前にx86で基礎を築くことをお勧めします。

arm / thumb / msp430 / mico8 / avrはすべて、1番目、2番目、3番目などの優れた命令セットであり、2番目または3番目(異なるファミリ)では、最初ではない場合でも、コンピュータの動作に優れた基盤があります。pcemuは私のものではありません。バージョンをフォークし、オペレーティングシステムを削除して、アセンブリ言語の学習に使用できるようにしました。数ドルで、Intelから8088/8086マニュアルの良い中古コピーを入手できます。

http://www.amazon.com/gp/product/1555120814

繰り返しになりますが、今日x86になったものの優れた基盤です。

それがすべて終わったら、asmからのオペレーティングシステムコールを調べ始めます...開始するにはasmからのいくつかが必要な場合があります。たとえば、プログラムの実行を確認するために、ある種の印刷を行います。

于 2012-03-20T14:26:08.150 に答える