📜  程序集-基本语法

📅  最后修改于: 2020-11-05 05:02:50             🧑  作者: Mango


汇编程序可以分为三个部分-

  • 数据部分

  • bss部分,以及

  • 文字部分。

数据部分

数据部分用于声明初始化的数据或常量。此数据在运行时不会更改。您可以在本节中声明各种常量值,文件名或缓冲区大小等。

声明数据部分的语法是-

section.data

bss部分

bss部分用于声明变量。声明bss部分的语法是-

section.bss

文字部分

文本部分用于保留实际代码。该部分必须以全局声明_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执行程序

如果您正确完成了所有操作,则会显示“您好,世界!”屏幕上。