Assembly 变量声明
NASM提供各种定义变量预留存储空间的指令。定义汇编指令用于分配的存储空间。它可用于预定和初始化一个或多个字节。
初始化数据分配存储空间
初始化数据存储分配语句的语法是:
[variable-name] define-directive initial-value [,initial-value]...
变量名是每个存储空间的标识符。汇编器在数据段中定义的每一个变量名的偏移值。
有五种基本形式定义指令:
Directive | Purpose | Storage Space |
---|---|---|
DB | Define Byte | allocates 1 byte |
DW | Define Word | allocates 2 bytes |
DD | Define Doubleword | allocates 4 bytes |
DQ | Define Quadword | allocates 8 bytes |
DT | Define Ten Bytes | allocates 10 bytes |
以下是一些例子,使用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位分别表示
下面的程序显示了使用定义指令:
section .text global _start ;must be declared for linker (gcc) _start: ;tell linker entry yiibai 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
未初始化的数据分配存储空间
储备指令用于未初始化的数据预留空间。后备指令一个操作数指定要保留空间的单位数量。各自定义指令都有一个相关的后备指令。
有五种基本形式的后备指令:
Directive | Purpose |
---|---|
RESB | Reserve a Byte |
RESW | Reserve a Word |
RESD | Reserve a Doubleword |
RESQ | Reserve a Quadword |
REST | Reserve a Ten Bytes |
多重定义
可以在程序有多个数据定义语句。例如:
choice DB 'Y' ;ASCII of y = 79H number1 DW 12345 ;12345D = 3039H number2 DD 12345679 ;123456789D = 75BCD15H
汇编程序内存分配连续多个变量的定义。
多个初始化
TIMES指令允许多个初始化为相同的值。例如,一个名为标记大小为9的数组可以被定义和初始化为零,使用下面的语句:
marks TIMES 9 DW 0
时代的指令是非常有用在定义数组和表格。下面的程序显示在屏幕上的9星号:
section .text global _start ;must be declared for linker (ld) _start: ;tell linker entry yiibai 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 '*'
上面的代码编译和执行时,它会产生以下结果:
*********
本站文章除注明转载外,均为本站原创或编译
欢迎任何形式的转载,但请务必注明出处,尊重他人劳动共创优秀实例教程
转载请注明:文章转载自:代码驿站 [http:/www.codeinn.net]
本文标题:Assembly 变量声明
本文地址:http://www.codeinn.net/assembly/1001.html
欢迎任何形式的转载,但请务必注明出处,尊重他人劳动共创优秀实例教程
转载请注明:文章转载自:代码驿站 [http:/www.codeinn.net]
本文标题:Assembly 变量声明
本文地址:http://www.codeinn.net/assembly/1001.html