CPU:
- 微处理器
- 执行机器指令,进行运算的芯片
- 16位结构的CPU表示:
- 运算器一次最多可以处理16位的数据
- 寄存器的最大宽度为16位
- 寄存器和运算器之间的通路为16位
寄存器:
- CPU中可以存储数据的器件
- CPU中程序员可以用指令读写的部件(通过改变寄存器中的内容来实现对CPU的控制)
- 8086CPU有14个寄存器(16位)
- AX,BX,CX,DX:通用寄存器(存储一般性数据;可各分为两个8位寄存器,XH与XL,X=A,B,C,D)
- CS,DS,SS,ES:段寄存器(提供内存单元的段地址)
- IP,SP
- 段地址 × 16 + 偏移地址 = 物理地址(段地址和偏移地址移位相加法)
- 原因:内存的物理地址的存储宽度与段寄存器的段地址的存储宽度不一致
- 段地址:偏移地址 表示存储单元地址
- 段的起始内存单元地址为16的倍数(考虑计算前后)
- 偏移地址变化范围:0~FFFFH,寻址能力为64KB(16^4B)个内存单元,段的最大长度为64KB
- CS与IP:代码段
- CS:代码段寄存器,IP:指令指针寄存器
- 8086机中,任意时刻,CPU执行CS:IP指向的内容(即CPU将CS:IP指向的内存单元中的内容看作指令)
- jmp 段地址:偏移地址 用给出的段地址,偏移地址修改 CS,IP 的值;jmp 某一合法寄存器 用寄存器中的值修改IP
(用jmp修改CS,IP的值与在debug中运用R指令修改CS,IP的内容有什么区别?考虑循环的实现) - 8086CPU工作过程:
- CS:IP通过地址加法器得到内存单元地址,送入输入输出控制电路
- 输入输出控制电路通过地址总线传递物理地址
- 数据总线传送该物理地址处存放的机器指令,送入输入输出控制电路(CPU如何取一条完整的指令?CPU会对第一个读取的进行解码,从而知道这条指令有几个字节)
- 输入输出控制电路将其送入指令缓冲器
- IP中的值自动增加
- 执行指令缓冲器的机器指令
- DS与[address]:数据段
- DS:存放要访问的数据的段地址,[address]中address表示偏移地址
- DS:[address] 读写对应内存单元的数据
- SS与SP:栈段
- SS:内存中栈顶段地址,SP:偏移地址
- SS:SP指示栈顶元素,当栈为空,SP为栈最底部的字单元的偏移地址+2
- 栈中字的存储:高位字节放高位内存单元,低位字节放低位内存单元
- push指令,pop指令(内存传送指令)
- 格式:push/pop 通用寄存器/段寄存器/内存单
(实验,push IP出现ERROR,为什么?实验,push 数据出现ERROR) - 执行过程:
- push:
- SP = SP - 2
- 向SS:SP指向的字单元中送入数据
- pop:
- 从SS:SP指向的字单元中读取数据
- SP = SP + 2
- push:
- 格式:push/pop 通用寄存器/段寄存器/内存单
- 8086CPU不保证程序员对栈的操作不会出界,入栈、出栈时注意最大栈空间
- ES还未作介绍
- 段地址 × 16 + 偏移地址 = 物理地址(段地址和偏移地址移位相加法)
- SI,DI,BP,PSW还未介绍到
汇编指令
- 是机器指令的助记符,同机器指令一一对应
- 已学的汇编指令:(注意格式)
- mov
- add
- sub
- jump
Debug
- DOS、Windows都提供的实模式(8086方式)程序的调试工具。使用它可以查看CPU各种寄存器中的内容、内存的情况和在机器码级跟踪程序的运行(什么时候会用到?)
- 已学的几种命令:
- R命令:查看、修改CPU中寄存器的内容
- D命令:查看内存中的内容
- E命令:修改内存中的内容
- U命令:将内存中的内容解释为机器指令和对应的汇编指令
- T命令:执行CS:IP指向的内存单元处的指令
- A命令:以汇编指令的形式向内存中写入指令
- 实验中出现的困惑:
- 向显存中写入数据
- T命令在执行修改寄存器SS的指令时,下一条指令也紧接着被执行
地址总线(寻址能力为2^N个内存单元),数据总线,控制总线
内存地址空间
- 00000H~9FFFFH 主随机存储器地址空间(RAM),A0000H~BFFFFH 显存地址空间(随写随显示),C0000H~FFFFFH 各类ROM地址空间(只读)
- 对于CPU是一个统一的逻辑存储器,容量受CPU寻址能力的限制
汇编语言 王爽(第三版) 第一到三章 总结
最新推荐文章于 2021-06-17 23:23:54 发布