伪指令endp告诉汇编程序_那些年,我们⼀起学过的汇编----之
伪指令
弄懂了前⾯⼏篇关于基础的⽂章,下⾯就开始我们真正的汇编之旅了,在这⼀篇中我们着重来强调下汇编语⾔的伪指令。伪指令是汇编语⾔程序设计中的⼀个主要的部分,属于控制命令,在汇编语⾔中的数据定义、存储单元分配、指⽰程序结果等功能。
⾸先,我想很多⼈对伪指令语句与指令语句的区别不是太清楚吧,两者的区别在于:伪指令由汇编程序解释后完成相应的操作,会变厚不产⽣⽬标机器代码,进过汇编后的⽬标程序中,伪指令码已经不复存在。指令语句由汇编程序翻译成机器⽬标代码,⼀定有对应的⽬标代码,并且只能在程序运⾏时才能由CPU完成其操作。
⼀、符号定义伪指令
1】、等值伪指令EQU
伪指令格式:符号名EQU表达式
功能:⽤⼀个符号名代替表达式的值,是符号名与表达式等价。
2】、等号伪指令“=”
伪指令格式:符号名 = 表达式
等号伪指令“=”的功能、含义和表达式的内容等都与等值伪指令EQU基本相同,其主要不同点是:
a、等号伪指令允许重新定义。
b、等号伪指令后的表达式不能是指令助记符或关键字。汇编语言结束指令
⼆、数据定义伪指令
1】、DB伪指令
伪指令格式: 变量名 DB, 表达式1[,表达式2][,表达式3....]
功能:定义字节变量,每个表达式的值占⼀个字节。
字节的值域对于⽆符号整数为0--255, 对于有符号整数位-128--127, 个表达式之间⽤逗号隔开,变量名为各表达式中第⼀项数据在存储单元的符号地址,第⼀项数据后⾯的各项数据的单元地址依次在该符号地址上增⼀,如果某项数据的初值为“?”,则对应字节单元将不赋初值,其内容为不确定值。
2】、DW伪指令
伪指令格式: 变量名 DW, 表达式1[,表达式2][,表达式3....]
功能:定义字变量,每个表达式的值占⼀个字。
字节的值域对于⽆符号整数为0--65535, 对于有符号整数位-32768--32767, 个表达式之间⽤逗号隔开,变量名为各表达式中第⼀项数据在存储单元的符号地址,第⼀项数据后⾯的各项数据的单元地址依次在该符号地址上增⼀,如果某项数据的初值为“?”,则对应字节单元将不赋初值,其内容为不确定值。
3】、DD伪指令
其格式与功能同DB/DW,不同点是它定义的是双字变量。
4】、DQ伪指令
其格式与功能同DB/DW,不同点是它定义的是四字变量。
5】、DT伪指令
其格式与功能同DB/DW,不同点是它定义的是五字变量。
三、LABEL属性定义伪指令
伪指令格式:名称 LABEL类型
功能:为当前的变量或标号定义⼀个新的类型,其功能同PTR运算符
LABEL指令通常与指令语句或数据定义伪指令连⽤,这时名称就为与之连⽤的数据定义伪指令语句或指令语句中的变量或标号定义⼀个新的变量名或标号,以便补充和设置与之连⽤的变量或标号的类型属性,因此,LABEL伪指令的名称同样具有段、偏移量和类型3个属性。
四、SEGMENT/ENDS段定义伪指令
之前我们都知道Intel 8086/8088 CPU是通过4个段寄存器按分段寻址的⽅式来⽅位1MB的存储器的,因此汇编语⾔源程序也是按段来组织的,⼀个程序可以由多个逻辑段组成,分别来存放数据、作堆栈使⽤、存放主程序、存放⼦程序等,⽽构造这些段⽤段定义伪指令SEGMENT/ENDS。
段定义伪指令格式:
段名 SEGMENT [定位类型][组合类型][类别名]
.... ;段的主体部分
段名 ENDS
功能:⽤于把程序分成若⼲个逻辑段,这些逻辑段根据其⽤途的不同分为代码段、数据段、堆栈段和附加段。
1、定位类型
定位类型有5中:PARA、PAGE、DWORD、BYTE、WORD。
2、组合类型组合类型指定段与段之间的连接和定位关系,组合类型有6种:
NONE、PUBLIC、COMMON、STACK、AT、MEMORY
3、类别名
五、ASSUME段寻址伪指令
当CPU要访问存储器中某个存储单元时,要把逻辑地址转换成物理地址,那么要由某个段寄存器提供该存储单元所在逻辑段的段基值,因此,要指定逻辑段与CPU中各段寄存器之间的关系,⽽段寻址伪
指令ASSUME就是⽤来指⽰汇编程序对应关系的。
段寻址伪指令格式:ASSUME段寄存器名:段名, 段寄存器名:段名, ....
其中段寄存器为CS, DS, SS, ES中的⼀个,段名是由SEGMENT/ENDS定义的段名。
六、PROC/ENDP过程定义伪指令
如果你懂⼀门最基本的语⾔,⽐如C语⾔的话,那这个伪指令应该会很好理解的,它跟⾼级语⾔的模块化程序设计有点像,就是⼀个⼦函数,这样才能使我们的程序实现“⾼聚合,低耦合”。
过程定义伪指令格式:
过程名 PROC [NEAR/FAR]
.....
RET
.....
过程名 ENDP
这⾥的过程名就是在汇编程序中CALL的操作数,每⼀个过程中肯定要有⼀个返回指令RET,它可以在过程的任何位置。⼀个过程也不⼀定只有⼀条返回指令。
七、ORG定位伪指令和$当前位置计数器
当前位置计数器是⼀个功能很强⼤的伪指令,例如:
DATA SEGMENT
STRING DB 'YangZhiSen'
LENG DB $-STRING
DATA ENDS
在上例中,有对$的使⽤,LENG的值就为字符串STRING的长度,
对于ORG定位伪指令的格式:
ORG表达式
功能:将表达式的值赋给当前位置计数器,ORG语句后⾯的指令或数据以表达式给定的值作起始偏移量。
⼋、TITLE标题伪指令
标题伪指令格式:
TITLE标题名
功能:给程序指定⼀个标题,以便在列表⽂件中每⼀页的第1⾏都显⽰这个标题。
九、END程序结束伪指令
程序结束伪指令格式:
END起始地址
功能:标志源程序结束,并指定程序运⾏时的起始地址,即⼀⽅⾯告诉编译程序END伪指令后⾯的任何语句在汇编时都被省去,另⼀⽅⾯⼜告诉汇编程序在程序装⼊内存时根据起始地址的段基值和偏移量分别⾃动装⼊CS和IP中。
⼗、PUBLIC和EXTRN模块连接伪指令
因为这个我暂且未⽤到,所以有待以后再说。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论