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

汇编 - 变量

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

NASM提供了各种 define指令,用于为变量保留存储空间. define assembler指令用于分配存储空间.它可用于保留和初始化一个或多个字节.

为初始化数据分配存储空间

存储分配语句的语法初始化数据是 :

  [variable-name] define-directive initial-value [,initial-value] ...

其中,变量名是每个存储空间的标识符.汇编程序为数据段中定义的每个变量名称关联一个偏移值.

define指令有五种基本形式 :

指令目的存储空间
DB定义字节分配1个字节
DW定义Word分配2个字节
DD定义双字分配4个字节
DQ定义四字分配8个字节
DT定义十个字节分配10个字节

以下是使用define directives :

$的一些示例b $ b

choiceDB'y'numberDW12345neg_numberDW-12345big_numberDQ123456789real_number1DD1.234real_number2DQ123.456

请注意 :

  • 字符的每个字节都以十六进制存储为ASCII值.

  • 每个十进制值自动转换为16位二进制等效值并存储作为十六进制数.

  • 处理器使用little-endian字节排序.

  • 负数转换为2的补码表示.

  • 短和长浮点数分别用32位或64位表示.

以下程序显示了使用define directive :

section .text   global _start          ;must be declared for linker (gcc)_start:                   ;tell linker entry point   movedx,1  ;message length   movecx,choice        ;message to write   movebx,1  ;file descriptor (stdout)   moveax,4  ;system call number (sys_write)   int0x80  ;call kernel   moveax,1  ;system call number (sys_exit)   int0x80  ;call kernelsection .datachoice DB 'y'

编译并执行上述代码时,它会生成foll欠结果 :

 y

为未初始化数据分配存储空间

保留指令用于为未初始化数据保留空间.保留指令采用单个操作数,指定要保留的空间单元数.每个define指令都有一个相关的保留指令.

保留指令有五种基本形式 :

指令目的
RESB保留一个字节
RESW保留一个字
RESD预订双字
RESQ预订四字
REST预留10个字节

多个定义

您可以在程序中拥有多个数据定义语句.例如 :

choice  DB 'Y'  ;ASCII of y = 79Hnumber1  DW 12345  ;12345D = 3039Hnumber2    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   movedx,9;message length   movecx, stars;message to write   movebx,1;file descriptor (stdout)   moveax,4;system call number (sys_write)   int0x80;call kernel   moveax,1;system call number (sys_exit)   int0x80;call kernelsection.datastars   times 9 db '*'

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

  *********