欢迎来到天天文库
浏览记录
ID:19305242
大小:34.00 KB
页数:7页
时间:2018-09-30
《伪指令用来对汇编程序进行控制》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、伪指令用来对汇编程序进行控制,对程序中的数据实现条件转移、列表、存储空间分配等处理,其格式和汇编指令一样,但一般不产生目的代码,即不直接命令CPU去执行什么操作。伪指令是汇编语言的特色之一,具有两个基本特征: 1、伪指令是一条指令。它在程序中不是可有可无的,使用时受到严格的规范,与标准指令一样,在程序中占有固定的位置,有固定的书写格式。每条伪指令都与标准指令一样可实现特定的功能,伪指令是不能用标准指令替代的。 2、伪指令不是一条真正的指令,没有指令代码。在程序编译过程中,伪指令的功能会被实现,但伪指令会被删除,在编译后的目标文件中(
2、目标文件一般是代码文件),不会有伪指令的编码。 也可以这样理解:指令是对计算机发出的命令,而伪指令则是对编译器发出的命令。在编译程序结束时,伪指令的使命就完成了。 伪指令是相对标准指令而言的,高级语言不存在伪指令,因为高级语言不存在指令,很难说明高级语言中哪一条语句是什么指令。 伪指令是为程序开发工程师提供辅助的程序表达,让编译器实现一些标准指令所不能表达的内容。 伪指令的作用: 1、程序定位的作用。把各程序段之间的相互关系和在存储器的位置告诉编译器。 2、为非指令代码进行定义。包括逻辑变量、字符和存储区等。
3、 3、为程序完整性做标注。程序段的开始和结束。 4、有条件地引用程序段。比如条件循环、条件选择以及宏等。 在ARM处理器中,伪指令的应用和51系列的单片机很相似,它们除了把正常的程序用指令表达给计算机以外,还需要把程序设计者的意图表达给编译器。无论是51系列单片机还是ARM处理器,都需要定义数据以便编译器能够正确识别代码和数据,都可以引用宏,都可以为符号或变量赋值等。一、定义数据伪指令该类伪指令用来定义存储空间及其所存数据的长度。·DB:定义字节,即每个数据是1个字节。·DW:定义字,即每个数据占1个字(2个字节)。·DD:定
4、义双字,即每个数据占2个字。低字部分在低地址,高字部分在高地址。·DQ:定义4字长,即每个数据占4个字。·DT:定义10个字节长,用于压缩式十进制数,例如:DATA1DB5,6,8,100DATA2DW7,287TABLEDB?;表示在TABLE单元中存放的内容是随机的当一个定义的存储区内的每个单元要放置同样的数据时,可用DUP操作符。一般格式:COUNTDUP(?),COUNT为重复的次数,“( )”中为要重复的数据。如:BUFFERDB100DUP(0);表示以BUFFER为首地址的100个字节中存放00H数据BUFFER1DB100DUP
5、(3,5,2DUP(10),35),24,‘NUM')想一想存储区的情况?二、符号定义伪指令EQU、=、及PURGE·EQU伪指令给符号定义一个值。在程序中,凡是出现该符号的地方,汇编时均用其值代替,如:TIMESEQU50DATADBTIMESDUP(?)上述两个语句实际等效于如下一条语句:DATADB50DUP(?)·“=”伪指令可给初始变量赋值。如:COUNT=100;COUNT=100TIME=50;TIME=50·PURGE伪指令用于释放由EQU伪指令定义的变量,使这些变量可以被重新定义。PURGETIMES;释放TIMES变量TIM
6、ESEQU2;重新定义三、段定义伪指令SEGMENT和ENDS一般来说,一个完整的汇编源程序由3个段组成,即堆栈段、数据段和代码段。段定义伪指令可将源程序划分成若干段,以便生成目的代码和连接时将各同名段进行组合。段定义伪指令一般格式为:段名SEGMENT[定位类型][组合类型][类别]段名ENDSSEGMENT和END5应成对使用,缺—不可。其中段名是不可省略的。其它是可选项,是赋予段名的属性,可以省略。例如:DATASEGMENTDW20DUP(?)DATAENDS四、设定段寄存器伪指令ASSUME一般格式:ASSUME段寄存器:段名[,段寄
7、存器:段名,……]功能:通知汇编程序,哪一个段寄存器是该段的段寄存器,以便对使用变量或标号的指令汇编出正确的目的代码。在段名中,CODE表示代码段,DATA表示数据段,STACK表示堆栈段。由于ASSUME伪指令只指明某一个段地址应存于哪一个段寄存器中,并没有包含将段地址送入该寄存器的操作。因此要将真实段地址装入段寄存器还需用汇编指令来实现。这一步是不可缺少的。例如,CODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKMOVAX,DATA;DATA段值送AXMOVDS,AX;AX内容送DS,DS才有实际段值CODE
8、ENDS当程序运行时,由于DOS的装入程序负责把CS初始化成正确的代码段地址,SS初始化为正确的堆栈段地址,因此用户在程序中就不必设置。但是,在装入程
此文档下载收益归作者所有