【16位微机原理、汇编语言及接口技术教程(钱晓捷)】8088/8086的寄存器结构与存储器结构

写在前面:本来挺害怕这些偏硬件的东西,觉得里面挺复杂,但今天下午沉下心来重新再去看这些时,发现也不是很难,总线什么的在计组里都有了,在这就不说了,专门将寄存器和存储器的知识点总结了下,这是以后学习汇编语言的一个基础,对于寻址方式和指令,我也会抽时间整理出来,整理的过程真的是受益匪浅,也希望我整理的知识点对大家有帮助。
文章的大纲如下图:

微处理器的内部结构
8088/8086的寄存器结构
8088/8086的存储器结构
通用寄存器
标志寄存器

标准ASCLL码及其字符(方便记忆)

  1. 几个典型ASCLL码
ASCLL码字符
0AHLF(换行)
0DHCR(回车)
30H0
39H9
41HA
5AHZ
61Ha
7AHz

8088/8086寄存器结构

在这里插入图片描述

1. 通用寄存器(8个16位)
  • 数据寄存器(4个16位,可分为8个八位)
15-8位7-0位16位寄存器名
AHALAX 累加器
BHBLBX 基址寄存器
CHCLCX 计数器
DHDLDX 数据寄存器
  • 变址寄存器(2个)
SI源地址寄存器
DI目的地址寄存器
  • 指针寄存器(2个)
BP基址指针
SP堆栈指针
2.标志寄存器
0123456789101112131415
CFPFAFZFSFTFIFDFOF
状态标志
  1. CF-进位标志。当加减运算结果的最高有效位有进位(加法)或借位(减法)时,进位标志为1,即CF=1;否则CF=0;
  2. ZF 零标志。若运算结果为零,ZF=1,否则ZF=0。
  3. SF 符号标志。运算结果的最高有效位就是符号标志的状态。即:运算结果最高位是1,则SF=1;否则为0;
  4. PF 奇偶标志。当运算结果最低字节中“1”的个数为零或偶数时,PF=1;否则PF=0。注意,PF仅反映的是低八位中“1”的个数是偶数还是奇数,即使是16位操作数也是如此。
  5. OF 溢出标志。若算术运算的结果有溢出,则OF=1;否则OF=0。
控制标志
  1. DF----方向标志。用于串操作指令中,以控制地址的变化方向;当DF=1时,每次串操作后的地址就自动减小;当DF=0时,每次串操作后的地址就自动增加。
  2. IF----中断允许标志。该标志用于控制外部可屏蔽中断是否可以被处理器响应。若IF=1,则允许中断,若IF=0,则不允许中断。
  3. TF—陷阱标志。该标志控制处理器是否进入单步操作方式。若TF=1,则允许中断;若TF=0,则禁止中断。

8088/8086的存储器结构

1.数据的存储格式
1.1信息存储单位
* 二进制位Bit:存储一位二进制数:0或1
* 字节Byte:8个二进制位,D7~D0
* 字Word:16位,2个字节,D15~D0
* 双字DWord:32位,4个字节,D31~D0

存储器中以字节位单位存储信息。
为了区别每个字节单元,将它们编号,称为存储器地址。地址编号从0开始,顺序加1,是一个无符号的二进制整数,常用十六进制数表示,如下图?:
在这里插入图片描述

1.2 存储单元及其存储内容
  • 存储地址:存储单元的编号,如上图的0000H、0001H
  • 每个存储单元存放一个字节(8位)的内容。
  • 表达:地址为0002H存储单元存放有一个数据34H,表达为 [0002H]=34H
1.3 多字节数据存放方式

1. 多字节数据在存储器中占连续的多个存储单元:
存放时,低字节存入低地址,高字节存入高地址;
表达时,用它的低地址表示多字节数据占据的地址空间。
2.举例
在上图中:
0002H“字”单元的内容为:
[0002H] = 1234H
0002H号“双字”单元的内容为:
[0002H] = 78561234H

1.4 数据的地址对齐

1.同一个存储器地址可以是字节单元地址、字单元地址、双字单元地址等等
2.字节单元的地址可以任意单元安排在偶地址(xxx0B)、双字单元安排在模4地址(xx00B)等,为“地址对齐(Align)”(N字节数据安排的起始地址能够被N整除)
后果:对于不对齐地址的数据,处理器访问时,需要额外的访问存储器时间,应该将数据的地址对齐,以取得较高的存取速度。

存储器的分段管理

1. 8088CPU有20条地址线
  • 最大可寻址空间为220=1MB
  • 物理地址范围从00000H~FFFFFH
2.8088CPU将1MB空间分成许多逻辑段(Segment)
  • 每个段最大限制为64KB
  • 段地址的低4位为0000B

这样,一个存储单元除具有一个唯一的物理地址外,还具有多个逻辑地址

3.物理地址和逻辑地址
  • 8088CPU存储系统中,对应每个物理存储单元都有一个唯一的20位编号,就是物理地址,从00000H ~ FFFFFH

  • 分段后在用户编程时,采用逻辑地址,形式为:段基地址 : 段内偏移地址

  • 举例:
    物理地址 14700H
    逻辑地址 1460H:100H

  • 段基地址说明逻辑段在主存中的起始位置,简称段地址。
    **注:**8088规定段地址必须是模16地址:xxxx0H,省略低4位0000B,段地址就可以用16位数据表示,就能用16位段寄存器表达段地址。

  • 段内偏移地址说明主存单元距离段起始位置的偏移量。 每段不超过64KB,偏移地址也可用16位数据表示。

4.物理地址和逻辑地址的转换

1. 逻辑地址转换为物理地址的方法?
将逻辑地址中的段地址左移4位(对应十六进制是一位),加上偏移地址就得到20位物理地址
2. 物理地址可以转换多个逻辑地址,举例:
物理地址为:14700H时,逻辑地址可以为:1460H:0100H、1380H:0F00H
1460H左移4位成为14600H,14600H+0100H=14700H

5.段寄存器
5.1 8088有4个16位段寄存器
  • CS指明代码段的起始地址

代码段寄存器CS
代码段用来存放程序的指令序列
代码段寄存器CS存放代码段的段地址
指令指针寄存器IP指示下条指令的偏移地址
处理器利用CS:IP取得下一条要执行的指令

  • SS指明堆栈段的起始地址

堆栈段寄存器SS
堆栈段确定堆栈所在的主存区域
堆栈段寄存器SS存放堆栈段的段地址
堆栈指针寄存器SP指示堆栈栈顶的偏移地址
处理器利用SS:SP操作堆栈顶的数据

  • DS指明数据段的起始地址

数据段寄存器DS
数据段存放运行程序所用的数据
数据段寄存器DS存放数据段的段地址
各种主存寻址方式(有效地址EA)得到存储器中操作数的偏移地址
处理器利用DS:EA存取数据段中的数据

  • ES指明附加段的起始地址

附加段寄存器ES
附加段是附加的数据段,也保存数据:
附加段寄存器ES存放附加段的段地址
各种主存寻址方式(有效地址EA)得到存储器中操作数的偏移地址
处理器利用ES:EA存取附加段中的数据
串操作指令将附加段作为其目的操作数的存放区域

5.2 如何分配各个逻辑段
  1. 程序的指令序列必须安排在代码段
  2. 程序使用的堆栈一定在堆栈段
  3. 程序中的数据默认是安排在数据段,也经常安排在附加段,尤其是串操作的目的区必须是附加段
  4. 数据的存放比较灵活,实际上可以存放在任何一种逻辑段中
5.3 段超越前缀指令

没有指明时,一般的数据访问在DS段;使用BP访问主存,则在SS段
默认的情况允许改变,需要使用段超越前缀指令;8088指令系统中有4个:

  1. CS: ;代码段超越,使用代码段的数据
  2. SS: ;堆栈段超越,使用堆栈段的数据
  3. DS: ;数据段超越,使用数据段的数据
  4. ES: ;附加段超越,使用附加段的数据
  • 8
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

下次一定少写BUG

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值