Учебники

Сборка — основной синтаксис

Программу сборки можно разделить на три раздела:

  • Раздел данных ,

  • Раздел 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» —

Live Demo

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

Если вы все сделали правильно, на экране появится надпись «Привет, мир!» на экране.