汇编1 (3)综述

上传人:我** 文档编号:114807607 上传时间:2019-11-12 格式:PPT 页数:161 大小:503KB
返回 下载 相关 举报
汇编1 (3)综述_第1页
第1页 / 共161页
汇编1 (3)综述_第2页
第2页 / 共161页
汇编1 (3)综述_第3页
第3页 / 共161页
汇编1 (3)综述_第4页
第4页 / 共161页
汇编1 (3)综述_第5页
第5页 / 共161页
点击查看更多>>
资源描述

《汇编1 (3)综述》由会员分享,可在线阅读,更多相关《汇编1 (3)综述(161页珍藏版)》请在金锄头文库上搜索。

1、第 3 章 80x86 的指令系统,指令与指令系统 指令结构: 指令由操作码和操作数组成,操作码指定进行的操作,操作数指定操作对象。 汇编语言书写格式: 操作码 无操作数指令 操作码操作数 单操作数指令 操作码 操作数1 ,操作数2 两操作数指令, 最为常见, 通常操作数1为目的操作数,操作数2为源操作数,分别简记为 DST和 SRC.,本章内容:,3.1 80x86 的寻址方式 3.2 程序占有的空间和执行时间 3.3 80x86 的指令系统,3.1 80x86 的寻址方式,理解寻址方式,对于学习汇编语言至关重要。所谓寻址方式就是确定操作对象的方式。依据操作对象的不同性质,寻址方式可以分为:

2、 3.1.1 与数据有关的寻址方式 3.1.2 与转移有关的寻址方式,3.1.1 与数据有关的寻址方式,操作对象是数据的指令, 数据可能出现在指令中, 可能保存在寄存器中,还可能保存在存储器中,总之有以下三类不同的寻址方式: 立即寻址 操作数在指令中 寄存器寻址 操作数保存在寄存器中 存储器寻址 操作数保存在存储器中 我们将以两操作数指令 MOV 的源操作数寻址方式为例解释这三类不同的寻址方式.,1 立即寻址,操作数出现在指令中,例如 MOV AX, 256 源操作数 256 直接出现在指令中,这样的源操作数叫做立即数. 注意:立即数不能是目的操作数,只能是源操作数. 此后,讲解具体指令的寻址

3、方式时,我们将以 data 表示立即寻址. 例: MOV AX, 2000H 示例,2. 寄存器寻址,操作数在寄存器中,例如: MOV AX, BX 源操作数保存在寄存器BX中,这种情况叫做寄存器寻址。注意寄存器寻址中所说的寄存器是指8个通用寄存器。虽然某些指令允许使用段寄存器,但那不算是寄存器寻址。此后讲解具体指令时,我们会特别说明。 我们以 reg, segreg 分别表示寄存器寻址和段寄存器寻址。 例: MOV SI, CX 示例,3. 存储器寻址,这类情形最为复杂, 我们需要讨论以下三个问题: 缺省的段寄存器 段超越问题 不同的存储器寻址方式 我们以 mem 表示存储器寻址,缺省的段寄

4、存器,8086采用段,偏移的地址转换方式,即 物理地址=段始址+段内偏移 其中,段始址20位,高16位保存在某个段寄存器中,低4位为0,通常在指令中出现的地址为偏移地址,而段始址可以通过缺省的段寄存器内容(*16)求得。缺省得段寄存器究竟是哪一个,取决于指令,寻址方式及涉及的寄存器。,段超越问题,如前述,缺省的段寄存器取决于指令,寻址方式和涉及的寄存器,但有时使用缺省的段寄存器并不合适。多数情况下,允许程序自行选择段寄存器,当然需要显式指定,这种情况叫做段超越。段超越的格式为 段寄存器: 位于需要段超越的指令之前,因此也叫段超越前缀。,不同的存储器寻址方式,又可以分为三种: 不涉及寄存器:直接

5、寻址 涉及一个寄存器:寄存器间接寻址和寄存器相对寻址 涉及两个寄存器:基址变址寻址和相对基址变址寻址 可以参加存储器寻址的寄存器有4个,分别是 BX 和 BP, 称为基址寄存器 SI 和 DI, 称为变址寄存器,存储器寻址中有效地址的组成,位移量:是存放在指令中的一个8位、16位或32位的数,但它不是立即数,而是一个地址。 基址:是存放在基址寄存器中的内容。它是有效地址的基址部分,通常用来指向数组或字符串的首地址。 变址:是存放在变址寄存器中的内容。它通常用来访问数组中的某个元素或字符串中的某个字符。 比例因子:其值可为1,2,4或8。在寻址中,可用变址寄存器的内容乘以比例因子来取得变址值。(

6、386以后才有),直接寻址,不涉及寄存器,操作数有效地址直接出现在指令中。 例如: 1. MOV AX, 1234 2. MOV AX, x1234 缺省的段寄存器为 DS,例1 源操作数的 物理地址=(DS)*16+1234 例2 源操作数的 物理地址=(DS)*16+x+1234 这里x为符号地址,可以理解为变量 例: MOV AX, 2000H 示例,寄存器间接寻址,涉及一个寄存器,没有位移量,寄存器中保存操作数地址,允许使用的寄存器为 BX, BP, SI, DI,例如: 1 MOV AX, BX 示例 2 MOV AX, ES: SI 3. MOV AX, BP 用BX,SI,DI

7、间接寻址时,缺省的段寄存器为DS,用BP间接寻址时,缺省的段寄存器为SS,允许段超越. 物理地址=(段寄存器)*16+(寄存器),寄存器相对寻址,涉及一个寄存器,带8位或16位位移量,操作数的有效地址为寄存器内容与位移量之和,允许使用的寄存器与寄存器间接寻址相同,缺省的段寄存器规定也与寄存器间接寻址相同。也允许段超越。例 MOV AX, DI+x+5 这里位移量为 x+5 例1. MOV AX, CountDI 示例1 例2. MOV BX, DeltaBP 示例2,基址变址寻址,涉及两个寄存器,其中之一为基址寄存器,另一个为变址寄存器,不带位移量,操作数的有效地址等于两个寄存器内容之和,基址

8、寄存器为BX时,缺省的段寄存器为DS,基址寄存器为BP时缺省的段寄存器为SS。也允许段超越。例 1 MOV AX, BXDI 2 MOV AX, BP+SI,基址变址相对寻址,涉及两个寄存器,其中之一为基址寄存器,另一个为变址寄存器,带8位或16位位 移量,操作数的有效地址等于两个寄存器内容与位移量之和,缺省的段寄存器以及段超越的规定与基址变址寻址相同。例 1 MOV AX, xBXDI 2 MOV AX, BPSI+x+5 3 MOV AX, MASKBXSI 示例,比例变址寻址方式(386以后才有),操作数的有效地址是变址寄存器的内容乘以指令中指定的比例因子再加上位移量之和,所以有效地址由

9、三种成分组成。 例 MOV EAX, xEDI*4,基址比例变址寻址方式(386以后才有),操作数的有效地址是变址寄存器的内容乘以指令中指定的比例因子再加上基址寄存器的内容之和,所以有效地址由三种成分组成。 例 MOV EAX, EBXEDI*4,相对基址比例变址寻址方式(386以后才有),操作数的有效地址是变址寄存器的内容乘以指令中指定的比例因子,加上基址寄存器的内容,再加上位移量之和,所以有效地址由四种成分组成。 例 MOV AX, xEBXEDI*4,3.1.2 与转移地址有关的寻址方式 程序保存在内存中,多数情况下,按照指令在内存中的位置,从低地址到高地址,逐条顺序执行,但循环,分支,

10、子程序等结构在计算机程序中是不可缺少的,使用这些结构势必要破坏程序的自然执行顺序.于是产生一个问题:如何决定下一条指令的位置?即与转移地址有关的寻址方式. 8086 与转移有关的指令有无条件转移(jmp),过程调用(call),循环(loop),条件转移和中断(int),后三种指令寻址方式有严格规定,比较简单.前两种指令的寻址方式比较丰富.本节以jmp为例,介绍各种寻址方式.,CPU在程序运行过程中,利用内部寄存器记载下一条指令的地址.8086采用段-偏移的地址转换方式,因此用代码段寄存器CS和指令指针寄存器IP保存即将执行的指令地址.其中CS保存段地址, IP保存段内偏移地址. 下一条指令的

11、物理地址=(CS)*16+(IP). 顺序执行情形,IP的内容随指令的执行自动取得增量(当前机器指令占据的字节数).CS的内容不发生改变. 而执行一条转移指令,意味着需要修改下一条指令的地址,也就是,要根据转移指令的要求,修改CS和IP的内容.,段内转移 转移的目标地址在当前代码段内,CS的内容不必修改,需要将IP的内容修改为目标地址 段间转移 转移的目标地址未必在本段,CS和IP的内容都需要修改.,段内转移 又分为段内直接转移与段内间接转移 段内直接转移 转移的目标地址可以直接从指令中求 得, 相当于与数据有关的寻址方式中的立即寻址 段内间接转移 的目标地址保存在寄存器或存储器中 从指令中可

12、以得到寄存器名或保存目标地址的 存储器地址,段内直接转移 在汇编语言源程序中,直接转移指令是在jmp后写 跳转目标的标号.汇编程序自动计算该标号代表的地址. 将汇编的跳转指令转换成相应的机器指令. 段内直接转移又分为直接短转移和直接近转移,取决于目标地址与IP内容(下一条指令地址)之差(称为位移量,位移量将出现在机器指令中).例1 位移量在字节整数范围之内(两地址之差在 -128127字节范围内)时,位移量为8位,形成短转移,否则,位移量为16位,形成近转移. 例2,汇编语言中,直接转移的指令格式如下: jmp 类型操作符 转移目标 其中类型是可选项,类型缺省时,汇编程序将根据实际情况决定形成

13、的指令.类型不缺省,则取值可以是 short, near ptr, far ptr 分别表示直接短,近,远转移.转移目标应该是汇编语言源程序中某一条指令的标号. 返回,段内间接转移 跳转目标地址在寄存器或存储器中 如果是在寄存器中,则指令格式为 JMP 寄存器名 可以取八个通用16位寄存器中的任何一个,其内容 是转移目标的段内偏移地址,这种方式与数据寻址 中的寄存器寻址对应. 例3 如果是在存储器中, 则指令格式为 JMP WORD PTR 存储器地址 与数据寻址中,操作数在存储器中的寻址方式对 应,可以采用五种寻址方式的任何一种.例4,段间转移分为段间直接转移和段间间接转移 段间直接转移的汇

14、编指令一般要求在指令中写明 远跳转,指令格式一般是 JMP FAR PTR 标号 执行这样的指令,(IP)将取得标号的段内偏移地址, 而(CS)将取得标号所在段的段地址。汇编程序自动 将这些地址填入机器指令。例5 段间间接转移,只能是存储器寻址,存储器中连 续两个字,高位字存放新的代码段段址,低位字存放 指令指针。指令格式一般是 JMP DWORD PTR 存储器地址 存储器地址可以采用五种存储器寻址中的任何一种。 例6,例1:段内直接短转移 JMP SHORT PTR LBL LBL为标号,位移量8位,指令执行后,(IP)变为 LBL 例2:段内直接近转移 JMP NEAR PTR LBL1

15、 LBL1为标号,位移量16位,指令执行后,(IP)变为 LBL1 返回,例3:段内间接转移,寄存器寻址 JMP AX JMP SP 指令执行的结果, (IP)取得指定的寄存器内容 例4:段内间接寻址,存储器寻址 JMP WORD PTR TBL JMP WORD PTR BX+TBL JMP WORD PTR BP+SI+TBL 指令执行的结果, (IP)取得指定的存储单元内容 返回,例5 段间直接转移 JMP FAR PTR LBL 其中FAR PTR 是操作符,表示直接远转移,指令执行 的操作是把 LBL 所在段地址送CS,LBL的偏移地址 送IP。 例6 段间间接转移,只能用存储器寻址 JMP DWORD PTR TBL JMP DWORD PTR TBL+BP JMP DWORD PTR TBL+BX+DI 指令执行的操作是,指定存储单元(双字)的高位 字送CS,低位字送IP。 返回,间接转移 转移的

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号