汇编语言 变量
-
变量
NASM提供了各种定义指令来为变量保留存储空间。define assembler指令用于分配存储空间。它可以用于保留以及初始化一个或多个字节。 -
为初始化数据分配存储空间
初始化数据的存储分配语句的语法为-[variable-name] define-directive initial-value [,initial-value]...
其中,变量名是每个存储空间的标识符。汇编器为数据段中定义的每个变量名称关联一个偏移值。define指令有五种基本形式-指令 目的 储存空间 DB 定义字节 分配1个字节 DW 定义字 分配2个字节 DD 定义双字 分配4个字节 DQ 定义四字 分配8个字节 DT 定义十个字节 分配10个字节 以下是一些使用define指令的示例-choice DB 'y' number DW 12345 neg_number DW -12345 big_number DQ 123456789 real_number1 DD 1.234 real_number2 DQ 123.456
请注意
- 字符的每个字节均以十六进制形式存储为其ASCII值。
- 每个十进制值都将自动转换为其等效的16位二进制数,并以十六进制数形式存储。
- 处理器使用小尾数字节顺序。
- 负数将转换为其2的补码表示形式。
- 短浮点数和长浮点数分别使用32位或64位表示。
以下程序显示了define指令的使用-
尝试一下section .text global _start ;must be declared for linker (gcc) _start: ;tell linker entry point mov edx,1 ;message length mov ecx,choice ;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 choice DB 'y'
编译并执行上述代码后,将产生以下结果-y
-
为未初始化的数据分配存储空间
reserve指令用于为未初始化的数据保留空间。reserve指令采用单个操作数,该操作数指定要保留的空间单位数。每个define指令都有一个相关的reserve指令。保留指令有五种基本形式-指令 目的 RESB 保留一个字节 RESW 保留字 RESD 保留双字 RESQ 保留四字 REST 保留十个字节 -
多种定义
一个程序中可以有多个数据定义语句。例如-choice DB 'Y' ;ASCII of y = 79H number1 DW 12345 ;12345D = 3039H number2 DD 12345679 ;123456789D = 75BCD15H
汇编器为多个变量定义分配连续的内存。 -
多重初始化
TIMES指令允许多次初始化为相同的值。例如,可以使用以下语句定义一个大小为9的标记的数组并将其初始化为零-marks TIMES 9 DW 0
TIMES指令在定义数组和表时很有用。以下程序在屏幕上显示9个星号-
尝试一下section .text global _start ;must be declared for linker (ld) _start: ;tell linker entry point mov edx,9 ;message length mov ecx, stars ;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 stars times 9 db '*'
编译并执行上述代码后,将产生以下结果-*********