第3章 寻址方式 罗文坚 中国科大 计算机学院 http://staff.ustc.edu.cn/~wjluo/mcps/

Slides:



Advertisements
Similar presentations
第1章第1章 PC/AT 系統 1 Chapter 1 Chapter 1 PC/AT 系統 001.
Advertisements

输入输出程序设计 输入输出的基本概念 无条件方式输入输出 查询方式输入输出 中断方式输入输出.
汇编语言程序设计 吴 向 军 中山大学计算机科学系
第10章 DOS功能调用与BIOS中断调用.
第一章 计算机基础知识 第一节 计算机概述 一、计算机的基本组成和工作原理 二、有关术语 三、计算机发展简史 四、微型计算机概述
第3章 80x86汇编语言程序设计(下).
第三章 80 x86的指令系统和寻址方式 3.1 指令概述 x86的寻址方式 ( ※ ) 3.3 程序占有的空间和执行的时间
 指令系统  寻址方式 第3章 80x86的指令系统和寻址方式 一组指令的集合 指令 与数据有关的寻址方式 与转移地址有关的寻址方式
4.1 汇编语言 4.2 顺序结构程序 4.3 分支程序设计 4.4 循环程序设计 4.5 子程序设计
3.3.5 程序控制指令 控制转移指令分为: 转移指令 循环控制指令 调用和返回指令 中断指令.
汇编语言程序设计 Assembly Language Programming
微型计算机技术 教 学 指 导(三) 太原广播电视大学 郭建勇.
第三章 寻址方式与指令系统 3.1 寻址方式 一条指令通常由两大部分构成: 操作码 操作数
逆向工程-汇编语言
微机原理与接口技术 第3章 8086指令系统 朱华贵 2015年09月25日.
/8088指令系统 为便于理解指令的形式和功能, 对指令中操作数符号的约定如下: 大小写字母无区别
第6章 DMA传输 6.1 DMA传输原理 6.2 DMA控制器8237A A的编程使用 欢迎辞.
第四章 典型CPU及指令系统举例.
第2章 汇编语言与汇编程序 ——8086/8088指令系统 mov ax,12h call display Jmp 1234h.
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年11月05日.
第八章 输入输出程序设计 总线 CPU MEM I/O接口 I/O设备.
第3章 80x86汇编语言程序设计(上) 时间不够的情况下只讲16位汇编 注:本章中,用此颜色和字型说明的文字只适用于32位汇编.
第4章 数据传送指令 罗文坚 中国科大 计算机学院
第3章 IA-32指令系统 3.1 基本数据类型 3.2 IA-32的指令格式 3.3 IA-32指令的操作数寻址方式
第8章 寻址方式与指令系统.
微机原理及应用 主讲:谢维成 西华大学 电气信息学院 1.
第3章 8086/8088指令系统 mov ax,12h call display Jmp 1234h.
7.1 机器指令 7.2 操作数类型和操作类型 7.3 寻址方式 7.4 指令格式举例 7.5 RISC 技术.
微机原理与接口技术 ——80x86微处理器 西安邮电大学 计算机学院 范琳.
第一章 8086程序设计 第二章 MCS-51程序设计 第三章 微机基本系统的设计 第四章 存贮器与接口 第五章 并行接口
第3章 80x86汇编语言程序设计(上) 时间不够的情况下只讲16位汇编 注:本章中,用此颜色和字型说明的文字只适用于32位汇编.
汇编语言程序设计课程设计 第二次实验 DEBUG基本命令与算术运算指令
微型计算机原理及应用.
第五章 微处理器.
8086 指令系统特点 可变长指令:指令格式比较复杂。
第3章 微型计算机输入输出接口 3.1 输入/输出接口 3.2 输入输出数据传输的控制方式 3.3 开关量输入输出接口 欢迎辞.
第六章 子程序结构 §6.1 子程序的设计方法 §6.2 嵌套与递归子程序 §6.3 子程序举例 §6.4 DOS系统功能调用.
1.3 微型计算机的结构和工作原理.
逆向工程-汇编语言
第二章 IBM-PC微机的功能结构 2.1 IBM-PC微机基本结构 一、 微机的一般构成 一般计算机应包括五大部件:
第二章 80x86计算机组织 x86微处理器 2.2 基于微处理器的计算机系统构成 2.3 中央处理机 2.4 存储器
微机原理与接口技术 ——80x86微处理器 西安邮电大学 计算机学院 范琳.
4.1 汇编语言程序格式 4.2 MASM中的表达式 4.3 伪指令语句 4.4 DOS系统功能调用和BIOS中断调用
教师:王晓甜 8086CPU 指令系统 教师:王晓甜
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年11月19日.
第二章 8086微处理器. 第二章 8086微处理器 微处理器的基本结构 8086微处理器的主要特性和内部结构 8086CPU的工作模式和引脚信号 8086的存储器管理 8086的总线操作和时序.
第4章 汇编语言程序格式  汇编程序功能  伪操作  汇编语言程序格式  汇编语言程序的上机过程.
《微型计算机原理与接口技术》 第4版 王良 宁德师范学院 吴宁 乔亚男 编著 清华大学出版社 出版
第7章 在C/C++中使用汇编 罗文坚 中国科大 计算机学院
习题3 1、 分别说明下列指令的原操作数和目的操作数各采用什么寻址方式。 设定如下: ①立即寻址 ② ① ②寄存器寻址
第3章 指令系统和寻址方式 3.1指令系统概述 /8086CPU的寻址方式 3.3 指令的机器码表示方法(略)
第九章 BIOS和DOS中断 在存储器系统中,从地址0FE000H开始的8K ROM(只读存储器)中装有BIOS(Basic Iuput /output System)例行程序。驻留在ROM中的BIOS给PC系列的不同微处理器提供了兼容的系统加电自检,引导装入,主要I/O设备的处理程序以及接口控制等功能模块来处理所有的系统中断。使用BIOS功能调用,给程序员编程带来很大方便,程序员不必了解硬件操作的具体细节,直接用指令设置参数,然后中断调用BIOS中的子功能,所以利用BIOS功能编写的程序简洁,可读性好,
第2章 80x86计算机组织  计算机系统  存储器  中央处理机  外部设备.
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年11月13日.
<编程达人入门课程> 本节内容 内存的使用 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群: ,
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年12月17日.
本节内容 内存复制指令 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
College of Computer Science & Technology
微机原理与接口技术 ——8086微处理器 西安邮电大学 计算机学院 范琳.
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年11月06日.
本节内容 C语言的汇编表示 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
3. 逻辑运算指令 A、简单逻辑操作指令 CLR A. (不影响CY、AC、 OV标志) CPL A
本节内容 通用寄存器 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
微机原理与接口技术 西安邮电大学计算机学院 宁晓菊.
C++语言程序设计 C++语言程序设计 第一章 C++语言概述 第十一组 C++语言程序设计.
数据表示 第 2 讲.
微机原理与接口技术 第5章 汇编语言程序设计 西安邮电大学计算机学院 王 钰.
微机原理与接口技术 西安邮电大学计算机学院 宁晓菊.
第三章 CPU子系统 西南石油大学计算机科学学院 主讲教师 杨 梅 联系电话:
第三章 8086的指令系统 8086指令特点 8086的寻址方式 8086的指令格式及数据类型 8086的指令集.
Presentation transcript:

第3章 寻址方式 罗文坚 中国科大 计算机学院 http://staff.ustc.edu.cn/~wjluo/mcps/

本章内容 指令格式的回顾 数据寻址方式 程序存储器寻址方式 堆栈存储器寻址方式 I/O端口寻址

指令的组成 指令通常应提供的信息 指令的组成 操作码 操作数 …… 做什么操作、操作数从哪里来、操作结果放在哪里 对于调用和转移指令,还要涉及转移或调用地址的提供方式 指令的组成 操作码字段(Field):标明计算机要执行什么操作。 相对简单:对每一种操作指定相应的二进制代码即可。 操作数字段:指出指令在执行过程中所需要的操作数(值为多少 或者放在什么地方或者控制转移到什么地方),以及操作结果送到哪里。 比较复杂:寻址方式! 操作码 操作数 ……

寻址方式 定义1:指令中操作数的表示方式。 定义2:规定如何对地址字段作出解释以找到操作数。 程序转移时需提供转移地址,这与提供操作数地址在方法上没有本质区别,因此也归入寻址方式的范畴。 一个指令系统能够提供哪些寻址方式,能否为编制程序提供方便,这是指令系统设计的关键。 高效开发微处理器软件,需通晓每条指令采用的寻址方式。

本章内容 指令格式的回顾 数据寻址方式 程序存储器寻址方式 堆栈存储器寻址方式 I/O端口寻址

数据寻址方式 寄存器寻址 立即寻址 直接数据寻址 寄存器间接寻址 基址加变址寻址 寄存器相对寻址 相对基址加变址寻址 比例变址寻址(80386及更高档) RIP相对寻址(Pentium 4和Core 2的64位模式)

以MOV指令为例 注意: MOV指令是把源操作数复制到目的操作数,源操作数并不改变。 除MOVS指令外,任何其他指令都不允许储存器到存储器的传送。

以MOV指令为例

以MOV指令为例

寄存器寻址 寄存器寻址:操作数在寄存器中。 只要记住寄存器名,就很容易使用。 8位、16位、32位、64位寄存器 指令中使用相同长度的寄存器。 正确:MOV AX, BX 错误:MOV AX, BL 少数指令例外。 例如,移位指令SHL:SHL DX,CL 就MOV指令而言: 不允许段寄存器到段寄存器的MOV指令。 CS不能作为MOV指令的目的操作数。 指令MOV CS, AX,MASM6.11编译时没有报错,但MASM5.0编译时报错。

Example 0000 8B C3 MOV AX, BX;把BX的内容复制到AX 0002 8A CE MOV CL, DH 0004 8A CD MOV CL, CH 0006 66 | 8B C3 MOV EAX, EBX 0009 66 | 8B D8 MOV EBX, EAX 000C 66 | 8B C8 MOV ECX, EAX 000F 66 | 8B D0 MOV EDX, EAX 0012 8C C8 MOV AX, CS 0014 8E D8 MOV DS, AX;CSDS分两步实现 0016 8E C8 MOV CS, AX;编译通过,运行有问题

立即寻址 立即数:在存储器中,数据紧接着放在操作码后面。 立即寻址可操作字节、字数据、双字数据(32位微处理器)、64位数据(64位模式)。 MOV AX, 1234H MOV EAX, 123456H MOV RAX, 123456780A311200H

Example MOV BL, 44;十进制数44送入BL寄存器 MOV AX, 44H;十六进制数44送入AX MOV CL, 11001110B;二进制数11001110B送入CL 说明: 字母H表示16进制数。如果十六进制数以字母开头,则汇编程序要求前面加0,如0F2H。 如果用撇号将ASCII码括起来,也可以表示立即数,如MOV BX,’AB’。 对于二进制数,在数字后面加字母B来表示。

Example .MODEL TINY;选择TINY模型,把程序汇编成一 ;个代码段。TINY程序将会被成.COM程序, ;适用于DOS系统 .CODE;指示代码段的开始 .STARTUP;指示程序的开始 MOV AX, 0 MOV BX, 0 MOV SI, AX MOV DI, AX MOV BP, AX .EXIT;返回到DOS操作系统 END;程序结束

汇编语言的语句格式简介 汇编语言程序中的每条语句由4个字段组成。 标号、操作码、操作数、注释 LABEL OPCODE OPERAND COMMENT DATA1 DB 23H ;定义DATA1为字节23H …… START1: MOV AL, BL ;把BL的内容复制AL CX, 200 ;把200装入CX

.LST文件 程序被汇编后,可以生成程序清单,即.LST文件。

Visual C++内嵌汇编程序 汇编程序也可以内嵌在Visual C++程序中。

直接数据寻址 直接数据寻址:把位移量加到默认的段基址或其他段基址上形成地址。 直接数据寻址有两种形式: 直接寻址(Direct addressing) 位移量寻址(displacement addressing)

直接数据寻址—直接寻址 直接寻址:用于存储单元与AL、AX、EAX寄存器之间传送数据。 这类指令通常是3个字节长。对于80386及更高型号的微处理器,指令前面可能出现一个表示寄存器长度的前缀,从而超过3个字节。 例: MOV AL, DATA;假定DATA是存储单元的符号地址 MOV AL, NUMBER;NUMBER指向数据段存储单元 MOV ES:[2000H],AL

直接数据寻址—位移量寻址 位移量寻址指令:将数据从存储单元移动到寄存器(不含AL、AX、EAX)的指令,称为位移量寻址指令。 例如: MOV CL, DS:[1234H] MOV DATA1, EAX MOV EDI, SUM1;SUM1已定义

Example SMALL模型:允许包含一个数据段和一个代码段。

寄存器间接寻址 寄存器间接寻址允许寻址任何存储单元的数据。 16位微机:BP、BX、DI、SI。 例、MOV AX, [BX],如果[DS]=0100H,[BX]=1000H,则将存储器中02000H中的内容送入AX,低地址低字节,高地址高字节。 80386及更高档微处理器:除了用BP、BX、DI、SI寄存器做间接寻址寄存器外,允许使用除ESP以外的任何扩展寄存器。 说明:ESP归入堆栈寻址。 64位模式下,可以使用任意64位寄存器来保存一个64位线性地址。

Example MOV CX, [BX];数据段 MOV [BP], DL;使用BP、EBP时,默认段为堆栈段 MOV [DI], BH;数据段 MOV [DI], [BX];错!串指令外,不允许MemMem MOV AL, [EDX];数据段 MOV ECX, [EBX];数据段 MOV RAX, [RDX];64位模型

寄存器间接寻址 BX、DI、SI:默认段寄存器为DS BP:默认段寄存器为SS 注意:SP EAX、EBX、ECX、EDX、EDI、ESI:默认段寄存器为DS EBP:默认段寄存器为SS 注意:ESP 在实模式下,32位寄存器寻址存储器时,32位寄存器的内容不允许超过0000FFFFH。

寄存器间接寻址 在保护模式下,只要不访问权限字节规定的段之外的存储单元,任何值都可以在用于间接寻址寄存器的32位寄存器中使用。 例如:MOV EAX, [EBX] 可用汇编伪指令规定传送数据的长度。 BYTE PTR, 或WORD PTR, 或DWORD PTR,或QWORD PTR 例,MOV [DI], 10H;传送字节?字? 例,MOV BYTE PTR [DI], 10;传送字节 例,MOV DWORD PTR [DI], 10;传送双字

寄存器简介寻址 寄存器间接寻址常用于引用存储系统中的数据表。

基址加变址寻址 基址加变址寻址:类似于间接寻址,用于间接地访问存储器。 8086~80286: 基址寄存器BX或BP + 变址寄存器SI或DI。 通常,基址寄存器用于保持数组的起始地址,变址寄存器用于保持数组元素的相对位置。 注意:使用BP时,默认段寄存器是SS。

基址加变址寻址 80386及更高档微机 允许除了ESP以外的任意两个32位扩展寄存器组合使用。 例如,MOV DL, [EAX+EBX] 注意:使用EBP时,默认段寄存器是SS。

基址加变址寻址 例,实模式下,用“基址加变址寻址”定位数据 BX=1000H,DI=0010H,DS=0100H

基址加变址寻址 例,用“基址加变址寻址”定位数组数据

寄存器相对寻址 寄存器相对寻址:位移量+基址寄存器或变址寄存器。 例,MOV AX, [BX+1000H]

寄存器相对寻址 16位微机中,BX、DI或SI寻址数据段,BP寻址堆栈段。 80386以上微处理器中,位移量可以是32位的数字,寄存器可以是除了ESP外的任何32位寄存器。 位移量的形式: MOV AL, [DI+2] MOV AL, [SI-1] MOV AL, DATA[DI] MOV AL, DATA[DI+3]

寄存器相对寻址 用寄存器相对寻址方式寻址数组数据 可以用DI存取一个元素。

相对基址加变址寻址 相对基址加变址寻址 基址寄存器+变址寄存器+位移量 例,MOV AX, [BX+SI+100H],假设DS=1000H

相对基址加变址寻址 用相对基址加变址寻址访问数组 用位移量寻址文件,基址寄存器寻址记录,变址寄存器寻址记录中的元素

EA=[基址寄存器]+[变址寄存器]×[比例因子]+[位移量] 比例变址寻址 比例变址寻址是80386以上的微处理器所特有的寻址方式。 有效地址EA由基址、变址、位移量和比例因子4部分组合而成。 EA=[基址寄存器]+[变址寄存器]×[比例因子]+[位移量] 通用寄存器EAX、EBX、ECX、EDX、EBP、ESP、ESI和EDI都可以用作基址寄存器,用于修改内存地址(用EBP/ESP时,段寄存器为SS)。 除ESP外,通用寄存器都可以用作变址寄存器。 能以1、2、4、或8的比例因子对变址值进行换算,以便于对数组结构的寻址。

比例变址寻址 MOV EAX, [EBX+4*ECX] MOV [EAX+2*EDI+100H], CX MOV AL, [EBP+2*EDI+2] MOV EAX, ARRAY[4*ECX] MOV RAX, [8*RDI](64位模式)

RIP相对寻址 RIP相对寻址是64位模式下,采用64位指令指针寄存器来寻址平展内存模式下的线性位置。 偏移是有符号的,因此位于指令±2GB范围内的数据都可以通过这一寻址模式访问。 例1,CMP WORD PTR [RIP+ffff5b89H], 5a4dH 例2,如果RIP=1000000000H,一个32位偏移为300H,那么被访问的位置为1000000300H。

EA=[基址寄存器]+[变址寄存器]+[位移量] 16位微处理器的数据寻址方式 立即寻址 寄存器寻址 存储器寻址 物理地址PA:段基址SBA(Segment Base Address)与有效地址EA(Effecitive Address) 组合。 有效地址EA:基址寄存器(BX和BP)、变址寄存器(SI和DI)、指令中给出的8位或16位位移量的组合。 EA=[基址寄存器]+[变址寄存器]+[位移量] 不同组合方式,形成不同的寻址方式: 直接寻址 寄存器间接寻址 基址加变址寻址 寄存器相对寻址 相对基址加变址寻址

EA=[基址寄存器]+[变址寄存器]×[比例因子]+[位移量] 32位微处理器的数据寻址方式 立即寻址 寄存器寻址 存储器寻址 物理地址PA:段基址SBA(Segment Base Address)与有效地址EA(Effective Address) 的组合。 有效地址EA:基址、变址、位移量和比例因子的组合。 EA=[基址寄存器]+[变址寄存器]×[比例因子]+[位移量] 直接寻址 寄存器间接寻址 基址加变址寻址 寄存器相对寻址 相对基址加变址寻址 比例变址寻址 没有变址字节时,不允许ESP。

32位微处理器的存储器寻址方式计算

EA=[基址寄存器]+[变址寄存器]×[比例因子]+[位移量] 64位微处理器的数据寻址方式 立即寻址 寄存器寻址 存储器寻址 物理地址PA:段基址SBA(Segment Base Address)与有效地址EA(Effective Address) 的组合。 有效地址EA:基址、变址、位移量和比例因子的组合,或RIP与位移量的组合。 EA=[基址寄存器]+[变址寄存器]×[比例因子]+[位移量] 或 EA=[RIP]+[位移量]

64位微处理器的数据寻址方式 有效地址EA为基址、变址、位移量和比例因子的组合时,各部分的要求如下。 位移量:一个8位、16位或32位值。 基址:在一个32位(若REX.W设置,为64位)通用寄存器中的值(即基址寄存器中的值)。 变址:在一个32位(若REX.W设置,为64位)通用寄存器中的值(即变址寄存器中的值) 。 比例系数:值2、4或8,用于与变址值相乘。 在大多数情况下,基址寄存器和变址寄存器能在16个可用的通用寄存器之一中规定。

指令中带方括号的地址表达式遵循的规则 立即数可以出现在方括号内,表示直接地址,例如[2000H] 注意区别:MOV AX, 2000H 和 mov AX, [2000H] 16位微处理器中,只有BX/BP,SI/DI四个寄存器可以出现在[ ]内。它们可以单独出现,也可以组合出现(只能相加),或以寄存器与常数相加的形式出现。但BX和BP寄存器不允许同时出现在一个[ ]内,SI和DI也不能同时出现。 正确:[BX+SI-2] 不正确:[BX-SI-2] 由于方括号有相加的含义,下面几种写法等价: 6[BX][SI] [BX+6][SI] [BX+SI+6]

指令中带方括号的地址表达式遵循的规则 若方括号内包含BP,则蕴含使用SS来提供基地址。 物理地址=16×SS+EA。 8086 CPU中,包含BP的操作数有下列三种形式: DISP[BP+SI] DISP[BP+DI] DISP[BP] 注:DISP是8位或16位的位移量 允许用段超越前缀将SS修改为CS、DS或ES中的一个。

指令中带方括号的地址表达式遵循的规则 其余情况蕴含使用DS来提供基地址。物理地址计算方法为: 物理地址=16×DS+EA 8086 CPU中,操作数可以有以下几种形式: [DISP] DISP[BX] 或 DISP[SI] 或 DISP[DI] DISP[BX+SI] DISP[BX+DI] 同样允许用段超越前缀将DS修改为CS、 ES或SS中的一个。

本章内容 指令格式的回顾 数据寻址方式 程序存储器寻址方式 堆栈存储器寻址方式 I/O端口寻址

程序存储器寻址 用于JMP(转移)和CALL(调用)指令的程序存储器寻址方式有三种形式: 直接程序存储器寻址 相对程序存储器寻址 间接程序存储器寻址

直接程序存储器寻址 直接程序存储器寻址:转移指令的目的地址和操作码一同存储。 例,程序要跳转到存储单元10000H处执行下一条指令,则地址10000H在存储器中被放在操作码的后面。 JMP [10000H] 1000H装入CS,0000H装入IP

直接程序存储器寻址 直接转移通常是远转移(far jump),可以转移到任何存储单元执行下一条指令。 远转移又称为段间转移。 在实模式下,远转移通过改变CS和IP的内容,可以访问1M存储器内的任何单元。 在保护模式操作中,远转移访问描述符表里的新的代码段描述符,允许转移到80386~Core2的整个4GB地址范围内的任何存储单元。 在64位模式下,CS寄存器包含一个指向描述符的指针,该描述符包含了访问权限和特权级,但不包含jump或call指令的地址。

相对程序存储器寻址 相对程序存储器寻址:相对于指令指针(IP/EIP)。

相对程序存储器寻址 例,JMP [2],JMP指令跳过后面的两个存储器字节,即指令指针和2相加,就得到下一条指令的地址。

相对程序存储器寻址 通常,在16位微处理器中,JUMP指令的格式是1字节操作码加上1或2字节的位移量。 1字节的位移量:短转移(short jump) 2字节的位移量:近转移(near jump) 短转移和近转移均属于段内转移。段内转移是指转移到当前代码段中的任何位置。 在80386及更高型号的微处理器中,位移量可以是4个字节(32位数),允许用相对转移到达4GB代码段内的任何位置。

相对程序存储器寻址 相对于JMP和CALL指令包含的带符号的位移量,允许向前或向后访问存储器。 所有的汇编程序能够自动地用位移量计算距离,并选择合适的1、2或4字节形式。 在16位微处理器中,如果距离太远,超出2个字节的位移量,有些汇编程序就使用直接转移。

间接程序存储器寻址 间接程序存储器寻址:利用寄存器寻址方式、存储器操作数的寻址方式求得的操作数为转移地址。 段内寻址的例子: JMP AX;转移到当前代码段AX内容所指的位置 JMP NEAR PTR [BX];地址在存储器中 JMP NEAR PTR [DI+2] JMP TABLE [BX] JMP ECX JMP RDI

间接程序存储器寻址 如果用16位寄存器存放JMP的目的地址,则是近转移。 例1,JMP BX。如果BX=1000H,则转移到段内偏移地址1000H处。 例2,JMP NEAR PTR [BX]。此时用寄存器间接寻址方式。 JMP [BX]的默认情况是JMP NEAR PTR [BX]。 例3,JMP TABEL [BX]。若BX=4,则转移到哪一个地址?

间接程序存储器寻址 段间间接转移寻址:不仅要求改变IP中的指令偏移地址,还要改变CS中的段基值。 例,16位微处理器中,JMP DWORD PTR [EA]

本章内容 指令格式的回顾 数据寻址方式 程序存储器寻址方式 堆栈存储器寻址方式 I/O端口寻址

堆栈存储器寻址方式 堆栈在微处理器起着重要的作用,用来暂存数据,为程序保存返回地址。 部分相关指令: PUSH / POP指令:数据入栈 / 出栈 CALL / RET指令:CALL用堆栈保存返回地址,RET从堆栈取出返回地址 堆栈存储器用两个寄存器维护:堆栈指针(SP或ESP),堆栈段寄存器(SS)。 堆栈指针总是指向栈顶数据,因而是满堆栈。 当堆栈指针指向最后压入堆栈的数据时,称为满堆栈(Full Stack),而当堆栈指针指向下一个将要放入数据的空位置时,称为空堆栈(Empty Stack)。

堆栈存储器寻址方式 当字数据压入堆栈时,高8位数据放入SP-1寻址的单元,低8位数据放入SP-2寻址的单元,然后SP中的值减2。 PUSH BX指令

堆栈存储器寻址方式 当字数据出栈时,低8位数据从SP寻址的单元取出,高8位数据从SP+1寻址的单元取出,然后SP中的值加2。 POP BX指令

堆栈存储器寻址方式 实模式中,SP/ESP寄存器加上SS×10H形成堆栈存储器地址。 在8086~80286中,PUSH和POP总是按字(不是字节)进行数据出栈和入栈的。 在80386以上微处理器中,允许字或双字入栈/出栈。 在64位模式下,允许64位寄存器入栈/出栈。 思考题:写一个C语言程序,判断栈的增长方向。

本章内容 指令格式的回顾 数据寻址方式 程序存储器寻址方式 堆栈存储器寻址方式 I/O端口寻址

I/O端口寻址 I/O端口的范围是0000H~FFFFH(216个8位端口)。 使用地址总线的低16位。 I/O端口的寻址有2种方式。 直接端口寻址方式 间接端口寻址方式

直接端口寻址方式 直接端口寻址方式:在I/O指令中,端口地址以8位立即数的形式出现。 仅适合于访问地址00~FFH的端口。 例,IN AL, 80H 从地址为80H的端口读取一个字节数据到AL中。

间接端口寻址方式 间接端口寻址方式:I/O端口地址预先存放在DX寄存器中。 适合于地址0000H~FFFFH的全部端口。 例,MOV DX, 2000H OUT DX, AX 将AX中的16位数据发送到DX、DX+1确定的端口2000H和2001H。

本章小节 数据寻址方式 立即寻址、寄存器寻址、存储器寻址 程序存储器寻址方式 直接、相对、间接 段内、段间 堆栈存储器寻址方式 栈是递减型的满堆栈 I/O端口寻址 直接、间接

作业(1) 习题7 习题23 习题27 习题33 习题35

作业(2) 8086 CPU中,设DS=1000H,ES=2000H,SS=3500H,SI=00A0H,DI=0024H,BX=0100H,BP=0200H,数据段中变量名为VAL的偏移地址值为0030H,试说明下列源操作数字段的寻址方式是什么? MOV AX, [100H] MOV AX, VAL MOV AX, [BX] MOV AX, ES:[BX] MOV AX, [SI] MOV AX, [BX+10H] MOV AX, [BP] MOV AX, VAL[BP][SI] MOV AX, VAL[BX][DI] MOV AX, [BP][DI]

作业(3) 80386 CPU中,下列指令的源操作数的寻址方式是什么? MOV EAX, EBX MOV EAX, [ECX][EBX] MOV [ESI], [EDX×2] MOV EAX, [ESI×8] MOV EDX, [ESI][EBP+0FFF0000H]