Программу сборки можно разделить на три раздела:
-
Раздел данных ,
-
Раздел BSS , и
-
Текстовый раздел.
Раздел данных ,
Раздел BSS , и
Текстовый раздел.
Раздел данных
Раздел данных используется для объявления инициализированных данных или констант. Эти данные не изменяются во время выполнения. В этом разделе вы можете объявить различные постоянные значения, имена файлов или размер буфера и т. Д.
Синтаксис объявления раздела данных —
section.data
Раздел BSS
Секция bss используется для объявления переменных. Синтаксис объявления раздела bss —
section.bss
Текстовый раздел
Текстовый раздел используется для хранения актуального кода. Этот раздел должен начинаться с объявления global _start , которое сообщает ядру, где начинается выполнение программы.
Синтаксис объявления текстового раздела —
section.text global _start _start:
Комментарии
Комментарий на ассемблере начинается с точки с запятой (;). Он может содержать любой печатный символ, включая пробел. Он может появиться в строке сам по себе, например:
; This program displays a message on screen
или в той же строке вместе с инструкцией, как —
add eax, ebx ; adds ebx to eax
Заявления на ассемблере
Программы на ассемблере состоят из трех типов утверждений:
- Исполняемые инструкции или инструкции,
- Директивы ассемблера или псевдооперации, и
- Макросы.
Исполняемые инструкции или просто инструкции говорят процессору, что делать. Каждая инструкция состоит из кода операции (код операции). Каждая исполняемая инструкция генерирует одну инструкцию на машинном языке.
Директивы ассемблера или псевдооперации рассказывают ассемблеру о различных аспектах процесса сборки. Они не являются исполняемыми и не генерируют инструкции машинного языка.
Макросы — это в основном механизм подстановки текста.
Синтаксис операторов ассемблера
Операторы языка ассемблера вводятся по одной инструкции в каждой строке. Каждое утверждение имеет следующий формат —
[label] mnemonic [operands] [;comment]
Поля в квадратных скобках являются необязательными. Базовая инструкция состоит из двух частей: первая — это имя инструкции (или мнемоника), которая должна быть выполнена, а вторая — операнды или параметры команды.
Ниже приведены некоторые примеры типичных операторов ассемблера.
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
Убедитесь, что вы указали путь двоичных файлов nasm и ld в переменной окружения PATH. Теперь выполните следующие шаги для компиляции и компоновки вышеуказанной программы:
-
Введите приведенный выше код в текстовом редакторе и сохраните его как hello.asm.
-
Убедитесь, что вы находитесь в той же директории, где вы сохранили hello.asm .
-
Чтобы собрать программу, введите nasm -f elf hello.asm
-
Если есть какая-либо ошибка, вам будет предложено об этом на этом этапе. В противном случае будет создан объектный файл вашей программы с именем hello.o .
-
Чтобы связать объектный файл и создать исполняемый файл с именем hello, введите ld -m elf_i386 -s -o hello hello.o
-
Запустите программу, набрав ./hello
Введите приведенный выше код в текстовом редакторе и сохраните его как hello.asm.
Убедитесь, что вы находитесь в той же директории, где вы сохранили hello.asm .
Чтобы собрать программу, введите nasm -f elf hello.asm
Если есть какая-либо ошибка, вам будет предложено об этом на этом этапе. В противном случае будет создан объектный файл вашей программы с именем hello.o .
Чтобы связать объектный файл и создать исполняемый файл с именем hello, введите ld -m elf_i386 -s -o hello hello.o
Запустите программу, набрав ./hello
Если вы все сделали правильно, на экране появится надпись «Привет, мир!» на экране.