欢迎来到天天文库
浏览记录
ID:44870531
大小:204.22 KB
页数:28页
时间:2019-10-31
《8086伪指令(汇编语言程序格式)》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、8086伪指令(汇编语言程序格式)汇编语言程序中的语句可以由指令、伪指令和宏指令组成。上一章我们介绍了8086指令系统中的6类指令,每一条指令都对应一种CPU操作。伪指令又称为伪操作,它是在对源程序汇编期间由汇编程序处理的操作,它们可以完成如处理器选择、定义程序模式、定义数据、分配存储区、指示程序结束等功能。宏指令是由用户按照宏定义格式编写的一段程序,其中语句可以是指令、伪指令,甚至是已定义的宏指令。宏指令将在第七章中介绍。伪指令和指令的区别在于,每一条指令必须生成机器代码,然后在程序运行期间由CPU来执行其操作;而伪指令是在汇编期间由
2、汇编程序执行的操作命令,除了数据定义及存储器分配伪指令分配存储器空间外,其它伪指令不生成目标码。和各种指令一样,伪指令也是程序设计不可缺少的工具。下面介绍一些常用的伪指令。4.2.1段定义伪指令 段定义伪指令是表示一个段开始和结束的命令,80x86有两种段定义的方式:完整段定义和简化段定义,分别使用不同的段定义伪指令来表示各种段。4.2.1.1完整的段定义伪指令完整段定义伪指令的格式如下:段名SEGMENT . . .段名ENDS段名由用户命名。对于数据段、附加段和堆栈段来说,段内一般是存储单元的定义、分配等伪指令语句;对于代码段
3、中则主要是指令及伪指令语句。定义了段还必须说明哪个段是代码段,哪个段是数据段。ASSUME伪指令就是建立段和段寄存器关系的伪指令,其格式为:ASSUME段寄存器名:段名,…段寄存器名必须是CS、DS、ES和SS中的一个,而段名必须是由SEGMENT定义的段名。·定位类型:说明段的起始边界值(物理地址)。 ·组合类型:说明程序连接时的段组合方法。·类别:在单引号中给出连接时组成段组的类型名。连接程序可把相同类别的段的位置靠在一起。例4.1 ;*********************** data_seg1segment
4、 ;定义数据段 . . . data_seg1ends ;*********************** data_seg2segment ;定义附加段 . . . data_seg2ends ;*********************** code_segsegment ;定义代码段 assumecs:code_seg,ds:data_seg1,es:data_s
5、eg2 start: ;程序执行的起始地址 ;setDSregistertocurrentdatasegment mov ax,data_seg1 ;数据段地址 mov ds,ax ;存入DS寄存器 ;setESregistertocurrentextrasegment mov ax,data_seg2 ;附加段地址 mov es,ax ;存入ES寄存器 . . . code_seg
6、ends ;代码段结束 ;************************** end start 由于ASSUME伪指令只是指定某个段分配给哪一个段寄存器,它并不能把段地址装入段寄存器中,所以在代码段中,还必须把段地址装入相应的段寄存器中: MOV AX,DATA_SEG1 ;数据段地址 MOV DS,AX ;存入DS寄存器 MOV AX,DATA_SEG2 ;附加段地址 MOV ES,AX ;存入ES寄存器 如果程序中还定义了堆栈段STACK_SEG,也
7、需要把段地址装入SS中: MOV AX,STACK_SEG ;堆栈段地址 MOV SS,AX ;存入ES寄存器 注意,在程序中不需要用指令装入代码段的段地址,因为在程序初始化时,装入程序已将代码段的段地址装入CS寄存器了。 为了对段定义作进一步地控制,SEGMENT伪指令还可以增加类型及属性的说明,其格式如下: 段名 SEGMENT [定位类型][组合类型]['类别'] . . . 段名 ENDS []中的内容是可选的,一般情况下,这
8、些说明可以不用。但是,如果需要用连接程序把本程序与其他程序模块相连接时,就需要提供类型和属性的说明。表4.2.1·定位类型:说明段的起始边界值(物理地址)。定位类型说明BYTE段可以从任何地址边界开始WOR
此文档下载收益归作者所有