当前位置:文档之家› 汇编语言 寻址方式及堆栈

汇编语言 寻址方式及堆栈

PUSH SCR


(SP) – 2 → SP;
SCR → (SP).
8086汇编语言程序设计
34
出栈(习惯上又叫弹出)
POP
① ②
DEST
((SP)) → SCR; (SP) + 2 → SP.
问题:堆栈操作的寻址方式是什么?
8086汇编语言程序设计
35
本章小结:
① 寻址方式是本节的重点。注意区分:
先看一例子:
MOV AX, 201H
这条指令将 16 进制数 201 送入寄存器 AX。
存放结果的 AX 的寻址方式是“寄存器寻址”,而
后面的 201H 是一个常数,它是随指令从代码段来
的。由于这类操作数就在指令中,“立即”可以参
与运算,故称作“立即数寻址方式”。因立即数伴
随指令在代码段中,所以这种寻址也应属存储器寻
立即数寻址和直接寻址;
寄存器寻址和寄存器间接寻址。
② 堆栈是按“后进先出”机制存取数据的有特 殊功用的存储器组织;堆栈的结构完全是由 SS 和 SP 的初值决定的。 本章习题 本章参考
第五章 第 1、12 题 汇编语言教程.chm
8086汇编语言程序设计 36
被成为“地址指针寄存器”,具备“准指针”的功
8086汇编语言程序设计 能。 15
③ 变址寻址和基址寻址(寄存器相对寻址)
某地址指针寄存器的内容和指令中给出的位
移量之和形成有效地址的寻址方式。它是直接寻
址方式和寄存器间接寻址方式的一种组合,请看
例子:
MOV AL,[BX+20H]
ADD
AL,10[SI]
用于指定低四位为零的存储单元作为段的起点;
16 位段内偏移量确定段内具体单元,段内管理
64K 的存储空间;
段寄存器的内容即段基址的高 16 位和段内偏移
量合称为逻辑地址:
段基址的高 16 位 :段内偏移量
8086汇编语言程序设计 24
③ 8088/8086 CPU 按代码段、数据段、堆栈段、
8086汇编语言程序设计
30
3.2.2 8086 的堆栈
存储器 00000H
① 堆栈的组织
SS
TOP由SP指向
堆栈
BOTTOM
8086汇编语言程序设计
31
堆栈是由 SS 的内容为起点的一段存储区; SP 指向栈顶; 以字为单位进行存取; 当堆栈初始化或为空时,SP 的值是堆栈段的实 际长度,SP 指向栈底之下的第二个字节; 栈的最大空间是 64KB,栈的最大深度是 32K; 入栈的字,低字节存放在 SP 所指的单元,高字
串操作寻址和 I/O 寻址以后介绍。
8086汇编语言程序设计
22
物理地址、段、逻辑地址和寻址方式小结: ① 物理地址是地址信号和译码逻辑对存储单元的 唯一指定,本质上是组合逻辑电路的一种应用:
地址 译码 逻辑 CPU 地址总线 数据总线 内存
译码寻址方式
8086汇编语言程序设计 23
② 8088/8086寻址(或管理)1M的存储空间是通 过段来实现的: 段寄存器的内容存放和提供段基址的高 16 位,
8086汇编语言程序设计 9
偏移量或有效地址的形成: 偏移量=位移量+基地址+变址量 上述三个分量的不同组合,演绎出存储器寻
址的各种方式。
① 直接寻址
是在指令中直接给出操作数地址偏移量的寻
址方式。比如把 200H 单元的内容送入AL:
MOV AL, [200H]
8086汇编语言程序设计 10
8086汇编语言程序设计
本章要点
寻址方式的概念和基本分类;
7 种寻址方式及“两对”寻址方式的区别;
寻址方式与常量、变量和指针的关系;
堆栈概念、结构元素和操作指令。
8086汇编语言程序设计
1
第三章 寻址方式及堆栈
CPU 访问内存的两个目的: ①读取指令;②存取数据。 CPU 访问内存的三种方式: ① 控制器自动取指循环; ② 程序控制方式访问数据段; ③ 堆栈方式。
相对寻址”。
8086汇编语言程序设计
18
④ 相对基址变址寻址 有效地址是基址寄存器的内容、变址寄存器的 内容和指令中给出的位移量之和,如: MOV AL, 20H[BX][SI] MOV AH,80[BS][DI] MOV DX,100H[BX][DI] 20H[BX][SI] 也可以写成 [20H+BX+SI]。这种
8086汇编语言程序设计 2
3.1 寻址方式 一条汇编指令语句包含操作码和操作数两种
信息,有些像自然文字的谓语和宾语:
操作码 操作数或操作数的地址
操作码字段为指令,描述语句的功能;
操作数字段描述操作数或操作数的来源和去向;
CPU 获得操作数的方式叫作寻址方式。
8086汇编语言程序设计 3
三类寻址方式的特点:
的特例。比如:
MOV AL, [100H+BX+SI]
去掉其中任一个或二个分量就会是某种其他寻址
方式。
8086汇编语言程序设计 21
3.1.4 寻址方式与常量、变量及“准指针”
① 立即数寻址方式对应汇编语言的常量;
② 存储器寻址方式对应汇编语言的变量;
③ 在各种地址指针寄存器参与的存储器寻址方式
中,地址指理:
代码段:CS : IP;
堆栈段:SS : SP;
数据段:DS : 位移量+基址量+变址量
8086汇编语言程序设计
25
④ 寻址方式
寄存器寻址方式(访问 CPU 完成数据处理的接
口,按“直呼其名”的方式进行);
立即数寻址方式(伴随指令序列来自于代码段的
常量);
8086汇编语言程序设计 址。 7
8086汇编语言程序设计
8
3.1.3 存储器寻址
存储器寻址必然涉及段,即最终要以逻辑地址
段基址:偏移量 形成物理地址。由于在大多数使用场合地址指
针的段基址是“现成的”和隐含的,所以本小节讨
论的重点是“有效地址”——偏移量的问题。 偏移量是某存储单元和段基址间的距离,又被 称作有效地址。
27
3.2 堆栈 堆栈是由 CPU 控制的按“后进先出”顺序
存取数据的存储结构,用于暂存子程序调用、中
断断点的信息和数据。堆栈的用途在这里只作一
点说明,只有在学习了子程序调用、中断断点的
保护等才会知道为什么要使用堆栈这种特殊的存
储结构。本节的重点是:堆栈的结构元素和操作
指令。
8086汇编语言程序设计
11
注意直接寻址和立即数寻址方式区别:方括 号里的数字是操作数的有效地址,[200H]表示该 单元的内容。
显然,直接寻址方式是非常直观的存储器寻
址方式,但不方便处理整块的数据。 ② 寄存器间接寻址 寄存器的内容是某存储单元的有效地址,以 这种方式寻址就叫作寄存器间接寻址。
8086汇编语言程序设计 12
28
3.2.1 堆栈的构造
0H 存储器
TOP由SP指向 堆栈
BOTTOM
8086汇编语言程序设计
29
堆栈是在存储器中划出的一个部分;
地址最高的字单元叫作“栈底(Bottom)”;
入栈的数据从栈底开始逐个向地址低端存入;
用堆栈指针 SP 指向最后入栈的数据,习惯上 把 SP 所指的位置叫作“栈顶(Top)”; 数据是按 SP 的指向出入堆栈,从而实现了 “后进先出”的存取机制的。
数据段寻址是三种偏移分量的组合:
位移量+基址量+变址量
8086汇编语言程序设计 26
⑤ 寻址方式与常量、变量及指针的关系: 立即数寻址方式对应汇编语言的常量; 存储器寻址方式对应汇编语言的变量; 在各种地址指针寄存器参与的存储器寻址方式 中,地址指针寄存器充当“准指针”的角色。
8086汇编语言程序设计
寄存器寻址:存取数据在 CPU 内部进行,故 速度最快;寄存器数量很少,寻址方式简单; 存储器寻址:为便于组织串、数组等数据结构 复杂的数据处理,必须有更灵活、也就相对复杂 的寻址方式,是本节的重点;
I/O端口寻址:I/O端口的任务是实现计算机核
心和外界的数据交换,故寻址方式也相对简单。
8086汇编语言程序设计
14
两者的书写形式也不同,寄存器间接寻址时将
用作间接寻址的寄存器用方括号括起来。
能用作存储器间接寻址的有下述地址指针寄存
器:
BX, SI, DI, BP
显然,连续将上述寄存器的内容增一或减一,
可方面地处理数据块,如处理一维数据或字符串,
高精度数字运算等。可参与存储器寻址的寄存器又
如要将 200H 单元的内容送入 AL,使用寄存 器间接寻址需要这样: MOV BX, 200H
MOV
AL,[BX]
所谓“间接” 就是操作数的取得是通过寄存
器间接获得的。应注意寄存器间接寻址方式和寄
存器寻址相区别:后者在意的目标的是寄存器的
内容,而前者是寄存器的内容作为偏移量的存储
单元的内容。
8086汇编语言程序设计 13
8086汇编语言程序设计 4
3.1.1 寄存器寻址 当需要处理寄存器中的数据或将处理结果存 入寄存器的时,使用“寄存器寻址”;在汇编语 言中直接以寄存器名对寄存器寻址:
MOV DS, AX
意即将 AX 的内容送入数据段寄存器 DS。
8086汇编语言程序设计
5
8086汇编语言程序设计
6
3.1.2 立即数寻址
寻址方式能比较方便地处理二维数组等更复杂的
结构数据。
8086汇编语言程序设计 19
8086汇编语言程序设计
20
由于基于 BP 的基址变址寻址的隐含段寄存器是
相关主题