Assembly-programming-assembly-basic-syntax
アセンブリ-基本構文
アセンブリプログラムは3つのセクションに分けることができます-
- data セクション、
- bss セクション、および
- text セクション。
_data_セクション
*data* セクションは、初期化されたデータまたは定数を宣言するために使用されます。 このデータは実行時に変更されません。 このセクションでは、さまざまな定数値、ファイル名、またはバッファサイズなどを宣言できます。
データセクションを宣言するための構文は-
section.data
_bss_セクション
*bss* セクションは、変数の宣言に使用されます。 bssセクションを宣言するための構文は次のとおりです-
section.bss
_text_セクション
*text* セクションは、実際のコードを保持するために使用されます。 このセクションは、 *global _start* 宣言で始まる必要があります。これは、プログラムの実行が開始される場所をカーネルに通知します。
テキストセクションを宣言するための構文は次のとおりです-
section.text
global _start
_start:
コメント
アセンブリ言語のコメントはセミコロン(;)で始まります。 空白を含む印刷可能な文字を含めることができます。 それは、次のようにそれ自体で行に表示することができます-
; This program displays a message on screen
または、命令と同じ行で-のように
add eax, ebx ; adds ebx to eax
アセンブリ言語ステートメント
アセンブリ言語プログラムは、3種類のステートメントで構成されています-
- 実行可能な指示または指示、
- アセンブラーディレクティブまたは擬似操作
- マクロ
実行可能命令*または単に*命令*は、プロセッサに何をすべきかを伝えます。 各命令は、*操作コード(オペコード)で構成されています。 各実行可能命令は、1つの機械語命令を生成します。
アセンブラディレクティブ*または *pseudo-ops は、アセンブリプロセスのさまざまな側面についてアセンブラに通知します。 これらは実行可能ではなく、機械語命令を生成しません。
- マクロ*は、基本的にテキスト置換メカニズムです。
アセンブリ言語ステートメントの構文
アセンブリ言語ステートメントは、1行に1ステートメントずつ入力されます。 各ステートメントは次の形式に従います-
[label] mnemonic [operands] [;comment]
角括弧内のフィールドはオプションです。 基本的な命令には2つの部分があります。最初の部分は実行される命令(またはニーモニック)の名前で、2番目はコマンドのオペランドまたはパラメーターです。
以下は、典型的なアセンブリ言語ステートメントのいくつかの例です-
INC COUNT ; Increment the memory variable COUNT
MOV TOTAL, 48 ; Transfer the value 48 in the
; memory variable TOTAL
ADD AH, BH ; Add the content of the
; BH register into the AH register
AND MASK1, 128 ; Perform AND operation on the
; variable MASK1 and 128
ADD MARKS, 10 ; Add 10 to the variable MARKS
MOV AL, 10 ; Transfer the value 10 to the AL register
アセンブリのHello Worldプログラム
次のアセンブリ言語コードは、画面に文字列「Hello World」を表示します-
section .text
global _start ;must be declared for linker (ld)
_start: ;tells linker entry point
mov edx,len ;message length
mov ecx,msg ;message to write
mov ebx,1 ;file descriptor (stdout)
mov eax,4 ;system call number (sys_write)
int 0x80 ;call kernel
mov eax,1 ;system call number (sys_exit)
int 0x80 ;call kernel
section .data
msg db 'Hello, world!', 0xa ;string to be printed
len equ $ - msg ;length of the string
上記のコードをコンパイルして実行すると、次の結果が生成されます-
Hello, world!
NASMでのアセンブリプログラムのコンパイルとリンク
PATH環境変数に nasm および ld バイナリのパスが設定されていることを確認してください。 さて、上記のプログラムをコンパイルおよびリンクするには、次の手順を実行します-
- テキストエディターを使用して上記のコードを入力し、hello.asmとして保存します。
- hello.asm を保存したディレクトリと同じディレクトリにいることを確認してください。
- プログラムをアセンブルするには、 nasm -f elf hello.asm と入力します
- エラーがある場合は、この段階でそれについてプロンプトが表示されます。 それ以外の場合、 hello.o という名前のプログラムのオブジェクトファイルが作成されます。
- オブジェクトファイルをリンクし、helloという名前の実行可能ファイルを作成するには、 ld -m elf_i386 -s -o hello hello.o と入力します。
- *。/hello *と入力してプログラムを実行します
すべてを正しく実行すると、「Hello、world!」と表示されます。画面上。