汇编 变量

汇编 变量

❮ 汇编 寻址模式

汇编 常量 ❯

汇编 - 变量

更新于 2024/3/19 18:02:00

NASM 提供了各种define 指令来为变量保留存储空间。 定义汇编指令用于分配存储空间。 它可用于保留和初始化一个或多个字节。

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

初始化数据的存储分配语句的语法为 −

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

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

define 指令有五种基本形式 −

指令

用途

存储空间

DB

定义 Byte

分配1个字节

DW

定义 Word

分配2个字节

DD

定义 Doubleword

分配4个字节

DQ

定义 Quadword

分配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 位表示。

下面的程序展示了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

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

保留指令用于为未初始化的数据保留空间。 保留指令采用单个操作数来指定要保留的空间单位数。 每个定义指令都有一个相关的保留指令。

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

指令

用途

RESB

保留一个 Byte

RESW

保留一个 Word

RESD

保留一个 Doubleword

RESQ

保留一个 Quadword

REST

预留十个字节

多重定义

一个程序中可以有多个数据定义语句。 例如 −

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 '*'

当上面的代码被编译并执行时,会产生以下结果 −

*********

❮ 汇编 寻址模式

汇编 常量 ❯

相关推荐

阿里巴巴运营零基础入门教程:涵盖开店、运营、推广,快速成为电商高手
dnf中宝珠如何合成?合成宝珠的材料有哪些?
有一个亚洲球队,6次参加世界杯打了19场比赛,对手居然从未重复
中国大陆版本是国行吗
365bet世界杯欢迎您

中国大陆版本是国行吗

📅 01-03 👁️ 579
手机传图片的详细教程:多种方法助你轻松分享
随荆轲刺秦王时,秦舞阳为什么怂了?
英超365bet体育投注

随荆轲刺秦王时,秦舞阳为什么怂了?

📅 12-08 👁️ 1499
韩国喊老公怎么说?
365信息网

韩国喊老公怎么说?

📅 10-14 👁️ 5065
一篇看懂变身卡玩法,学会根据职业选变身卡!
什么是婚嫁保险?
365bet世界杯欢迎您

什么是婚嫁保险?

📅 07-27 👁️ 5787