分享

汇编(二十)

 cici0086 2014-11-23

分类:

量定义伪指令为变量申请固定查长度的存储空间,并可以同时将相应的存储单元初始化。
一、变量定义伪指令,格式如下:
变量名  伪指令   初值表
变量名为用户自定义标识符,表示初值表首元素的逻辑地址,即用这个符号表示地址,常称为符号地址。
初值表是用逗号分隔的参数,主要由数值常数、表达式或?、DUP组成,?代表初值不确定,即未付初值,重复初值可以用DUP进行定义。DUP格式:
重复次数  DUP   (重复参数)
变量定义伪指令有DB/DW/DD/DF/DQ/DT
(1)、DB——定义字节单元伪指令,用于分配一个或多个字节单元,每个数据一定是字节量(Byte),可以是0~255的无符号数或-128~+127的带符号数,也可以是字符串常数。
(2)、DW——定义字单元伪指令,用于分配一个或多个字单元,每个数据一定是字量(Word),一个字单元可用于存放任何16位数据,如一个段地址,一个偏移地址、两个字符、0~65535之间的无符号数或-32768~+32767之间的带符号数。
(3)、DD——定义双字单元伪指令,用于分配一个或多个双字单元,每个数据是一个32位的双字量(Double Word),可以是有符号数或无符号数的32位整数,也可以用来表达16位段地址(高位字)和16位的偏移地址(低位字)的远指针。
(4)、DF——定义3字伪指令,用于为一个或多个6字节变量分配空间及初始化,6字节常用在32位CPU中表示一个48位远指针(16位段选择器:32位偏移地址)。
(5)、DQ——定义4字伪指令,为一个或多个8字节变量分配空间及初始化
(6)、DT——定义10字节伪指令,为一个或多个10字节变量分配空间及初始化。
从MASM6.0开始,变量定义伪指令DB/DW/DD/DF/DQ/DT被建议是用新的表达形式,依次为:BYTE/WORD/DWORD/FWORD/QWORD/TBYTE,另外还有SBYTE/SWORD/SDWORD用于带符号数的初始化。
二、定位伪指令
用数据定义伪指令分配的数据是按顺序一个接着一个存放在数据段中的。有时我们希望能够控制数据的偏移地址,例如使数据对齐可以加快数据的存取速度,MASM提供如下伪指令:
1、ORG  参数  ;使他后面的数据或指令从参数指定的地址开始
ORG伪指令是将当前偏移地址指针指向参数表达式的偏移地址。如:
ORG  100H   ;从100H处安排数据或程序
ORG  $+10   ;是偏移地址加10,即跳过10个字节空间
汇编语言中$表示当前偏移地址。
2、EVEN   ;使他后面的数据或指令从偶地址开始
EVEN伪指令使当前偏移地址指针指向偶数地址,即若原地址指针已指向偶地址,则不作调整;否则将地址指针加1,是地址指针偶数化。可对齐字量数据。
3、ALIGN n ;使他后面的数据或指令从n的整数倍地址开始
ALIGN伪指令是将当前偏移地址指针指向n(n是2的乘方)的整数倍的地址。
三、变量和标号的属性
标号或名字是由用户自定义的标识符,指向存储单元,分别表示其存储内容的逻辑地址。标号指示硬指令的地址,变量名指示所定义变量的开始地址,段名指示相应短的起始地址,子程序名指示相应子程序的开始地址,所以标号和名字一经定义,就具有以下三种属性:
1、段值:标号和名字对应存储单元所在的段地址。
2、偏移值:标号和名字对应存储单元所在段的段内偏移地址。
3、类型:标号、子程序名的类型可以是NEAR(近)或FAR(远),分别表示段内或段间;变量名的类型可以是BYTE(字节)、WORD(字)和DWORD(双字)等。
因为在汇编语言中,名字和标号的属性非常重要,所以MASM提供了有关的操作符:
1、地址操作符
地址操作符取得名字或标号的段地址和偏移地址两个属性。如中括号[]表示将括起来的表达式作为存储器地址指针;符号$表示当前偏移地址;段前缀的冒号:也是一种地址操作符,表示采用指定段的段地址寄存器。另外还有如下两个:
OFFSET  名字/标号   ;返回名字或标号的偏移地址
SEG     名字/标号   ;返回名字或标号的段地址
2、类型操作符
类型操作符对名字或标号的类型属性进行相关设置。
(1)类型名  PTR   名字/标号   ;使名字或标号具有指定的类型
PTR操作符中的“类型名”可以是BYTE/WORD/DWORD/FWOD/QWORD/TBYTE,或者是NEAR或FAR,还可以是由STRUCT、RECORD、UNION以及TYPEDEF定义的类型。使用PTR可以临时改变名字或标号的属性。
(2)THIS  类型名   ;创建采用当前地址,但为指定类型的操作数
如:b_var   equ  this  byte   ;按字节访问变量b_var,但与变量w_var的地址相同
    w_var   dw   10 dup(0)    ;按字访问变量
MASM中还有一个LABEL伪指令,它的功能与EQU THIS相同
(3)SHORT  标号    ;设定标号为短转移标号
SHORT指定标号作为-128~+127字节范围内的短转移
(4)TYPE 名字/标号   ;返回一个字量数值,表明名字或标号的类型
字节、字和双字返回1、2和4,短转移、近转移(NEAR)和远转移(FAR)返回ff01h、ff02h和ff05h
(5)SIZEOF()和LENGTHOF()同TYPE类似,分别返回整个变量占用的字节数和整个变量的数据项数

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多