第5章定义数据_第1页
第5章定义数据_第2页
第5章定义数据_第3页
第5章定义数据_第4页
第5章定义数据_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第第5 5章章 定义数据定义数据 第第5章章 定义数据定义数据 5.1 定义数据的伪指令定义数据的伪指令 5.2 立即数立即数 5.3 赋值伪指令赋值伪指令 第第5 5章章 定义数据定义数据 5.1 定义数据的伪指令定义数据的伪指令 本节介绍DB、DW、DD、DQ及DT定义数据的伪 指令。它们分别实现定义数据或资料的字节、字、双 字、四字和十字节数据。 定义数据的伪指令一般格式如下所示: 变量名 DN 操作数 第第5 5章章 定义数据定义数据 (1) 变量名即名称,是可选项,以方括号识别。若 程序中使用到该变量名,则变量名不可省略。 (2) DN表示定义数据伪指令的操作码,在使用时有 以下几种

2、取值:DB(字节)、DW(字)、DD(双字)、 DQ(四字)、DT(十字节)。 (3) 操作数项表示要定义的数据,可以有下列几种 情况: 常数 常数可以有一个或多个,当为多个常数时, 之间用逗号隔开。如: FLD1 DB 25H FLD2 DB 11,12,13,14,15 第第5 5章章 定义数据定义数据 汇编程序将这些常数按顺序定义在相邻的字节变量 中,当使用FLD2时,相当于取第1个常数11,而使用 到FLD2+1时,即取第2个常数12。若有 MOV AL,FLD2+3 则AL中的值为0E(14)。 汇编语言中,常以一个问号“?”来预留一个字节 的空间。如: FLD3 DB ? FLD4

3、 DB ?,? 操作数同时也允许重复多个常数,其一般格式如下: 第第5 5章章 定义数据定义数据 变量名 DN 重复次数 DUP(操作数) 例如: DW 10 DUP(?) ;预留10个字单元 DB 5 DUP(14) ;定义5个含十六进制 0E的字节 DB 3 DUP(4DUP(8) ;定义12个含十六进制8的字节 第第5 5章章 定义数据定义数据 字符串 字符串是用来描述如人名或标题的特殊 “数据”。字符串是以单引号( )或双引号(“ ”)扩起来 作为定界符。例如,PC或“PC”。汇编程序将这些 字符串以ASCII码的格式存入目的程序。 只有DB伪指令才能定义超过两个字节的字符串, 并且以

4、由低地址到高地址的顺序来存储字符串。请记 住,DB是定义字符串的唯一明智选择。例5.1提供了一 些例子。 第第5 5章章 定义数据定义数据 例5.1 字符串与数值的定义。 源程序清单如下: ; Page 60,132 TITLE EXDEF (EXE)Define assembler pseudoops DATASG SEGMENT PARA DATA ;定义字节数据DB FLD1DB DB ? FLD2DB DB Personal Computer FLD3DB DB 32 第第5 5章章 定义数据定义数据 FLD4DB DB 20H FLD5DB DB 01011001B FLD6DB D

5、B 01, JAN,02, FEB,03, MAR FLD7DB DB 32654 FLD8DB DB 10 DUP(0) ; ten zeros ; 定义字数据DW FLD1DW DW 0FFF0H FLD2DW DW 01011001B FLD3DW DW FLD7DB ; address constant FLD4DW DW 3,4,7,8,9 ; five constants FLD5DW DW 5 DUP(0) ; five zeros 第第5 5章章 定义数据定义数据 ; 定义双字数据DD FLD1DD DD ? FLD2DD DD PC FLD3DD DD 32572 FLD4D

6、D DD FLD3DBFLD2DB; diff betw address FLD5DD DD 14,49 ; 定义四字数据DQ FLD1DQ DQ ? FLD2DQ DQ 04D47H FLD3DQ DQ 32572 第第5 5章章 定义数据定义数据 ; 定义十字节数据DT FLD1DT DT ? FLD2DT DT PC DATASG ENDS 第第5 5章章 定义数据定义数据 例5.1的字符串与数值的定义结果如下(见图5-1): 1Page 60,132 2TITLE EXDEF (EXE)Define assembler pseudoops 3 0000 DATASG SEGMENT P

7、ARA DATA 4; 定义字节数据DB 5 0000 ?FLD1DB DB ? 6 000150 65 72 73 6F 6E61 FLD2DB DB Personal Computer 第第5 5章章 定义数据定义数据 7 6C20 43 6F 6D70 75 8 74 65 72 9 0012 20FLD3DB DB 32 10 0013 20FLD4DB DB 20H 11 0014 59FLD5DB DB 01011001B 12 0015 014A414E024645 FLD6DB DB 01, JAN,02, FEB,03, MAR 13 42 03 4D4152 1 4 0 0

8、 2 1 3 3 3 2 3 63 53 4 FLD7DB DB 32654 15 0026 000AFLD8DB DB 10 DUP(0) ; ten zeros 第第5 5章章 定义数据定义数据 16 00 17 18 19; 定义字数据 DW 20 0030 FFF0FLD1DW DW 0FFF0H 21 0032 0059FLD2DW DW 01011001B 22 0034 0021 RFLD3DW DW FLD7DB ;address constant 23 0036 0003 0004 0007 0008 FLD4DW DW 3,4,7,8,9 ;five constants 第

9、第5 5章章 定义数据定义数据 24 0009 25 0040 0005 FLD5DW DW 5 DUP(0) ;five zeros 26 0000 27 28 ; 定义双字数据 DD 29 004A ?FLD1DD DD ? 30 004E 43500000FLD2DD DD PC 31 0052 3C7F0000FLD3DD DD 32572 32 0056 11000000FLD4DD DD FLD3DB FLD2DB 第第5 5章章 定义数据定义数据 33 005A 0E000 FLD5DD DD 14,49 34; 定义四字数据 DQ 35 0062 ?FLD1DQ DQ ? 36

10、 006A 474D0 FLD2DQ DQ 04D47H 37 0072 3C7F0 FLD3DQ DQ 32572 38 ; 定义十字节数据DT 第第5 5章章 定义数据定义数据 39 007A ? FLD1DT DT ? 40 ? 41 0084 435000000FLD2DT DT PC 42 008EDATASG ENDS 43END 图5-1 例5.1字符串与数值的定义结果 第第5 5章章 定义数据定义数据 5.1.1 数值型常数 数值型常数可以用来表示算术数值和存储器的偏移 地址,有二进制、八进制、十进制和十六进制等几种 不同的表示形式。这些汇编语言中采用不同的后缀说 明加以区分:

11、 B:表示二进制。如:10110110B。 Q(或O):表示八进制。如:263Q。 D:表示十进制。如:58D 或58。 H:表示十六进制。如:43H,0FEH。 第第5 5章章 定义数据定义数据 机器内使用二进制数,但二进制数书写起来比较冗 长,所以在许多情况下还是用八进制或十六进制表示, 这是因为八进制、十六进制与二进制之间的转换十分方 便。汇编程序在汇编时,把任何进制的常数全部转换成 十六进制数。下面是各种不同进制常数的格式。 第第5 5章章 定义数据定义数据 1. 二进制 二进制格式允许使用0,1,其后必须加后缀说明字 母B。使用二进制是为了在编写逻辑运算程序时,使用 逻辑运算指令AN

12、D、OR、 XOR以及TEST时能够方便 地区别位的值。 十进制的12,十六进制的0CH和二进制的1100B, 汇编后均产生相同的值0CH。 2. 八进制 八进制格式允许使用07,其后必须后缀说明字 母Q或O,例如,253Q。 第第5 5章章 定义数据定义数据 3. 十进制 十进制格式允许使用十进制的数字09,其后可以 加后缀说明字母D也可以不加,例如,125或125D。汇 编后十进制的125会变成十六进制的7D。 4. 十六进制 十六进制格式允许使用十六进制的数字09、A F,其后必须加后缀说明字母H。因为汇编程序将所有 以字母起始的访问都视为符号名称,所以,当十六进 制数以AF起始时,前面

13、一定要加数字0,例如: 0FFFH与0E2H。 第第5 5章章 定义数据定义数据 5.1.2 定义字节DB 在定义数据的各种伪指令中,DB是最有用的一种。 一个DB的变量可以含有直到此行结束的任意长度的数 据。例如,例5.1中的FLD2DB与FLD7DB。注意,常 数FLD2DB的值“Personal Computer”在机器码中每个 均以ASCII码表示;十六进制20表示空格符。 第第5 5章章 定义数据定义数据 DB的操作数项可以是一个或多个字节的常数。一 个字节只能表示两个十六进制数,其正数的最大值是 7F。80FF这些“较高”值则表示负数。若以十进制 表示,其范围为 -128127。

14、图5-1中的数值型常数有FLD3DB、FLD4DB、 FLD5DB与FLD8DB。FLD6DB混合了数值与字符串常 数,它适合作一个表(Table)的定义。 当操作数为“?”时,表示预留一个字节的内存空 间以备以后使用,如FLD1DB。 第第5 5章章 定义数据定义数据 5.1.3 定义字DW DW伪指令定义长度为一个字(两个字节)的数据项。 DW的操作数被限制在两个字节以内,且汇编程序是以 反向顺序产生目的码,如“PC”变成“CP”。 DW操作数项可以含有一个或多个常数。两个字节 为4个十六进制数。最大的十六进制正数为7FFF,而从 8000到FFFF则表示负数。若以十进制数表示,其表示 范

15、围为-3276832 767。 第第5 5章章 定义数据定义数据 在图5-1中,FLD1DW与FLD2DW定义了数值常数, 而FLD3DW则定义了一个偏移地址,即FLD7DB的地 址,产生的目的码为0021,右边的R表示可重定位。 FLD4DW定义了一个含有5个常数的表,注意在目的 码中每一个常数均占了一个字(两个字节)。 对于DW,DD,DQ格式,汇编程序把所定义的常数, 全都转换成十六进制的目的码,并以反向顺序存于内 存储器。因此,十进制数32572会转换成十六进制 7F3C,并存储为3C7F。 第第5 5章章 定义数据定义数据 5.1.4 定义双字DD DD伪指令定义双字(四个字节)的数

16、据项。每一项占 4个字节。最大的十六进制正数为7FFFFFFF,而从 80000000到FFFFFFFF则表示负数。若以十进制数表示, 其表示范围为-2 147 483 6482 147 483 647。 第第5 5章章 定义数据定义数据 在图5-1中,FLD3DD定义了一个数值常数。 FLD4DD产生一个已定义的两个地址间的差值,其结 果为FLD2DB的长度(十六进制的11即17个字节)。 FLD5DD定义了两个数值常数。 汇编程序将所有的DD数值常数转换成十六进制数, 并以反向顺序存储目的码。因此,十进制数32572会转 换成00007F3C,并存储为3C7F0000。 第第5 5章章 定

17、义数据定义数据 5.1.5 定义四字DQ DQ伪指令定义长度为4个字(8个字节)的数据项。 数据项中的每个常数最大占8个字节即16个十六进制数。 最大的十六进制正数为7后面接15个F。 图5-1中的FLD2DQ与FLD3DQ定义了数值常数。 汇编程序把所有的DQ数值转换成十六进制,并以反向 顺序存储目的码。 第第5 5章章 定义数据定义数据 5.1.6 定义十字节DT DT伪指令定义长度为十个字节的数据项。注意, 对于不同的汇编程序版本DT会产生不同的常数。 在图5-1列出了两个DT例子,一个为未定初值的数 据项,另一个则为含有两个字符串的字符串常数。 例5.1中的程序只有一个数据段。汇编程序

18、不会产 生任何错误信息,但在链接时会产生一个警告: “Warning: No STACK Segment”(这个错误可以忽略)。 可以借助于DEBUG中的D命令查看所产生的目的码, 方法请参阅第4章4.3节。 第第5 5章章 定义数据定义数据 5.2 立立 即即 数数 另一种定义数据的方法是,直接把操作数写在指 令中,形成立即数。例如: MOV AX,1220H 第第5 5章章 定义数据定义数据 此种情况下,十六进制数1220H就成了机器指令码 的一部分。这条符号指令的机器指令码为B82012,共 占3个字节。其中B8是机器指令的操作码,表示将立即 数1220H移入AX寄存器,紧接着的两个字节

19、是立即数 自己。含有立即数的符号指令一般有两个操作数:第 一个操作数可以是寄存器或内存储器,第二个操作数 应是立即数。 第第5 5章章 定义数据定义数据 机器指令码格式中,立即数是紧跟在指令操作码 后面的。所以,它操作的效率比使用数据段,把数据 定义在数据段,从数据段中取数据效率要高。例如: 数据段:AMT1 DW 1220H 指令段:MOV AX,AMT1 第第5 5章章 定义数据定义数据 5.2.1 立即数的长度 立即数的范围被限制在一个字节(00H0FFH)或 一个字(0000H0FFFFH)。同时立即数的长度又受制 于第一个操作数的长度。例如: MOV AL,1220H (不正确,AL

20、一个字节, 1220H两个字节) 第第5 5章章 定义数据定义数据 1220H是两个字节的长度,而AL只是一个字节的长 度。然而立即数可以比第一个操作数短。如: ADD AX,25H (正确,AX两个字节,25H一个字节) 汇编程序会将立即数展开成两个字节0025H,并以 逆序2500H的格式形成目的码操作数。 第第5 5章章 定义数据定义数据 5.2.2 立即数的格式 立即数可以是十六进制(如1220H)、十进制(如255) 或者是二进制(如11111111B)。汇编后同样都会被翻译 成为十六进制的FF。 第第5 5章章 定义数据定义数据 5.2.3 可以使用立即数的指令 下列指令均可以使用

21、立即数: (1) 传送指令:MOV; (2) 算术运算与比较指令:ADD,ADC,SUB, SBB,CMP; (3) 循环移位与移位指令:RCL,RCR,ROL, ROR,SHL,SAR,SHR; (4) 逻辑运算指令:AND,OR,TEST,XOR。 这些指令在以后的章节中会逐步使用。图5-2列出 了这些指令正确使用立即数的范例。 第第5 5章章 定义数据定义数据 ; ; 0000DATASG SEGMENT PARA Data 0000 ? FLD11 DB ? 0001 ? FLD2 DW ? 0003 DATASG ENDS ; 第第5 5章章 定义数据定义数据 0000CODESG

22、SEGMENT PARA CODE 0000BEGIN PROC FAR ASSUME CS:CODESG,DS:DATASG 0000 1E PUSH DS 0001 2B C0 SUB AX,AX 0003 50 PUSH AX 0004 B8 - R MOV AX,DATASG 0007 8E D8 MOV DS,AX 第第5 5章章 定义数据定义数据 ; 0009 B8 0123MOV AX,0123H 000C 05 0025ADD AX,0025H 000F BB 0101MOV BX,257 ; 0012 14 05 ADC AL,5 0014 80 C7 0D ADD BH,13 0017 80 DB 05 SBB BL,5

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论