2.1 通用寄存器

8086CPU所有寄存器都是16位的, 可以放两个字节AX, BX, CX, DX四个寄存器用来存放一般数据, 被称为通用寄存器
image.png
8086上一代寄存器是8位的,为了保证兼容, 四个寄存器可以分为两个独立使用的8位寄存器
image.png

2.2 字在寄存器中的存储

image.png
可以看做是一个字20000,也可以看做是两个字节,分别为78和32
二. 寄存器(CPU工作原理) - 图4
关于数制
image.png

2.3 几条汇编指令

image.png
溢出例子
结果为1044C, 但是16位寄存器无法保留这么多数据, ax中的数据为044C
image.png
异常
把16位数据放入8位寄存器
image.png

2.4 物理地址

每个内存单元, 都有唯一物理地址, 不同cpu有不同的物理地址分配方式

2.5 16位CPU结构

8086是16位机
一次性只能处理, 传输, 暂时存储16位的数据和地址

  • 一次性最多处理16位的数据
  • 寄存器最大宽度是16位
  • 寄存器和运算器之间的通路为16位

    2.6 8086CPU给出物理地址的方法

    8086有20位地址总线,cpu是16位, 需要通过两个16位合成20位物理地址
    image.png
    地址加法器采用物理地址=段地址X16+偏移地址
    image.png

    2.7 段地址X16+偏移地址=物理地址的本质

    16位寄存器无法对20位地址线寻址的处理

    2.8 段的概念

    并不是内存被分为段, 而是CPU对内存的一种划分方式,通过段地址左移4位,配合偏移量来实现20根地址线的寻址

    2.9 段寄存器

    为访问内存提供段地址和偏移地址
    8086有四个段寄存器 CS DS ES SS

    2.10 CS和IP

    CS为段寄存器, IP为指令指针寄存器
    取指令, IP=IP+指令长度,执行指令
    重复这个过程
    image.png

    2.11 修改CS, IP的指令

    通用寄存器中用mov设置寄存器的值, 也叫传送指令, 但是不能操作CS,IP的值

  • junp 段地址:偏移地址
    image.png

  • jump 合法寄存器
    image.png

    2.12 代码段

    下面长度为10字节的指令存放于123B~123BA的一组内存中, 就可以认为是一个代码段
    cpu不会自己安排代码执行, 需要通过CS:IP指向的内存单元执行指令
    image.png

    2.13 bug的命令

  1. r->显示寄存器
  2. r:寄存器->修改寄存器的内容
  3. d->查看内存
  4. d:段地址:偏移地址->查看某位置
  5. d:段地址:偏移地址 第二个偏移地址->查看区间数据
  6. e 段地址:偏移地址 数据 数据 数据-> 写内存

image.png