版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第5章定义数据5.1定义数据的伪指令5.2立即数5.3赋值伪指令5.1定义数据的伪指令本节介绍DB、DW、DD、DQ及DT定义数据的伪指令。它们分别实现定义数据或资料的字节、字、双字、四字和十字节数据。定义数据的伪指令一般格式如下所示:[变量名]DN操作数(1)变量名即名称,是可选项,以方括号识别。若程序中使用到该变量名,则变量名不可省略。(2)DN表示定义数据伪指令的操作码,在使用时有以下几种取值:DB(字节)、DW(字)、DD(双字)、DQ(四字)、DT(十字节)。(3)操作数项表示要定义的数据,可以有下列几种情况:常数常数可以有一个或多个,当为多个常数时,之间用逗号隔开。如:
FLD1DB25HFLD2DB11,12,13,14,15汇编程序将这些常数按顺序定义在相邻的字节变量中,当使用FLD2时,相当于取第1个常数11,而使用到FLD2+1时,即取第2个常数12。若有
MOVAL,FLD2+3
则AL中的值为0E(14)。
汇编语言中,常以一个问号“?”来预留一个字节的空间。如:
FLD3DB?FLD4DB?,?
操作数同时也允许重复多个常数,其一般格式如下:[变量名]DN重复次数DUP(操作数)例如:DW10DUP(?) ;预留10个字单元
DB5DUP(14) ;定义5个含十六进制0E的字节
DB3DUP(4DUP(8)) ;定义12个含十六进制8的字节字符串字符串是用来描述如人名或标题的特殊“数据”。字符串是以单引号(‘’)或双引号(“”)扩起来作为定界符。例如,‘PC’或“PC”。汇编程序将这些字符串以ASCII码的格式存入目的程序。只有DB伪指令才能定义超过两个字节的字符串,并且以由低地址到高地址的顺序来存储字符串。请记住,DB是定义字符串的唯一明智选择。例5.1提供了一些例子。例5.1字符串与数值的定义。源程序清单如下: ;filename:L51.ASMPage60,132TITLEEXDEF(EXE)Defineassemblerpseudo-opsDATASGSEGMENTPARA‘DATA’;——————定义字节数据——————DBFLD1DBDB?FLD2DBDB‘PersonalComputer’FLD3DBDB32FLD4DBDB20HFLD5DBDB01011001BFLD6DBDB01,‘JAN’,02,‘FEB’,03,‘MAR’FLD7DBDB‘32654’FLD8DBDB10DUP(0) ;tenzeros;——————定义字数据——————DWFLD1DWDW0FFF0HFLD2DWDW01011001BFLD3DWDWFLD7DB ;addressconstantFLD4DWDW3,4,7,8,9 ;fiveconstantsFLD5DWDW5DUP(0) ;fivezeros;——————定义双字数据——————DDFLD1DDDD?FLD2DDDD‘PC’FLD3DDDD32572FLD4DDDDFLD3DB-FLD2DB ;diffbetwaddressFLD5DDDD14,49;——————定义四字数据——————DQFLD1DQDQ?FLD2DQDQ04D47HFLD3DQDQ32572;——————定义十字节数据——————DTFLD1DTDT?FLD2DTDT‘PC’DATASGENDS例5.1的字符串与数值的定义结果如下(见图5-1):—————————————————————————————————————————————1Page60,1322TITLEEXDEF(EXE)Defineassemblerpseudo-ops30000DATASGSEGMENTPARA‘DATA’4;
——————定义字节数据――DB50000 ?? FLD1DBDB?60001 50 65 72 73 6F 6E 61 FLD2DBDB‘PersonalComputer’76C 20 43 6F 6D 70 75 874 65 72 90012 20 FLD3DBDB32100013 20 FLD4DBDB20H110014 59 FLD5DBDB01011001B120015 01 4A 41 4E 02 46 45 FLD6DBDB01,‘JAN’,02,‘FEB’,03,‘MAR’13 42 03 4D 41 52 140021 33 32 36 35 34 FLD7DBDB‘32654’150026 000A[ FLD8DBDB10DUP(0);tenzeros16 00 17 ] 18 19 ;——————定义字数据——————DW200030 FFF0 FLD1DWDW0FFF0H210032 0059 FLD2DWDW01011001B220034 0021R FLD3DWDWFLD7DB
;addressconstant230036 0003000400070008 FLD4DWDW3,4,7,8,9;fiveconstants24 0009 250040 0005[ FLD5DWDW5DUP(0);fivezeros26 0000
27 ] 28 ;——————定义双字数据——————DD29004A ???????? FLD1DDDD?30004E 43500000 FLD2DDDD'PC'310052 3C7F0000 FLD3DDDD32572320056 11000000 FLD4DDDDFLD3DB-FLD2DB33005A 0E00000031000000 FLD5DDDD14,4934 ;——————定义四字数据——————DQ350062 ???????????????? FLD1DQDQ?36006A 474D000000000000 FLD2DQDQ04D47H370072 3C7F000000000000 FLD3DQDQ3257238 ;——————定义十字节数据——————DT39007A ??????????????????? FLD1DTDT?40 ? 410084 43500000000000000000FLD2DTDT‘PC’42008E DATASGENDS
43 END图5-1例5.1字符串与数值的定义结果5.1.1数值型常数
数值型常数可以用来表示算术数值和存储器的偏移地址,有二进制、八进制、十进制和十六进制等几种不同的表示形式。这些汇编语言中采用不同的后缀说明加以区分:
B:表示二进制。如:10110110B。
Q(或O):表示八进制。如:263Q。D:表示十进制。如:58D或58。
H:表示十六进制。如:43H,0FEH。机器内使用二进制数,但二进制数书写起来比较冗长,所以在许多情况下还是用八进制或十六进制表示,这是因为八进制、十六进制与二进制之间的转换十分方便。汇编程序在汇编时,把任何进制的常数全部转换成十六进制数。下面是各种不同进制常数的格式。1.二进制二进制格式允许使用0,1,其后必须加后缀说明字母B。使用二进制是为了在编写逻辑运算程序时,使用逻辑运算指令AND、OR、XOR以及TEST时能够方便地区别位的值。十进制的12,十六进制的0CH和二进制的1100B,汇编后均产生相同的值0CH。2.八进制八进制格式允许使用0~7,其后必须后缀说明字母Q或O,例如,253Q。3.十进制
十进制格式允许使用十进制的数字0~9,其后可以加后缀说明字母D也可以不加,例如,125或125D。汇编后十进制的125会变成十六进制的7D。4.十六进制
十六进制格式允许使用十六进制的数字0~9、A~F,其后必须加后缀说明字母H。因为汇编程序将所有以字母起始的访问都视为符号名称,所以,当十六进制数以A~F起始时,前面一定要加数字0,例如:0FFFH与0E2H。5.1.2定义字节DB
在定义数据的各种伪指令中,DB是最有用的一种。一个DB的变量可以含有直到此行结束的任意长度的数据。例如,例5.1中的FLD2DB与FLD7DB。注意,常数FLD2DB的值“PersonalComputer”在机器码中每个均以ASCII码表示;十六进制20表示空格符。
DB的操作数项可以是一个或多个字节的常数。一个字节只能表示两个十六进制数,其正数的最大值是7F。80~FF这些“较高”值则表示负数。若以十进制表示,其范围为-128~+127。图5-1中的数值型常数有FLD3DB、FLD4DB、FLD5DB与FLD8DB。FLD6DB混合了数值与字符串常数,它适合作一个表(Table)的定义。当操作数为“?”时,表示预留一个字节的内存空间以备以后使用,如FLD1DB。5.1.3定义字DWDW伪指令定义长度为一个字(两个字节)的数据项。DW的操作数被限制在两个字节以内,且汇编程序是以反向顺序产生目的码,如“PC”变成“CP”。DW操作数项可以含有一个或多个常数。两个字节为4个十六进制数。最大的十六进制正数为7FFF,而从8000到FFFF则表示负数。若以十进制数表示,其表示范围为-32 768~+32767。在图5-1中,FLD1DW与FLD2DW定义了数值常数,而FLD3DW则定义了一个偏移地址,即FLD7DB的地址,产生的目的码为0021,右边的R表示可重定位。
FLD4DW定义了一个含有5个常数的表,注意在目的码中每一个常数均占了一个字(两个字节)。对于DW,DD,DQ格式,汇编程序把所定义的常数,全都转换成十六进制的目的码,并以反向顺序存于内存储器。因此,十进制数32 572会转换成十六进制7F3C,并存储为3C7F。5.1.4定义双字DD
DD伪指令定义双字(四个字节)的数据项。每一项占4个字节。最大的十六进制正数为7FFFFFFF,而从80000000到FFFFFFFF则表示负数。若以十进制数表示,其表示范围为-2147483648~+2147483647。在图5-1中,FLD3DD定义了一个数值常数。FLD4DD产生一个已定义的两个地址间的差值,其结果为FLD2DB的长度(十六进制的11即17个字节)。FLD5DD定义了两个数值常数。汇编程序将所有的DD数值常数转换成十六进制数,并以反向顺序存储目的码。因此,十进制数32572会转换成00007F3C,并存储为3C7F0000。5.1.5定义四字DQDQ伪指令定义长度为4个字(8个字节)的数据项。数据项中的每个常数最大占8个字节即16个十六进制数。最大的十六进制正数为7后面接15个F。
图5-1中的FLD2DQ与FLD3DQ定义了数值常数。汇编程序把所有的DQ数值转换成十六进制,并以反向顺序存储目的码。5.1.6定义十字节DTDT伪指令定义长度为十个字节的数据项。注意,对于不同的汇编程序版本DT会产生不同的常数。在图5-1列出了两个DT例子,一个为未定初值的数据项,另一个则为含有两个字符串的字符串常数。例5.1中的程序只有一个数据段。汇编程序不会产生任何错误信息,但在链接时会产生一个警告:“Warning:NoSTACKSegment”(这个错误可以忽略)。可以借助于DEBUG中的D命令查看所产生的目的码,方法请参阅第4章4.3节。
5.2立
即
数另一种定义数据的方法是,直接把操作数写在指令中,形成立即数。例如:
MOVAX,1220H此种情况下,十六进制数1220H就成了机器指令码的一部分。这条符号指令的机器指令码为B82012,共占3个字节。其中B8是机器指令的操作码,表示将立即数1220H移入AX寄存器,紧接着的两个字节是立即数自己。含有立即数的符号指令一般有两个操作数:第一个操作数可以是寄存器或内存储器,第二个操作数应是立即数。机器指令码格式中,立即数是紧跟在指令操作码后面的。所以,它操作的效率比使用数据段,把数据定义在数据段,从数据段中取数据效率要高。例如:数据段:AMT1DW1220H
指令段:MOVAX,AMT15.2.1立即数的长度立即数的范围被限制在一个字节(00H~0FFH)或一个字(0000H~0FFFFH)。同时立即数的长度又受制于第一个操作数的长度。例如:
MOVAL,1220H(不正确,AL一个字节,1220H两个字节)1220H是两个字节的长度,而AL只是一个字节的长度。然而立即数可以比第一个操作数短。如:
ADDAX,25H
(正确,AX两个字节,25H一个字节)汇编程序会将立即数展开成两个字节0025H,并以逆序2500H的格式形成目的码操作数。5.2.2立即数的格式立即数可以是十六进制(如1220H)、十进制(如255)或者是二进制(如11111111B)。汇编后同样都会被翻译成为十六进制的FF。5.2.3可以使用立即数的指令下列指令均可以使用立即数:(1)传送指令:MOV;(2)算术运算与比较指令:ADD,ADC,SUB,SBB,CMP;(3)循环移位与移位指令:RCL,RCR,ROL,ROR,SHL,SAR,SHR;(4)逻辑运算指令:AND,OR,TEST,XOR。
这些指令在以后的章节中会逐步使用。图5-2列出了这些指令正确使用立即数的范例。;filename:L52.LST ;
0000 DATASGSEGMENTPARA‘Data’0000?? FLD11DB?0001???? FLD2DW?0003 DATASGENDS ;—————————————————————0000 CODESGSEGMENTPARA‘CODE’0000 BEGINPROCFAR ASSUMECS:CODESG,DS:DATASG00001EPUSHDS00012BC0 SUBAX,AX000350 PUSHAX0004B8
R MOVAX,DATASG00078ED8 MOVDS,AX ;—————————————————————0009B80123 MOVAX,0123H000C050025 ADDAX,0025H000FBB0101 MOVBX,257 ;—————————————————————00121405
ADCAL,5001480C70D ADDBH,13001780DB05 SBBBL,5001A802E0000R05 SUBFLD11,5001F3C12 CMPAL,18 ;—————————————————————0021D0D3 RCLBL,10023D0DC RCRAH,10025D1060001R ROLFLD2,10029D0C8 RORAL,1002BD1E1 SALCX,1002DD1FB SARBX,1002FD02E0000R SHRFLD11,1 ;—————————————————
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 河南省安阳市部分校2026-2027学年高一上学期9月阶段检测物理试卷
- 2025-2026年四川省人教版高中物理必修第一册力学基础习题
- 2025-2026年人体生理学专项训练题库
- 2025年四川省人教版小学三年级语文上册第3单元课后练习题
- 2025-2026年福建省湘教版高一英语下册第11单元知识点巩固习题
- 2025-2026年电商营销策划与执行实战习题集
- 2026年江苏省公务员招考行政职业能力数量统筹问题专项模拟试卷及答案
- 山东航空乘山航产品知识模拟试卷及答案
- 2026年血糖测定方法原理测试试卷及答案
- 山东航空乘客舱电源故障应急处置模拟试卷及答案
- GB/T 25085.6-2026道路车辆汽车电缆第6部分:交流600 V或直流900 V和交流1 000 V或直流1 500 V单芯铝导体电缆的尺寸和要求
- 新东方绩效考核制度
- 从定位到关联:经纬网图判读的思维进阶与中考应用-初中地理二轮复习大单元教学设计
- 试验室人员培训管理制度
- 气管切开吸痰技术
- 月亮姑娘做衣裳
- 政务接待培训课件
- 部队消防课件
- 《家庭系统疗法》课件
- 非国家工作人员受贿罪司法解释及指导案例汇编
- DZ/T 0440-2023 古脊椎动物化石发掘与修复装架技术规程(正式版)
评论
0/150
提交评论