汇编 - 变量
汇编 - 变量
NASM 提供了各种定义指令来为变量保留存储空间。定义汇编指令用于分配存储空间。它可用于保留和初始化一个或多个字节。
为初始化数据分配存储空间
初始化数据的存储分配语句的语法是 -
[variable-name] define-directive initial-value [,initial-value]...
其中,variable-name是每个存储空间的标识符。汇编器为数据段中定义的每个变量名关联一个偏移值。
Define 指令有五种基本形式 -
指示
目的
储存空间
D B
定义字节
分配1个字节
数据仓库
定义词
分配2个字节
DD
定义双字
分配4个字节
数据Q
定义四字
分配8个字节
DT
定义十个字节
分配10个字节
以下是使用定义指令的一些示例 -
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 位表示。
以下程序显示了定义指令的使用 -
现场演示
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
为未初始化数据分配存储空间
保留指令用于为未初始化的数据保留空间。保留指令采用单个操作数来指定要保留的空间单位数。每个定义指令都有一个相关的保留指令。
储备指令有五种基本形式 -
指示
目的
RESB
保留一个字节
RESW
保留一个字
RESD
保留双字
RESQ
保留四字
休息
预留十个字节
多重定义
一个程序中可以有多个数据定义语句。例如 -
choice DB 'Y' ;ASCII of y = 79H
number1 DW 12345 ;12345D = 3039H
number2 DD 12345679 ;123456789D = 75BCD15H
汇编器为多个变量定义分配连续的内存。
多重初始化
TIMES 指令允许对同一值进行多次初始化。例如,可以使用以下语句定义一个名为marks、大小为 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 '*'
当上面的代码被编译并执行时,它会产生以下结果 -
*********
- 排位攻略
- 2025-10-23 07:06:50