1 / 32

Chapter 3 Addressing modes

Chapter 3 Addressing modes. Instructor : Dr. Yu Youling. 寻址模式. 寻址模式 寻找操作数的地址 (一般指源操作数)  找数 寻找要执行的下一条指令的地址  找指令 三种寻址模式 数据寻址模式 (Data - Addressing Modes) 程序存储器寻址模式 ( Program Memory - Addressing Modes) 堆栈寻址模式 ( Stack Memory - Addressing Modes). 指令系统. 指令 —— 控制计算机完成指定操作的命令

Download Presentation

Chapter 3 Addressing modes

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Chapter 3Addressing modes Instructor:Dr. Yu Youling

  2. 寻址模式 • 寻址模式 • 寻找操作数的地址(一般指源操作数)找数 • 寻找要执行的下一条指令的地址 找指令 • 三种寻址模式 • 数据寻址模式(Data - Addressing Modes) • 程序存储器寻址模式( Program Memory - Addressing Modes) • 堆栈寻址模式( Stack Memory - Addressing Modes)

  3. 指令系统 • 指令——控制计算机完成指定操作的命令 • 机器指令——指令的二进制代码形式。例如:CD21H • 汇编指令——助记符形式的指令。例如:INT 21H • 指令系统——CPU所有指令及其使用规则的集合 • 8088/8086指令系统: • 指令向后兼容(x86系列) • 应用广泛,资料易于寻找

  4. 指令的基本构成 源 目的 操作码 [操作数], [操作数] 说明要执行的是什么操作 操作对象,可以有0个、1个或2个

  5. 指令的基本构成 • 示例 • 目的操作数和源操作数均可采用不同的寻址方式,但两个操作数的类型要一致。 MOV AX , BX 操作码 操作数 ADD AX,[SI+6] INC [BX] HLT

  6. 操作数 • 8088/8086的操作数分为3类 • 立即数 立即数只能用作源操作数,如 MOV AX,0FA00H ;正确 MOV 8000H,DX ;错误

  7. 操作数 • 8088/8086的操作数分为3类 • 寄存器操作数 • 放在8个通用寄存器和4个段寄存器中的操作数 段寄存器存放当前操作数的段基地址 不允许将立即数传送到段寄存器 只能存放字/双字操作数

  8. 操作数 • 8088/8086的操作数分为3类 • 存储器操作数 类型 存储单元个数 字节 字 双字 1 2 4 存储器操作数 一般不允许两个操作数同时为存储器操作数

  9. 实模式寻址方式 • 存储单元的物理地址 = 段基地址 + 偏移地址 • 若指令中没有指明所涉及的段寄存器,CPU就采用默认的段寄存器来确定操作数所在的段 • 存储器操作数的偏移地址(也称有效地址)可以通过不同的寻址方式由指令给出 例如,若(BX)=2000H, (SI)=0A00H, (DI)=2A00H,则以下指令的结果是一样的: MOV AL, [2A00H] MOV AL, [BX+0A00H] MOV AL, [BX][SI] MOV AL, [DI]

  10. 数据寻址模式(Data-Addressing Modes) • 寄存器寻址(register addressing) • 立即寻址(immediate addressing) • 存储器寻址 • 直接寻址(direct addressing) • 寄存器间接寻址(register indirect addressing) • 基址加变址寻址 (base-plus-index addressing) • 寄存器相对寻址(Register relative Addressing) • 相对基址变址寻址(base relative-plus-index addressing) • 比例变址寻址(scaled-index addressing) • I/O寻址

  11. 寄存器寻址(register addressing) • 操作数放在某个寄存器中,源操作数与目的操作数字长要相同 • 寄存器寻址与段地址无关 • 操作数在寄存器中,指令中源操作数和目的操作数都可用这种寻址方式 • 例: MOV AX, BX MOV CL, AL 错误例: ×MOV AX, BL ; 字长不同 × MOV ES: AX, DX ; 寄存器与段无关

  12. 立即寻址(immediate addressing) • 操作数(为一常数)就在指令中,紧跟在操作码后面,作为指令一部分存放在内存的代码段中 • (此操作数称为立即数) • 立即寻址只能用于源操作数 • 例: MOV AX, 1C8FH MOV BYTE PTR[2A00H], 8FH MOV EAX,234H 错误例: × MOV 2A00H, AX ; 错误!

  13. 存储器寻址 • 有效地址(EA, Effective Address) • 当操作数在内存中时,指令的地址码(操作码)给出所访问的内存单元的逻辑地址。 • 在寻址方式中,逻辑地址的形成是由多个分量组合而成,该组合地址又叫有效地址

  14. 直接寻址(direct addressing) • 当指令中的源操作数或目的操作数,采用直接给出被访问内存单元的逻辑地址时,这种寻址方式称直接寻址 • 默认的段寄存器为DS,但也可以显式地指定其他段寄存器——称为段超越前缀 • 偏移地址也可用符号地址来表示,如ADDR、VAR • 例: MOV AX , [2A00H] MOV DX , ES: [2A00H] MOV SI , TABLE_PTR

  15. 寄存器间接寻址(register indirect addressing) • 内存单元的逻辑偏移地址通过寄存器间接给出 MOV DX , [SI] MOV WORD PTR [ECX],12 MOV DWORD PTR [ESI],2345H

  16. 基址加变址寻址(base-plus-index addressing) • 类似于间接寻址,采用两个寄存器进行寻址 • EA经常采用几个基址寄存器(BX, BP)和一个变址寄存器(SI, DI)组合而成 • 对高端CPU,允许除ESP外的任意两个寄存器组合成EA • 例: MOV CX, [BX+DI] MOV CH , [BP+SI] MOV [BX+SI], SP MOV [EAX+EBX], ECX

  17. 基址变址寻址(base-plus-index addressing)

  18. 寄存器相对寻址(Register relative Addressing) • 这种寻址方式中提出位移量的概念,即在寄存器间接寻址给出的偏移地址上,加一相对位移量。 • 位移量是一带符号的16位16进制数。 • 类似于基址加变址寻址和位移量寻址,通常为一个寄存器 • 例 MOV LIST [SI+2], CL MOV DI, SET_IT[BX] MOV DI, [EAX+10H] MOV ARRAY[EBX], EAX

  19. 寄存器相对寻址(Register relative Addressing)

  20. 相对基址变址寻址(base relative-plus-index addressing) • 它的EA是由三部分组成的,基址寄存器BX或BP的内容加上变址寄存器的内容再加相对位移量。 • 物理地址由基址寄存器按规则选择段寄存器,也可以使用段超越。 • 至少有两个寄存器 • 例: MOV AX, FILE[BX+DI] MOV AX , 8AH[BX][SI] 该例中EA=8AH+(BX)+(SI) 物理地址=(DS)×10H+8AH+(BX)+(SI)

  21. 相对基址变址寻址(base relative-plus-index addressing)

  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 ARRAY[4*ECX],EBX ADD AL,[EBP+2*EDI-2]

  23. 程序存储器寻址模式( Program Memory - Addressing Modes) • 用于JMP和CALL指令 • 有三种寻址模式 • 直接程序存储器寻址(Direct Program Memory Addressing) • 相对程序存储器寻址(Relative Program Memory Addressing) • 间接程序存储器寻址(Indirect Program Memory Addressing)

  24. 直接程序存储器寻址 • 指令地址和操作码一同存储 • 如 JMP 10000H,通常指令地址为标号地址 • 两种指令 • 段间转移——远转移(far jump) • 实模式,可以转移到1MB内任意单元 • 保护模式,可以转移到4GB内任意单元 • 段间调用——远CALL • Figure 3-14

  25. 相对程序存储器寻址 • 相对于指令指针(IP) • 指明一个相对偏移量(1个、2个或4个字节),可正可负,使用时与IP相加 • 1个字节,短转移。范围-128~+127 • 2个字节,近转移或者调用。范围±32K • 4个字节, ±2G (32位) • Figure 3-15

  26. 间接程序存储器寻址 • 间接意味着有寄存器参与 • 可以是任何16位寄存器(AX,BX,CX,DX,SP,BP,SI,DI) • 对386以上,还可以是32位寄存器 • 或任何相对寄存器([BP],[BX],[SI],[DI]) • 或任何带位移量的相对寄存器 • 例 JMP AX JMP NEAR PTR[BX] JMP NEAR PTR[DI+2] JMP TABLE[BX] JMP ECX • Example 3-14

  27. 堆栈寻址模式 • 堆栈在微处理器中至关重要 • 暂时存放数据 • 为程序保存返回地址 • 堆栈 • LIFO(Last-In First-Out)存储区 • PUSH类指令将数据/指令压入堆栈 • POP类指令将数据/指令弹出堆栈 • 存储区由两个寄存器维护 • 堆栈指针(SP) • 堆栈段寄存器(SS)

  28. 堆栈寻址模式 • 操作模式 • SP/ESP总是指向位于堆栈段的存储区域 • PUSH/POP总是以字/双字操作的。 • 压入数据/指令(以PUSH AX为例) • AX高8位即AH中数据放入SP-1寻址单元 • AX低8位即AL中数据放入SP-2寻址单元 • SP  SP-2 • 弹出数据/指令(以POP AX为例) • SP寻址单元中数据弹出到AX低8位AL中 • SP+1寻址单元中数据弹出到AX高8位AH中 • SP  SP+2

  29. 堆栈寻址模式

  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 DB5 dup(?) INFO ENDS NAME1 INFO <`Bob Smith`, `123 Main Street`, `Wanda`, `OH`, `44444`> NAME1 INFO <`Steve Doe`, `222 Moose Lane`, `Miller`, `PA`, `18100`>

  31. Homework • 第一部分 • 8,9,21,27,30,31,33

More Related