您的位置:首页 > 其它

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

2020-02-08 04:50 393 查看

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

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

文章目录

  • 8088/8086的存储器结构
  • 存储器的分段管理
  • 标准ASCLL码及其字符(方便记忆)

    1. 几个典型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
    状态标志
    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: ;附加段超越,使用附加段的数据
    • 点赞 5
    • 收藏
    • 分享
    • 文章举报
    @淡泊明志 发布了9 篇原创文章 · 获赞 8 · 访问量 666 私信 关注
    内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
    标签: