汇编语言 变量
文章目录
汇编语言 变量一、变量的概念二、变量的定义(1)变量名(2)变量定义伪指令1.助记符:BYTE2.助记符:WORD3.助记符:DWORD
(3)初值表
三、多字节数据的存储顺序(1)字节编址的主存储器(2)数据的存储顺序(3)小端存储和大端存储
四、变量的定位(1)变量(代码)的存储位置(2)定位伪指令(3)多字节数据对齐地址边界获得更高的性能
五、变量属性(1)变量的地址属性(2)变量的类型属性
一、变量的概念
变量实质上是主存单元的数据,因而可以改变 变量需要事先定义 (Define) 才能使用,并具有属性,方便应用
随程序运行会发生变化的数据保存在可读可写的主存空间变量的实质是主存单元的数据,因而可以改变变量需要事先定义才能使用变量具有属性方便应用变量表达主存数据,即存储器操作数
二、变量的定义
变量定义伪指令是最常使用的汇编语言说明性语句,它的汇编语言格式为:
变量名 变量定义伪指令 参数,参数…(初值表)
变量定义之后 :
►分配了存储空间►赋予了初值(也可以没有初值)►创建了变量名 (可以获知变量的地址和类型)
(1)变量名
变量名即汇编语句名字部分,是用户自定义的标识符,表示初值表首个数据的逻辑地址。汇编语言使用这个符号表示地址,故有时被称为符号地址。变量名可以省略,在这种情况下,汇编程序将直接为初值表分配空间,没有符号地址 设置变量名是为了方便存取它指示的存储单元
变量名是用户标识符,表示首元素逻辑地址
(2)变量定义伪指令
伪指令助记符:byte、word、dword…,表示变量类型
助记符变量类型变量定义功能BYTE字节分配1个或多个字节单元;每个数据是字节量,也可以是字符串常量,字节量表示8位无符号数或有符号数、字符的 ASCII 码值WORD字分配1个或多个字单元;每个数据是字量、16 位数据,字量表示 16 无符号数或有符号数、 16 位段选择器、 16 位偏移地址DWORD双字分配1个或多个双字单元 ;每个数据是双字量 32 位数据,双字量表示 32 位无符号数或有符号数、32 位段基地址、32 位偏移地址FWORD3个字分配1个或多个6字节单元,6字节变常表示含 16 位段选择器和 32 位偏移地址的 48 位指针地址QWORD4个字分配一个或多个8字节字单元,8字节量表示 64 位数据TBYTE10个字分配一个或多个十字节字单元,表示 BCD 码、 10字节数据(用于浮点运算)
1.助记符:BYTE
变量类型:字节
8位变量定义,使用byte伪指令 ►每个数据是一个字节量,占用一个存储单元
字符(串)变量定义也使用byte伪指令 ►每个字符是一个8位ASCII码
变量定义的参数不区别有无符号 ►可以是无符号数,也可以是有符号数
分配一个或多个字节单元每个数据是8位字节量:
8位无符号整数:0~255 8位补码表示的有符号整数:-128~+127 一个字符(ASCII码值) 压缩BCD码:0~99 非压缩BCD码:0~9
BYTE伪指令定义的每个数据都是8位、1个字节
msg byte 'Hello',13,10,0
const1 byte 100,64h,'d'
const6 byte 4*4,34h+34
2.助记符:WORD
变量类型:字
16位变量定义,使用word伪指令 ►每个数据是一个字量,占用2个存储单元
变量定义的参数不区别有无符号 ►可以是无符号数,也可以是有符号数
分配一个或多个字单元每个数据是16位、字量
16位无符号整数:0~65535 16位补码表示的有符号整数:-32768~+32767 16位段地址 16位偏移地址
WORD伪指令定义的每个数据都是16位、2个字节
wvar1 word 0,-32768,65535
wvar2 word ?
minint = 10
wvar3 word 5 dup(minint)
3.助记符:DWORD
变量类型:双字
32位变量定义,使用dword伪指令 ►每个数据是一个双字量,占用4个存储单元
变量定义的参数不区别有无符号 ►可以是无符号数,也可以是有符号数
分配一个或多个双字单元每个数据是32位双字量
32位无符号整数:0~232-1 32位补码表示的有符号整数:-231 ~ +231-1 32位逻辑地址(含16位段地址和16位偏移地址)
dvar1 dword 0,80000000h,0ffffffffh
dvar2 dword ?
array dword 5 dup(0)
(3)初值表
初值表是用逗号分隔的一个或多个参数,表示变量初值
变量定义的初值表
变量定义是申请存储空间
同时还可以进行存储单元初始化即用初值表赋予变量初值 初值表可以有一个或多个参数,多个参数用逗号分隔
各种形式的常量使用“?”表示初值不确定,即未赋初值使用复制操作符DUP表示多个同样数值
复制操作符格式:
重复次数 DUP (重复参数)
复制操作符举例
word 5 dup(10,?)
三、多字节数据的存储顺序
(1)字节编址的主存储器
最小的存储单位:二进制位(比特位bit)
最常用的存储单位:字节(Byte)
8个二进制位是一个字节
一个存储单元保存一个字节量数据一个存储单元对应一个存储器地址
(2)数据的存储顺序
变量保存于字节编址的主存储器中每个存储单元保存一个8位、字节量数据多个字节数据顺序逐个存放在主存相邻单元
(3)小端存储和大端存储
小端方式(Little Endian)
高字节数据保存在高地址存储单元低字节数据保存在低地址存储单元 大端方式(Big Endian)
高字节数据保存在低地址存储单元低字节数据保存在高地址存储单元
四、变量的定位
(1)变量(代码)的存储位置
变量定义的数据按照定义的先后顺序一个接着一个分配存储空间指令代码也由汇编程序按照语句的书写顺序逐个单元安排存储空间
(2)定位伪指令
定位伪指令可以控制存放的存储器地址
ORG伪指令控制存放的偏移地址
org 参数 ;从“参数”指定的位置存放
ALIGN伪指令控制数据对齐地址边界
align N ;按对齐N字节地址边界的位置存放
(3)多字节数据对齐地址边界获得更高的性能
地址A对齐N字节边界A mod N=0(能够被N整除的地址)
2字节、16位数据是被2整除的地址(偶地址)4字节、32位数据是被4整除的地址(模4地址)8字节、64位数据是被8整除的地址(模8地址)
五、变量属性
(1)变量的地址属性
变量的地址属性指所在存储单元的逻辑地址,含有段基地址和偏移地址
地址操作符
通过地址操作符获得变量的地址属性值
[ ]括起的表达式作为存储器地址指针$ 返回当前偏移地址OFFSET 变量名 返回变量名所在段的偏移地址SEG 变量名 返回段基地址(实地址存储模型) 变量地址属性程序
数据段使用变量名,代表其偏移地址
00000020 5678 wvar word 5678h
=00000016 arr_size = $-array
;计算出当前到ARRAY变量所占存储空间
=0000000B arr_len = arr_size/2
;(除以类型值)计算出变量个数
00000022 9ABCDEF0 dvar dword 9abcdef0h
代码段使用变量名,代表其首个数据(变量值)
00000000 A0 00000000 R
mov al, bvar
;bvar等同于[bvar]
变量名加减常量,指向首个数据的前后单元
00000005 8A 25 00000001 R
mov ah, bvar+1
变量名[n] = 变量名+n,常量n表示n个存储单元 指向首个数据的前后单元
0000000B 66|8B 1D 00000022 R
mov bx, wvar[2]
(2)变量的类型属性
变量的类型属性表示变量定义的数据单位
类型操作符
通过类型操作符获得变量的类型属性值
类型名 PTR 变量名 将变量名按照指定的类型使用mov eax, dword ptr array;以双字类型访问
TYPE 变量名 返回占用字节空间的字量数值mov ebx, type bvar
;获得字节变量类型值
mov ecx, type wvar
;获得字变量类型值
mov edx, type dvar
;获得双字变量类型值
LENGTHOF 变量名 返回整个变量的数据项数mov esi, lengthof array
;获得变量的数据个数(项数)
SIZEOF 变量名 返回整个变量占用的字节数mov edi, sizeof array
;获得变量所占的存储空间个数