欢迎访问文稿网!

数据定义伪指令

范文之家 分享 时间: 加入收藏 我要投稿 点赞

数据定义伪指令

    3.2.2 数据定义伪指令

    数据定义伪指令为一个数据项分配存储单元,用一个符号名与这个存储单元相联系,且为这个数据提供一个任选的初始值。

    格式:[变量名]助记符 操作数,…,操作数[;注释]

    其中变量(V ariable)字段是可有可无的,它用符号地址表示,其作用与指令语句前的标号相同,但它的后面不跟冒号,而且CALL和JMP指令都不能转向此符号地址,如果操作数(Operand)有多个,则汇编程序使其记以第一个字节的偏移地址。注释(Com-ments)字段用来说明该伪指令的功能,它也是可有可无的。助记符(Memonic)字段用来说明所有伪指令的助记符,常用的有以下几种:

    DB伪指令,用来定义字节,其后的每个操作数占用一个字节单元。DW伪指令,用来定义字,其后的每个操作数占有一个字单元(低位字节在第一个字节低地址中,高位字节在第二个字节高地址中)。

    DD伪指令,用来定义双字,其后的每个操作数占有两个字单元。DQ伪指令,用来定义四个字,其后的每个操作数占有四个字单元(低位字在低地址,高位字在高地址)。

    DT伪指令,用来定义十个字节,其后的每个操作数占有十个字节。

    操作数可以是各种形式的数据,也可以不是数据,只表明留多少空存储单元,下面举例说明。

    1.操作数是常数或表达式,可以是数据,也可以是地址

    【例3-19】 DATA_BYTE DB 10,4,10H

    DATA_WORD DW 100,100H,-5

    DATA_DD DD 3*20,0FFFDH

    汇编程序可以在汇编期间,在相应的存储器中存入数据,如图3-1所示。

    img63

    

    图3-1 例3-19的汇编结果

    2.操作数也可以是字符串

    【例3-20】 MESSAG E DB‘A’

    STRING DB‘MAY I HELP YOU?’

    字符串必须用单引号“′′”括起来。其中也可以是多个字符,注意空格也是字符(ASCII码为20H)。引号中的字符都是ASCII码,STRING字符串汇编后的存储情况如图3-2所示。

    img64

    

    图3-2 例3-20的汇编结果存储情况

    【例3-21】

    DATA DB ′AB′

    DATA DW′AB′

    这两种伪指令,AB在存储器中的存储情况是不一样的,如图3-3所示。

    img65

    

    图3-3 例3-21的汇编结果

    注意,当定义和初始化多于两个以上字符的字符串时,只能使用DB伪指令,不能使用DW和DD伪指令,例如下列定义,是错误的:

    STRING DW ‘ABCDEF’应改成:

    STRING DB ‘ABCDEF’

    3.可保留空单元,操作数为“?”

    【例3-22】

    ABC DB 12H,?,?,24H

    DEF DW?,895H,?

    GH I DD 1248H,?,0D764H

    它们的存储情况如图3-4所示。

    img66

    

    图3-4 例3-22的汇编结果

    4.操作数字段用复制操作符DUP

    格式:rep eat_count DUP(op erand,…,op erand)

    其中rep eat_count可以是常数,也可以是表达式,它的值应该是一个正整数,数值范围1~65535(不能超过一段范围),它用来指定括号中的操作数(op erand)的重复次数。

    【例3-23】

    ARRAY 1 DB 2 DUP(0,1,2,?)

    ARRAY 2DB 100DUP(?)

    它们汇编后的存储情况如图3-5所示。由图可知,ARRAY 1的语句可等价于

    ARRAY 1 DB 0,1,2,?,0,1,2,?

    DUP操作数也可嵌套DUP。

    【例3-24】

    ARRAY 3 DB 100 DUP(0,2DUP(1,2),0,3)汇编后存储情况如图3-6所示。

    

    图3-5 例3-23的汇编结果

    img68

    

    图3-6 例3-24的汇编结果

221381
领取福利

微信扫码领取福利

微信扫码分享