汇编课程——8086微处理器

2.1.1 Intel 8086 CPU内部结构

  • 功能上,包括运算器控制器两大部件
    • 运算器:负责所拥有的算术逻辑
    • 控制器:负责维系系统的所有控制功能
  • 结构上,包括执行单元EU总线接口单元BIU两个模块
    • 执行单元EU:包括指令译码部件、ALU和通用寄存器组,负责指令译码和执行
    • 总线接口单BIU:包括总线控制逻辑和专用的寄存器,负责CPU与外界的通信联络

1.执行部件EU(Execution Unit)

  • 功能
    • 负责所有指令的译码和执行
    • (1)获取指令代码,译码后产生控制信号
    • (2)进行算术和逻辑运算,并根据运算结果修改标志寄存器状态位状态
    • (3)位BIU提供需要传送的数据16位有效地址
  • 组成
    • 寄存器组
    • 算术逻辑单元ALU
    • EU控制部件

算术逻辑单元ALU

  • 16位的运算器,负责所有的指令执行期间的运算
    • 算术运算:加、减、乘、除
    • 逻辑运算:与、或、非、异或
  • 8086CPU的ALU可完成8位、16位数据的运算
  • 计算指令执行时所需要的存储单元的有效地址
    • 针对相对寻址、基址加变址寻址、相对基址加变址寻址,这三种寻址方式而言

EU控制部件

  • 功能
    • 负责从BIU的指令列队中取出指令
    • 对指令操作码进行译码分析
    • 按照工作时序向相关的部件发送相应的控制信号
  • 组成
    • 指令寄存器、指令译码器
    • 时序控制部件
    • 微操作控制部件

2.总线接口部件BIU(Bus Interface Unit)

  • 功能
    • 负责CPU所有的访问操作
      • 段式方式访问主存;直接译码的方式访问I/O端口
    • (1)从主存中读取指令
    • (2)计算并形成所要访问主存的物理地址
    • (3)访问主存、访问I/O,以获取数据或保存结果
  • 组成
    • 段寄存器和指令指针寄存器等
    • 地址加法器
    • 指令队列缓冲器
    • 总线控制逻辑

指令队列缓冲器

  • 功能
    • 存放预取的指令,共6字节容量
    • 8088CPU的指令列队缓冲器为4字节容量
  • 使用规则
    • 先进先出,按顺序送入EU执行
    • 提供EU执行的所有指令
  • 工作过程
    • 顺序执行程序时,有空闲即自动取指
    • 程序发生转移时,清除缓冲器内容,重新获取指令

总结:分段管理模式下的访存

  • CPU要访问存储器必须提供物理地址
    • 一般使用段寄存器指针寄存器来共同表示逻辑地址
    • 在CPU内部由地址加法器完成运算,转换成物理地址输出访问主存储器
  • 代码段段寄存器CS——指针寄存器为IP
  • 数据段段寄存器DS——指针寄存器一般用BX、SI、DI
  • 附加段段寄存器ES——指针寄存器一般用DI(字符串操作)
  • 堆栈段段寄存器SS——指针寄存器SP指向栈顶,指针寄存器BP指向栈内任意位置

地址加法器

  • 功能
    • 形成16位系统的20位主存地址
  • 取指令
    • PA=(CS)*16+IP
  • 取数据
    • PA=(DS/SS/ES)*16+有效地址
  • 访问I/O端口时不需进行运算

指针寄存器

  • 指针寄存器
    • 其值可作为存储单元地址,用于指令或CPU内部执行时寻址使用的寄存器
    • 其值改变,所寻址到得存储单元也会不同,因此形象地称之为指针
  • 汇编语言程序中,凡是和地址有关的都可以认为是指针
    • 寄存器、立即数、变量、标号…
    • 能够标示一个存储单元地址,用于寻址

2.1.2 Intel 8086内部寄存器

  • CPU中为什么要使用寄存器
    • 寄存器比存储器存取速度快
    • 使用灵活(如暂存运算中的中间数据)、控制方便(如IP)
  • 寄存器的分类
    • 通用寄存器:传送和暂存数据;参与算术逻辑运算并保存运算结果
    • 段寄存器:保存段地址,用于寻址时构成物理地址
    • 专用寄存器:CPU运行时的辅助工具(编程时用到前两个)

通用寄存器

  • 数据寄存器:
    • AX累加器:常作隐含操作数,可通用
    • BX基地址寄存器:常作地址指针,可通用
    • CX计数器:常存放计数值,可通用
    • DX数据寄存器:常与累加器配合,可通用
  • 变址寄存器:
    • SI源变址寄存器:保存源操作数地址
    • DI目的变址寄存器:保存目的操作数地址
  • 堆栈指针寄存器:
    • SP栈顶指针:只能保存堆栈栈顶地址
    • BP堆栈指针:可保存堆栈任意位置地址

累加器AX

  • 16位寄存器可以存储2个字节的数据;
    • 例如:数值2008H存放于AX累加器中。
  • AX可分做两个8位寄存器使用,分别为AH和AL。
    • 例如:(AX)=2008H,则(AH)=20H,(AL)=08H;
  • BX、CX、DX类似。

数据寄存器AX,BX,CX和DX

  • 16位寄存器
    • 高低8位可分为两个独立寄存器使用;
  • 主要用于暂存指令执行过程中的数据;
  • 特殊用途:
    • AX:累加器,ALU运算核心部件、某些指令的默认寄存器;
    • BX:基址寄存器,存放存储单元的有效地址;
    • CX:计数器,串操作指令和循环指令中的默认计数器;
    • DX:与AX合用保存32位数据;I/O指令中存放端口地址。

变址寄存器SI、DI

  • 16位寄存器:
    • 常作为指针,存放存储单元有效地址,也可暂存数据;
  • 特殊用法:
    • SI、DI中保存的地址信息可以随着指令的执行而自动改变;
    • SI:源变址寄存器,串操作中存放源串地址,默认DS段;
    • DI:目的变址寄存器,串操作中存放目的串地址,默认ES段;
    • 该特殊用法只在字符串操作中有效,其他场合下作一般的指针寄存器使用。

堆栈指针寄存器SP 、BP

  • 堆栈是一个先进后出的数据结构,栈底位置不变;
  • 栈顶指针SP
    • 其中始终存放栈顶单元的有效地址;
    • 其值是由出入栈指令自动更改的,一般不允许随意对该寄存器赋值;
  • 堆栈指针BP
    • 其中数据一般作为地址进行访存;
    • 默认对应于SS段,可寻址堆栈中的任何单元。

段寄存器(16位)

  • CS:代码段段寄存器;存放代码段段地址
  • DS:数据段段寄存器;存放数据段段地址
  • ES:附加段段寄存器;存放附加段段地址
  • SS;堆栈段段寄存器;存放堆栈段段地址
  • 一段汇编语言程序至少有一个逻辑段——代码段,用于存放代码;
  • 一段汇编语言程序最多有4个逻辑段——1个代码段,3个数据段,分别用于存放代码和数据;

CS(Code Segment)

  • 代码段
  • 用来存放要执行的指令序列
  • 段首地址用代码段寄存器CS来保存
  • 指令指针寄存器IP指示本段中的地址;
    • 将要执行的下条指令的有效地址;
  • CPU利用CS:IP形成存储单元的物理地址,以获取下条要执行指令的代码。

DS(Data Segment)

  • 数据段
  • 用来存放程序运行所需要的数据;
  • 段首地址用数据段寄存器DS来保存;
  • CPU利用DS:EA形成存储单元的物理地址,以获取数据段中的数据;
    • EA的形成方式详见第3章寻址方式的介绍。

ES(Extra Segment)

  • 附加段
  • 即附加的数据段,保存程序运行所需要的数据;
  • 段首地址用附加段寄存器ES来保存;
  • CPU利用ES:EA形成存储单元的物理地址,以获取附加段中的数据;
  • 串操作指令常将附加段ES作为目的操作数的存放区域。

SS(Stack Segment)

  • 堆栈
  • 用于存储程序运行中需要临时保护的数据;
  • 段首地址用堆栈段寄存器SS来保存;
  • 堆栈指针寄存器SP保存堆栈栈顶的有效地址;
  • CPU利用SS:SP对堆栈栈顶单元进行操作;
  • 利用SS:BP对堆栈中的任一单元进行操作。

16位标志寄存器

  • 仅用到其中9位,且按位使用;
    • 6位状态标志位:反映ALU的执行状态;
      • 按照ALU指令执行的结果设置各状态标志位;
    • 3位控制标志位:控制CPU的某些功能。

常用的状态标志位

  • 进位标志位CF
    • 运算结果有进位或借位时,CF=1,否则CF=0;
  • 溢出标志位OF
    • 运算结果超出了数据表示范围时,OF=1,否则OF=0;
  • 符号标志位SF
    • 运算结果为负数时,SF=1,否则SF=0;
  • 零标志位ZF
    • 运算结果为0时,ZF=1,否则ZF=0。
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值