第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。第5章汇编语言程序设计
本资源仅提供20页预览,下载后可查看全文
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。
用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。
相关推荐
第5章微机与外设的数据传输
PU的监控下实现的。 对于 CPU而言,数据传送就是输入输出操作,控制接口的传送操作有三种方式: 程序方式 无条件传送方式 条件传送方式(查询方式传送) 中断方式 DMA方式( DMA控制 I/O方式) 微型计算机技术 程序方式 程序方式传送是指在程序控制下进行信息传送,又可分为无条件传送和条件传送方式。 无条件传送方式 • 若程序员能够确信一个外设已经准备就绪
第5章流动阻力与水头损失
m a x20urJAQv 167。 圆管中的层流运动 三、沿程水头损失 208 rJv由 和 lhJ f 得 : vr lh f 208gvdl2Re64 2)( f 2,Re 0drvd 167。 圆管中的层流运动 与 hf的通用公式比较,可得圆管层流时沿程阻力系数: ( R e )Re64 f四、动能、动量修正系数
第5章图像编码与压缩
)3,码长 Lx=log2p(x)= = 5 • 所以 , 二进序列的算术编码为 01001。 69 2 10 8 0. 39 42 0. 01 10 01 )31 25 62 5e 二进十进 十进( ) ( ) ( 2算术编码算法的计算步骤实例 step x s l 1 0 0 2/5 2 1 0 +( 2/5) ( 2/5) = 4/25 ( 2/5) ( 3/5) =
第5章国际资产组合投资
基金等 •狭义:代表小投资者管理他们的资产,在可接受的风险范围内,利用这些资产进行投资获取最大收益,如:养老基金、保险公司、共同基金。 10 国际金融市场上的机构投资者 •机构投资者是国际金融市场上最重要的投资主体 –随着各国金融市场的开放和金融市场一体化程度的加深,机构投资者越来越倾向于国际化投资,在全球范围内配置收益和风险