第5章汇编语言程序设计内容摘要:

167。 段定义语句 一、段定义伪指令( SEGMENT/ENDS) 定义:用于程序中设置一个段(逻辑段)。 格式: 段名 SEGMENT [ 定位类型 ][ 组合类型 ][‘类别名 ’ ] 本段语句序列(指令序列、伪 指令或数据) 段名 ENDS … 1. 段名 : 2. 定位类型: 定义:表示对段的起始边界的要求。 定位类型选项 :( 4种) ( 1) PAGE(页):表示本段从一个页的边界开始。 段的起始地址一定能被 256整除。 段的起始单元地址(段基址)的最后 8位二进制数为 0( 00H)。 ( 2) PARA(节):表示本段从一个小节的边界开始。 段的起始单元最后 4位二进制数为 0( 0H)。 ( 3) WORD(字):表示本段从一个偶字节地址开始。 段的起始单元最后 2位二进制数为 0 ( 4) BYTE(字节):表示本段起始单元可以从任一地址开始。 由用户自己设定,在程序中当需要引用或调用某逻辑段时,即用段名表示。 3 . 组合类型: 表示段与段之间的连接与定位。 有 6种选择: (教材 P188页) 4 . 类别名: 注: 定义一个逻辑段时,段名是必选项,其他三个参数是任选的,各参数之间用空格分隔。 任选是可只选其中 12个,但是不能改变它们的先后顺序关系。 (1). NONE: (2). PUBLIC (3). COMMON (4). STACK (5). AT (6). MEMORY 例:下面是一个源程序分段结构 DATA1 SEGMENT PARA ‘ DATA’ DATA1 ENDS STACK1 SEGMENT PATA STACK ‘STACK ’ STACK1 ENDS … … 二、段寻址伪指令( ASSUME)  ASSUME伪指令格式:  功能:告诉汇编程序已定义的段与段寄存器之间的对应关系。  ASSUME随时修改或撤除 14个段寄存器与已定义段之间的关系。 ASSUME 段寄存器名:段名,段寄存名:段名, …… 指 4个段寄存器 CS、DS、 SS、 ES中之一 指用 SEGMENT/ENDS伪指令语句中给定的段名。 ASSUME ES: NOTHING ;撤消对 ES的设置 ASSUME NOTHING ;撤消全部段寄存器的设置 例: DATA1 SEGMENT VAR1 DB 12H DATA1 ENDS DATA2 SEGMENT VAR2 DB 34H DATA2 ENDS CODE SEGMENT ASSUME CS: CONE, DS: DATA1, ES: DATA2 START …… MOV AL, VAR1 MOV BL, VAR2 CODE ENDS … … ASSUME定义:段寄存器 CS、 DS和 ES分别存放 CODE段、 DATA1段和 DATA2段的段基值 数据定义语句 DB定义 : 一是 VAR1存放在 DATA1的逻辑段中,其段基值即为 DATA的 段基值 ;二是 VAR1为字节数据。 三是 VAR1的 偏移量 为 0。 MOV取出存储器操作数 VAR2,变量 VAR2在 DATA2段,其段基值在 ES中。 三、段寄存器的加载 1. DS和 ES的加载: ( 1) DS—— 数据段寄存器。 ES—— 附加段寄存器。 ( 2)在程序中,引用段名即以立即数形式获取该段的段基值,而 立即数又不能直接传送给段寄存器 ,所以在借助于通用寄存器传送段基值给 DS、 ES。 例: DATA_DS SEGMENT DA1 DB 12H DATA_DS ENDS DATA_ES SEGMENT DA2 DB 10H DUP(0) DATA_ES ENDS CODE SEGMENT ASSUME CS: CONE, DS: DATA1, ES: DATA2 START: MOV AL, DATA_DS MOV DS, AX MOV AX, DATA_ES MOV ES, AX CODE ENDS … 代码段 CODE中第 3条是以立即数形式把 DATA_DS段和DATA_DS段的段基值分别送给通用寄存器 AX。 第 4条把 AX中的内容(段基值)分别传送给段寄存器DS、 ES。 2. SS的加载: SS是堆栈段寄存器,对它加载段寄存器就是设置堆栈。 两种 SS的加载方法: ( 1)自动加载: 在段定义伪指令( SEMENT)的组合类型中选择 “ STACK”参数,就表明这个段是堆栈段。 ( 2)用执行程序的办法加载: 在程序运行中要调换另一个堆栈段,这时可用类似于 DS和 ES的加载办法,对SS和 SP进行即时修改。 例: STACK2 SEGMENT DW 40H DUP(。 ) TOP LABEL WORD STACK2 ENDS CODE SEGMENT MOV AL, STACK2 MOV SS, AX MOV SP, OFFSET TOP CODE ENDS … … 3. CS的加载: CS和 IP提供当前执行目标代码的段基值和偏移量。 对 CS和 IP设置、修改的两种途径: ( 1)用结束伪指令 END加载程序的起始地址。 ( 2)执行程序转移类指令,实现从一个段转移到另一个段时,它的指令功能就是修改 CS和 IP。 用结束伪指令 END加载程序的起始地址。  格式: 其中: 地址表达式是一个已定义的标号或一个本标号加减一个常数。 是这个程序执行的第一条指令语句的地址。  例: END 地址表达式 CODE SEGMENT ASSUME CS: CONE, … START: MOV AL, DATA CODE ENDS END START … … 结束伪指令 END的作用: 一是源程序到此结束,后面的任何语句均被汇编程序略去;二是将地址表达式所确认的存储单元的段基值和偏移量分别自动装入 CS和 IP中。 167。 过程定义语句  格式:  注意: ( 1)定义过程的开始( PROC)和结束( ENDP)使用同一过程名,且过程名不能省略。 ( 2)过程名即为子程序名,也子程序调用指令( CALL)的目标操作数。 ( 3)过程名也有 3个属性。 其中类型分为 NEAR和 FAR。 具体内容见教材 P192页。 过程名 PROC。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。