【16位微机原理、汇编语言及接口技术教程(钱晓捷)】8088/8086的寄存器结构与存储器结构
写在前面:本来挺害怕这些偏硬件的东西,觉得里面挺复杂,但今天下午沉下心来重新再去看这些时,发现也不是很难,总线什么的在计组里都有了,在这就不说了,专门将寄存器和存储器的知识点总结了下,这是以后学习汇编语言的一个基础,对于寻址方式和指令,我也会抽时间整理出来,整理的过程真的是受益匪浅,也希望我整理的知识点对大家有帮助。
文章的大纲如下图:
文章目录
- 1. 8088CPU有20条地址线
- 2.8088CPU将1MB空间分成许多逻辑段(Segment)
- 3.物理地址和逻辑地址
- 4.物理地址和逻辑地址的转换
- 5.段寄存器
- 5.1 8088有4个16位段寄存器
- 5.2 如何分配各个逻辑段
- 5.3 段超越前缀指令
标准ASCLL码及其字符(方便记忆)
- 几个典型ASCLL码
ASCLL码 | 字符 |
---|---|
0AH | LF(换行) |
0DH | CR(回车) |
30H | 0 |
39H | 9 |
41H | A |
5AH | Z |
61H | a |
7AH | z |
8088/8086寄存器结构
1. 通用寄存器(8个16位)
- 数据寄存器(4个16位,可分为8个八位)
15-8位 | 7-0位 | 16位寄存器名 |
---|---|---|
AH | AL | AX 累加器 |
BH | BL | BX 基址寄存器 |
CH | CL | CX 计数器 |
DH | DL | DX 数据寄存器 |
- 变址寄存器(2个)
SI | 源地址寄存器 |
---|---|
DI | 目的地址寄存器 |
- 指针寄存器(2个)
BP | 基址指针 |
---|---|
SP | 堆栈指针 |
2.标志寄存器
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
CF | PF | AF | ZF | SF | TF | IF | DF | OF |
状态标志
- CF-进位标志。当加减运算结果的最高有效位有进位(加法)或借位(减法)时,进位标志为1,即CF=1;否则CF=0;
- ZF 零标志。若运算结果为零,ZF=1,否则ZF=0。
- SF 符号标志。运算结果的最高有效位就是符号标志的状态。即:运算结果最高位是1,则SF=1;否则为0;
- PF 奇偶标志。当运算结果最低字节中“1”的个数为零或偶数时,PF=1;否则PF=0。注意,PF仅反映的是低八位中“1”的个数是偶数还是奇数,即使是16位操作数也是如此。
- OF 溢出标志。若算术运算的结果有溢出,则OF=1;否则OF=0。
控制标志
- DF----方向标志。用于串操作指令中,以控制地址的变化方向;当DF=1时,每次串操作后的地址就自动减小;当DF=0时,每次串操作后的地址就自动增加。
- IF----中断允许标志。该标志用于控制外部可屏蔽中断是否可以被处理器响应。若IF=1,则允许中断,若IF=0,则不允许中断。
- 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指明附加段的起始地址
5.2 如何分配各个逻辑段附加段寄存器ES
附加段是附加的数据段,也保存数据:
附加段寄存器ES存放附加段的段地址
各种主存寻址方式(有效地址EA)得到存储器中操作数的偏移地址
处理器利用ES:EA存取附加段中的数据
串操作指令将附加段作为其目的操作数的存放区域
- 程序的指令序列必须安排在代码段
- 程序使用的堆栈一定在堆栈段
- 程序中的数据默认是安排在数据段,也经常安排在附加段,尤其是串操作的目的区必须是附加段
- 数据的存放比较灵活,实际上可以存放在任何一种逻辑段中
没有指明时,一般的数据访问在DS段;使用BP访问主存,则在SS段
默认的情况允许改变,需要使用段超越前缀指令;8088指令系统中有4个:
- CS: ;代码段超越,使用代码段的数据
- SS: ;堆栈段超越,使用堆栈段的数据
- DS: ;数据段超越,使用数据段的数据
- ES: ;附加段超越,使用附加段的数据
- 点赞 5
- 收藏
- 分享
- 文章举报
- 在win10 64位的电脑学习《16/32微机原理、汇编语言及接口技术教程》(钱晓捷)的汇编语言——环境配置教程
- 微机原理与接口技术之8086的编程结构
- 汇编语言与C语言的接口技术
- 8086汇编语言自学经验分享 使用R命令修改寄存器的值
- Intel 8086/8088 CPU 寄存器结构
- 汇编语言入门教程(堆、栈、寄存器和内存模型)
- 汇编语言学习00_计算机系统的硬件结构、8086cpu结构
- 8086汇编语言自学经验分享 用jmp命令修改IP寄存器的值
- 汇编语言与C语言的接口技术
- 汇编语言基础教程-寄存器
- 汇编语言:基于8088/8086
- 汇编语言 8086/8088指令系统
- 16位汇编语言寄存器及指令整理
- 8086汇编语言自学经验分享 将指定段内的内存单元存到寄存器中
- 8086汇编语言自学经验分享 除数16位的DIV指令
- 8086汇编语言自学经验分享 mul word ptr 指令示例16位乘以16位
- 怎样才能更好的学习计算机--微机原理与接口(含汇编语言)???
- ARM体系结构及接口技术-01ARM基础(ARM基本概念,工作模式,寄存器功能)
- 16位汇编语言第二讲系统调用原理,以及各个寄存器详解
- 01-汇编-8086/8088CPU内部结构