微机原理×86学习

基础知识点整理


为什么要学习8086汇编语言

  • 对硬件控制最彻底、占内存少、运行速度快
  • 了解计算机组成结构和工作过程的工具
  • 8086指令系统是整个x86系列CPU指令的基本集合,向后兼容
  • 应用广泛,资料易于寻找

计算机的组成

  • 运算器,控制器(CPU)、存储器、输入输出设备(IO设备)

总线

  • 数据和控制总线是双向的,地址总线是单向的!

协处理器

  • 协处理器,这是一种协助*处理器完成其无法执行或执行效率、效果低下的处理工作而开发和应用的处理器。需要说明的是,由于现在的计算机中,整数运算器与浮点运算器已经集成在一起,因此浮点处理器已经不算是辅助处理器。而内建于CPU中的协处理器,同样不算是辅助处理器,除非它是独立存在。
  • 专门处理浮点数的处理器叫做浮点数处理器或者协处理器

流水线技术

  • 流水线技术指的是并行操作

指令队列

  • 指令队列在x86下只有6个字节

内部结构

  • 总线接口单元
  • 指令预取单元
  • 指令译码单元
  • 指令执行单元
  • 段管理单元
  • 页管理单元
  • 高速缓存单元
  • 浮点运算单元

寄存器必备知识

  • 基本寄存器:通用寄存器,指令指针寄存器,标志寄存器,段寄存器。
  • 系统级寄存器:控制寄存器,系统地址寄存器
  • 调试和测试寄存器
  • 调试寄存器

×86系列处理器的位数

  • 80868位的处理器
  • 808816位处理器
  • 386处理器是一个分水岭表示正式进入了32位处理器的时代

存储相关

  • 由于8086/8088寄存器是16位的,能存储的最大值是2的16次方即是2^16=65536=64K
  • 8086/8088存储器1MB地址空间最多可以分为64K个段,每个段均为16个字节;最少可分为16个段,每个段均为64KB。

段相关

  • 8086分为四个段(CS/DS/SS/ES),每个段的容量最大64KB
  • 每个段都是独立寻址的逻辑单元,用于存放程序和数据
  • 各逻辑段在存储器中采用浮动方式,既可以邻接、间隔、完全重叠、部分重叠;
  • 一个存储单元的物理地址可以属于一个逻辑段,也可以同属于几个逻辑段
  • 8086/8088一个程序最多只能访问到四个段 CS SS DS ES
  • 段寄存器是16位的,64K的代码
  • 16位段基址移4位加偏移地址是20位的物理地址!
  • 每个存储单元只有一个物理地址,但它可由不同段基址和偏移地址组成

处理器三种工作模式

  • 实地址模式(16位1M(2的20次方)地址)
  • 保护模式(物理内存2的32次方64G,虚拟内存2的46次方
  • 虚拟8086模式

x86实模式下1MB存储器的存储单元进行分段管理

×86的数据存储方式

  • 在×86系统下地址高的是高位数据,地址低的是低位数据(小端模式

几个常见数据长度记忆

  • 2的十次方是1K
  • 2的16次方是64K
  • 2的20次方是1M
  • 2的30次方是1G
  • 2的32次方是4G

堆栈相关

  • 堆栈就是我们临时存放数据的地方
  • 堆栈的操作两个,进栈和出栈!
  • **进栈地址是减的,出栈地址是加的!
  • 堆栈是以字(2个字节)为单位进行操作**。
    同时注意区分:ARM的字是32位!

486七种数据类型

  • 无符号二进制数
  • 有符号二进制数
  • 浮点数
  • BCD码
  • 字符串
  • ASCII
  • 指针数据

寻址方式

  • 立即数寻址
    • 立即数只能作源操作数,不能作目的操作数;
    • A~F打头的数字出现在指令中时前面必须加数字0。以免与其它符号相混淆(如:0AF22H)
  • 寄存器寻址
    • 源操作数与目的操作数字长要相同
    • 寄存器寻址与段地址无关(MOV CX, ES: AX)这样写就是错误的!
  • 存储器寻址
    • 直接寻址
      • 中括号表示的就是偏移地址,BX不加特殊说明是DS段(段基址)通常是隐含
      • BP不加特殊说明是SS段
    • 寄存器间接寻址
      • 操作数的有效地址(偏移地址)放在寄存器中,寄存器名称必须加方括号!
      • 使用寄存器:基址寄存器BX、基址指针寄存器BP,变址寄存器SI、DI
      • 操作数的物理地址= 10H×DS+BX/SI/DI或= 10H×SS+BP
      • eg:MOV AX,[SI]
      • 关于默认段:BP是在SS里面,其余三个BX/SI/DI均是在DS中
    • 相对寄存器间接寻址
      • 寄存器SI和DIBP和BX不能同时出现在[ ]
    • 基址和变址寻址
    • 相对基址加变址寻址

立即寻址:我们要找的数在指令里面
直接寻址:我们要找数的地址在指令里面
寄存器寻址:我要找的数就在寄存器里面,
寄存器间接寻址:我要找的数的地址在寄存器里面

寻址方式判断:有寄存器就是寄存器寻址,有括号就是间接,前面再来一个数就是相对

操作数

  • 操作数主要有三种:立即数操作数、寄存器操作数和存储器操作数。
  • 立即数操作数就是我们常用的常数的形式,另外特别注意立即数只能是用于源操作数。另外注意取值范围:8位的无符号 00H ~ FFH,有符号 80H~7FH。16位的无符号 0000H~FFFFH,有符号8000H~7FFFH
  • 寄存器操作数,16位操作数:AX, BX, CX, DX, SI, DI, BP, SP, CS, DS, ES, SS
    8位操作数:AH, AL, BH, BL, CH, CL, DH, DL

  • 存储器操作数:字节、字、双字

其他零散知识点

  • 所有的地址都是指存储器的地址
  • 指令周期就是执行一条指令的时间
  • 基址寄存器有BX,BP,变址寄存器有DS SI
  • EA表示相加后的最终的地址值,表示有效地址的意思
  • 有效地址指的是偏移地址
  • 立即数是不能直接送段寄存器的,立即数必须先送达一个普通的寄存器,然后再送到段寄存器。
  • 地址在×86里面,它的地址空间有两个。一个是放数据指令的存储器地址,另外一个是作为输入输出的IO地址。IO的地址有16位,即64K个地址64K个地址中如果是小于255也就是8位地址可以直接送,但是如果大于8位需要用一个DX来传送!
  • 标志寄存器是不能直接MOV的
  • XLAT查表指令得到的结果放入寄存器AL
  • IPV432位地址,IPV6128位地址

微机原理×86学习

微机原理×86学习

微机原理×86学习

微机原理×86学习