1

私は文字通り、アセンブリ言語を学び始めたばかりです。Windows Vista で NASM アセンブラを使用しています。

通常、新しい言語を学び始めるときは、他の人の Hello World コードをコピーして、1 行ずつ理解しようとします。しかし、他のライブラリを参照していない Hello World プログラムを見つけるのは驚くほど難しいと思います! おわかりのように、追加コードのライブラリ全体と密接にリンクしている場合、コードの各行を理解しようとしても意味がありません!

私がアセンブリを学びたい理由の 1 つは、自分が書いたプログラムをほぼ完全に制御できるようにするためです。ライブラリに依存したくありません。

そこで、私の質問は次のとおりです。Windows Vista コンソールに出力できる、完全にスタンドアロンの Hello World プログラムに対する NASM 互換のアセンブリ コードを誰か教えてくれませんか?

または、出力を印刷する場所 (つまり、Windows コンソール) をプログラムに指示するためにライブラリが必要になる場合があることを理解しています。それ以外に、ライブラリが必要な理由がわかりません。私は何かを見落としていますか?

4

4 に答える 4

3

方法は次のとおりです

       .text
LC0:
        .ascii "Hello, world!\12"
.globl _main
_main:
        pushl   %ebp
        movl    %esp, %ebp
        subl    $4, %esp
        pushl   $-11
        call    _GetStdHandle@4
        pushl   $0
        leal    -4(%ebp), %ebx
        pushl   %ebx
        pushl   $14
        pushl   $LC0
        pushl   %eax
        call    _WriteFile@20
        movl    $0, %eax
        leave
        ret

ただし、オペレーティング システムの機能を使用することはできません。ライブラリ (C ライブラリなど) を使用しないことの欠点は、特定の OS に自分自身を結びつけていることです。

于 2010-04-11T13:24:50.103 に答える
1

別の方法として、ビデオ メモリを介してコンソールに「Hello, World」を直接出力するブート ローダーを作成することもできます。そうすれば、あなたとベアメタルの間には事実上何もありません。OSDev Wiki で指摘されているブートローダーを作成するための手順を見つけることができます。そのページを読むことから始めて、概念とアイデアの説明を入手してください。その後、Hello World Bootloaderへの外部リンクをたどります。そこにあるチュートリアルでは、BIOS (ライブラリ) を使用してメッセージを出力することに注意してください。ただし、OSDev Wiki を検索して、BIOS なしで画面にメッセージを出力し、必要な変更を加える方法についての情報を見つけることができます。


追加するために編集:

このアクティビティには何らかの仮想化を使用することを強くお勧めします。自分が何をしているのか本当によくわかっていない限り、ハード ドライブのブート セクタをいじらないでください。

于 2010-04-11T13:40:17.310 に答える
0

すべてのプログラムのWindows ロードkernel32.dllntdll.dllライブラリ (使用するかどうかに関係なく)。また、オペレーティング システムへの低レベル インターフェイスは、プロセッサとそのバージョンに依存するため、それらを使用する必要があります (つまり、Windows の更新後に変更される可能性があります)。

于 2010-04-11T13:29:37.980 に答える
0

Windows は、すべてがライブラリにあるように設計されています。最も基本的なライブラリは Kernel32.dll です。これには、ファイルの書き込みと読み取り、およびその他の非常に基本的な操作のための関数が含まれています。(コンソールへの書き込みは、実際には特別なファイルへの書き込みにすぎません。)

Linux では、基本的なシステム関数はライブラリではなく、割り込み 80 を介してアクセスされる「システム コール」にあります。したがって、Linux では、「ライブラリ」コールなしでかなり高度なプログラムを作成することができます (そして非常に簡単です)。まったく。

ただし、おそらくいくつかのライブラリを採用する必要があります。ライブラリの全体的なポイントは、生活を楽にすることです。基本的なコンソールとファイルの入出力ができるように、C 標準ライブラリを使用してください。そこから、自分で作成できないライブラリが本当に必要な場所が見つからない可能性があります。

于 2010-04-11T13:54:11.240 に答える