汇编语言 基本语法

  • 基本语法

    汇编程序可以分为三个段-
    • data段
    • bss 段
    • text段
  • data段

    数据(data)段被用于声明初始化的数据或常数。此数据在运行时不会更改。您可以在段中声明各种常量值,文件名或缓冲区大小等。
    声明数据段的语法是-
    
    section.data
    
  • bss 段

    bss段用于声明变量。声明bss段的语法是-
    
    section.bss
    
  • text段

    代码段被用于保持实际的代码。该段必须以全局声明_start开头,该声明告诉内核程序从何处开始执行。
    声明代码段的语法是-
    
    section.text
       global _start
    _start:
    
  • 注释

    汇编语言注释以分号(;)开头。它可以包含任何可打印字符,包括空格。它可以单独出现在一行上,例如-
    
    ; 该程序在屏幕上显示一条消息
    
    或者,与指令在同一行上,例如-
    
    add eax, ebx     ; 加上 ebx 到 eax
    
  • 汇编语言声明

    汇编语言程序包含三种类型的语句-
    • 可执行指令或说明
    • 汇编程序指令或伪操作
    可执行指令或简单的指令告诉处理器做什么。每个指令由一个操作码(操作码)组成。每个可执行指令生成一个机器语言指令。该汇编指令或伪操作讲述了装配过程的各方面的汇编。这些是不可执行的,不会生成机器语言指令。基本上是一种代码替换机制。
  • 汇编语言语句的语法

    汇编语言语句每行输入一个语句。每个语句遵循以下格式-
    
    [label]   mnemonic   [operands]   [;comment]
    
    方括号中的字段是可选的。基本指令包括两段,第一段是要执行的指令(或助记符)的名称,第二段是命令的操作数或参数。
    以下是一些典型汇编语言语句的示例-
    
    INC COUNT        ; 增加内存变量COUNT
    
    MOV TOTAL, 48    ; 将值48转移到
                     ; 内存变量TOTAL
                     
    ADD AH, BH       ; 添加寄存器BH内容
                     ; 到AH寄存器
                     
    AND MASK1, 128   ; 对变量MASK1和128
                     ; 执行AND操作
                     
    ADD MARKS, 10    ; 将10加到变量MARKS
    MOV AL, 10       ; 将值10传送到AL寄存器
    
  • 汇编语言的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!” 屏幕上。