《微机原理课件ch03章节》由会员分享,可在线阅读,更多相关《微机原理课件ch03章节(32页珍藏版)》请在金锄头文库上搜索。
1、Chapter 3 Addressing modes,Instructor:Dr. Shen Runjie,寻址模式,寻址模式 寻找操作数的地址(一般指源操作数) 找数 寻找要执行的下一条指令的地址 找指令 三种寻址模式 数据寻址模式(Data - Addressing Modes) 程序存储器寻址模式( Program Memory - Addressing Modes) 堆栈寻址模式( Stack Memory - Addressing Modes),2019/6/28,第2页,指令系统,指令控制计算机完成指定操作的命令 机器指令指令的二进制代码形式。例如:CD21H 汇编指令助记符形式的
2、指令。例如:INT 21H 指令系统CPU所有指令及其使用规则的集合 8088/8086指令系统: 指令向后兼容(x86系列) 应用广泛,资料易于寻找,2019/6/28,第3页,指令的基本构成,2019/6/28,第4页,操作码,操作数,,操作数,说明要执行的是什么操作,操作对象,可以有0个、1个或2个,目的,源,指令的基本构成,示例 目的操作数和源操作数均可采用不同的寻址方式,但两个操作数的类型要一致。,2019/6/28,第5页,ADD AX,SI+6,MOV AX , BX,操作码 操作数,INC BX,HLT,操作数,8088/8086的操作数分为3类 立即数,2019/6/28,第
3、6页,MOV AX,0FA00H ;正确 MOV 8000H,DX ;错误,立即数只能用作源操作数,如,操作数,8088/8086的操作数分为3类 寄存器操作数 放在8个通用寄存器和4个段寄存器中的操作数,2019/6/28,第7页,只能存放字/双字操作数,段寄存器存放当前操作数的段基地址,不允许将立即数传送到段寄存器,操作数,8088/8086的操作数分为3类 存储器操作数(访问方式),2019/6/28,第8页,存储器操作数,字节(BYTE PTR) 字(WORD PTR) 双字(DWORD PTR),1 2 4,类型,存储单元个数,一般不允许两个操作数同时为存储器操作数,BYTE PTR
4、 2A00H,WORD PTR 2A00H,实模式寻址方式,存储单元的物理地址 = 段基地址 + 偏移地址 若指令中没有指明所涉及的段寄存器,CPU就采用默认的段寄存器来确定操作数所在的段 存储器操作数的偏移地址(也称有效地址)可以通过不同的寻址方式由指令给出,2019/6/28,第9页,例如,若(BX)=2000H, (SI)=0A00H, (DI)=2A00H,则以下指令的结果是一样的: MOV AL, 2A00H MOV AL, BX+0A00H MOV AL, BXSI MOV AL, DI,数据寻址模式(Data-Addressing Modes),寄存器寻址(register ad
5、dressing) 立即寻址(immediate addressing) 存储器寻址 直接寻址(direct addressing) 寄存器间接寻址(register indirect addressing) 基址加变址寻址 (base-plus-index addressing) 寄存器相对寻址(Register relative Addressing) 相对基址变址寻址(base relative-plus-index addressing) 比例变址寻址(scaled-index addressing) I/O寻址,2019/6/28,第10页,2019/6/28,第11页,寄存器寻址(
6、register addressing),操作数放在某个寄存器中,源操作数与目的操作数字长要相同 寄存器寻址与段地址无关 操作数在寄存器中,指令中源操作数和目的操作数都可用这种寻址方式 例: MOV AX, BX MOV CL, AL 错误例: MOV AX, BL ; 字长不同 MOV ES: AX, DX ; 寄存器与段无关,2019/6/28,第12页,立即寻址(immediate addressing),操作数(为一常数)就在指令中,紧跟在操作码后面,作为指令一部分存放在内存的代码段中 (此操作数称为立即数) 立即寻址只能用于源操作数 例: MOV AX, 1C8FH MOV BYTE
7、 PTR2A00H, 8FH MOV EAX,234H 错误例: MOV 2A00H, AX ; 错误!,2019/6/28,第13页,存储器寻址,有效地址(EA, Effective Address) 当操作数在内存中时,指令的地址码(操作码)给出所访问的内存单元的逻辑地址。 在寻址方式中,逻辑地址的形成是由多个分量组合而成,该组合地址又叫有效地址,2019/6/28,第14页,直接寻址(direct addressing),当指令中的源操作数或目的操作数,采用直接给出被访问内存单元的逻辑地址时,这种寻址方式称直接寻址 默认的段寄存器为DS,但也可以显式地指定其他段寄存器称为段超越前缀 偏移
8、地址也可用符号地址来表示,如ADDR、VAR 例: MOV AX , 2A00H MOV DX , ES: 2A00H MOV SI , TABLE_PTR,2019/6/28,第15页,寄存器间接寻址(register indirect addressing),内存单元的逻辑偏移地址通过寄存器间接给出 MOV DX , SI MOV WORD PTR ECX,12 MOV DWORD PTR ESI,2345H,2019/6/28,第16页,基址加变址寻址(base-plus-index addressing),类似于间接寻址,采用两个寄存器进行寻址 EA经常采用几个基址寄存器(BX, BP
9、)和一个变址寄存器(SI, DI)组合而成 对高端CPU,允许除ESP外的任意两个寄存器组合成EA 例: MOV CX, BX+DI MOV CH , BP+SI MOV BX+SI, SP MOV EAX+EBX, ECX,2019/6/28,第17页,基址变址寻址(base-plus-index addressing),2019/6/28,第18页,寄存器相对寻址(Register relative Addressing),这种寻址方式中提出位移量的概念,即在寄存器间接寻址给出的偏移地址上,加一相对位移量。 位移量是一带符号的16位16进制数。 类似于基址加变址寻址和位移量寻址,通常为一个
10、寄存器 例 MOV LIST SI+2, CL MOV DI, SET_ITBX MOV DI, EAX+10H MOV ARRAYEBX, EAX,2019/6/28,第19页,寄存器相对寻址(Register relative Addressing),2019/6/28,第20页,相对基址变址寻址(base relative-plus-index addressing),它的EA是由三部分组成的,基址寄存器BX或BP的内容加上变址寄存器的内容再加相对位移量。 物理地址由基址寄存器按规则选择段寄存器,也可以使用段超越。 至少有两个寄存器 例: MOV AX, FILEBX+DI MOV AX
11、 , 8AHBXSI 该例中EA8AH(BX)(SI) 物理地址(DS)10H8AH(BX)(SI),2019/6/28,第21页,相对基址变址寻址(base relative-plus-index addressing),2019/6/28,第22页,比例变址寻址(scaled-index addressing),是80386以上CPU特有的。 第二个寄存器内容与比例因子相乘。比例因子可以是1X,2X,4X或8X 例 MOV EAX,EBX+ 4*ECX MOV EAX+2*EDI+100H,CX MOV AL,EDI+2*EBX MOV ARRAY4*ECX,EBX ADD AL,EBP+
12、2*EDI-2,2019/6/28,第23页,程序存储器寻址模式( Program Memory - Addressing Modes),用于JMP和CALL指令 有三种寻址模式 直接程序存储器寻址(Direct Program Memory Addressing) 相对程序存储器寻址(Relative Program Memory Addressing) 间接程序存储器寻址(Indirect Program Memory Addressing),2019/6/28,第24页,直接程序存储器寻址,指令地址和操作码一同存储 如 JMP 10000H,通常指令地址为标号地址 两种指令 段间转移远转
13、移(far jump) 实模式,可以转移到1MB内任意单元 保护模式,可以转移到4GB内任意单元 段间调用远CALL Figure 3-14,2019/6/28,第25页,相对程序存储器寻址,相对于指令指针(IP) 指明一个相对偏移量(1个、2个或4个字节),可正可负,使用时与IP相加 1个字节,短转移。范围-128+127 2个字节,近转移或者调用。范围32K 4个字节, 2G (32位) Figure 3-15,2019/6/28,第26页,间接程序存储器寻址,间接意味着有寄存器参与 可以是任何16位寄存器(AX,BX,CX,DX,SP,BP,SI,DI) 对386以上,还可以是32位寄存
14、器 或任何相对寄存器(BP,BX,SI,DI) 或任何带位移量的相对寄存器 例 JMP AX JMP NEAR PTRBX JMP NEAR PTRDI+2 JMP TABLEBX JMP ECX Example 3-14,2019/6/28,第27页,堆栈寻址模式,堆栈在微处理器中至关重要 暂时存放数据 为程序保存返回地址 堆栈 LIFO(Last-In First-Out)存储区 PUSH类指令将数据/指令压入堆栈 POP类指令将数据/指令弹出堆栈 存储区由两个寄存器维护 堆栈指针(SP) 堆栈段寄存器(SS),2019/6/28,第28页,堆栈寻址模式,操作模式 SP/ESP总是指向位于
15、堆栈段的存储区域 PUSH/POP总是以字/双字操作的。 压入数据/指令(以PUSH AX为例) AX高8位即AH中数据放入SP+2寻址单元 AX低8位即AL中数据放入SP+1寻址单元 SP SP+2 弹出数据/指令(以POP AX为例) SP寻址单元中数据弹出到AX高8位AH中 SP-1寻址单元中数据弹出到AX低8位AL中 SP SP-2,2019/6/28,第29页,堆栈寻址模式,2019/6/28,第30页,数据结构(Data Structure),数据结构类似一种模板 用于规定信息怎样存储到存储器数组中的 用STRUC/ENDS对进行结构定义 用和进行数据定义 例 INFO STRUC NAMES DB 32 dup(?) ; reserve 32 bytes for a name STREET DB 32 dup(?) CITY DB 16 dup(?) STATE DB 2 dup(?) ZIP DB 5 dup(?) INFO ENDS NAME1 INFO NAME1 INFO ,2019/6/28,第31页,Homework,第一部分 8,9,21,27,30,31,33,2019/6/28,第32页,