汇编 - 基本语法



一个汇编程序可以分为三个部分:

  • 数据段,

  • 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 中编译和链接汇编程序

确保您已在 PATH 环境变量中设置了nasmld二进制文件的路径。现在,请按照以下步骤编译和链接上述程序:

  • 使用文本编辑器输入上述代码,并将其保存为 hello.asm。

  • 确保您位于保存hello.asm的同一目录中。

  • 要汇编程序,请键入nasm -f elf hello.asm

  • 如果存在任何错误,您将在此阶段收到提示。否则,将创建程序的命名为hello.o的对象文件。

  • 要链接对象文件并创建名为 hello 的可执行文件,请键入ld -m elf_i386 -s -o hello hello.o

  • 通过键入./hello执行程序

如果一切正确,它将在屏幕上显示“Hello, world!”。

广告