开发手册 欢迎您!
软件开发者资料库

汇编 - 常量

汇编常量 - 从基本概念到高级概念,从简单和简单的步骤学习装配编程,包括简介,环境设置,基本语法,存储段,状态寄存器,系统调用,寻址模式,变量,常量,算术,条件执行,循环,逻辑,字符串处理,递归,数组,中断,过程,常量,宏,文件,内存管理。

NASM提供了几个定义常量的指令.我们在前面的章节中已经使用了EQU指令.我们将特别讨论三个指令 :

  • EQU

  • %assign

  • %define

EQU指令

EQU 指令用于定义常量. EQU指令的语法如下 :

  CONSTANT_NAME EQU表达式

例如,

  TOTAL_STUDENTS equ 50

你可以然后在代码中使用此常量值,例如 :

  mov ecx,TOTAL_STUDENTS  cmp eax,TOTAL_STUDENTS

EQU语句的操作数可以是表达式 :

  LENGTH equ 20  WIDTH equ 10  AREA equ length * width

上面的代码段将AREA定义为200.

示例

以下示例说明了使用EQU指令 :

SYS_EXIT  equ 1SYS_WRITE equ 4STDIN     equ 0STDOUT    equ 1section .text   global _start    ;must be declared for using gcc_start:             ;tell linker entry point   mov eax, SYS_WRITE            mov ebx, STDOUT            mov ecx, msg1            mov edx, len1    int 0x80                   mov eax, SYS_WRITE            mov ebx, STDOUT            mov ecx, msg2            mov edx, len2    int 0x80    mov eax, SYS_WRITE            mov ebx, STDOUT            mov ecx, msg3            mov edx, len3    int 0x80      mov eax,SYS_EXIT    ;system call number (sys_exit)   int 0x80            ;call kernelsection .datamsg1 db'Hello, programmers!',0xA,0xD len1 equ $ - msg1msg2 db 'Welcome to the world of,', 0xA,0xD len2 equ $ - msg2 msg3 db 'Linux assembly programming! 'len3 equ $- msg3

当编译并执行上述代码时,它会产生以下结果 :

Hello, programmers!Welcome to the world of,Linux assembly programming!

%assign Directive

%assign 指令可用于定义数字常数类似于EQU指令.该指令允许重新定义.例如,您可以将常量TOTAL定义为 :

 %assign TOTAL 10

稍后在代码中,您可以将其重新定义为 :

 %assign TOTAL 20

此指令区分大小写.

%define Directive

%define 指令允许定义数字和字符串常量.该指令类似于C中的#define.例如,您可以将常量PTR定义为 :

%define PTR [EBP+4]

上述代码用[EBP + 4]替换 PTR .

该指令还允许重新定义,并且区分大小写.