Skip to content

Latest commit

 

History

History
109 lines (77 loc) · 3.46 KB

File metadata and controls

109 lines (77 loc) · 3.46 KB

第3节 访问寄存器和内存

❤️💕💕汇编语言目前仍在发挥着不可替代的作用,在效率上无可替代,在底层,学习linux内核,计算机外围设备和驱动,都离不开汇编。Myblog:http://nsddd.top


[TOC]

8086寄存器

8086一共有14个寄存器:

  • 通用寄存器:AX、BX、CX、DX
  • 变址寄存器:SI、DI
  • 指针寄存器:SP、BP
  • 指令指针寄存器:IP
  • 段寄存器:CS、SS、DS、ES
  • 标志寄存器:PSW

在8086cpu通用寄存器

8086 CPU 中寄存器总共为 14 个,且均为 16 位。

一个寄存器存储一个16位的数据

最大值:216 - 1


8086上一代寄存器都是8位的,如何保证程序的兼容性?

  • 通用寄存器可以分为两个独立的8位寄存器使用。(例如下面AX可分为AH和AL)

数据寄存器(AX,BX,CX,DX)

数据寄存器有 AX,BX,CX,DX 四个组成,由于在 8086 之前的 CPU 为 8 位 CPU,所以为了兼容以前的 8 位程序,在 8086 CPU 中,每一个数据寄存器都可以当做两个单独的寄存器来使用,由此,每一个 16 位寄存器就可以当做 2 个独立的 8 位寄存器来使用了。

  1. AX 寄存器可以分为两个独立的 8 位的 AH 和 AL 寄存器;
  2. BX 寄存器可以分为两个独立的 8 位的 BH 和 BL 寄存器;
  3. CX 寄存器可以分为两个独立的 8 位的 CH 和 CL 寄存器;
  4. DX 寄存器可以分为两个独立的 8 位的 DH 和 DL 寄存器;

除了上面 4 个数据寄存器以外,其他寄存器均不可以分为两个独立的 8 位寄存器 ;

  • **寄存器AX:**用于存放数据 (源代码编写时不能以字母开头,可在开头补上0)
    • 比如 mov ax, ffffh 应该写成 mov ax, 0ffffh 否则编译报错
  • 寄存器BX: 另外还用于存放数据段偏移地址 初始值为源代码大小
  • 寄存器CX: 另外还用于存放loop循环计数
  • 寄存器DX: 另外还用于存放累加结果
  • 寄存器EX:备用寄存器

通用寄存器:

AX,BX,CX,DX 称作为数据寄存器:

  • AX (Accumulator):累加寄存器,也称之为累加器;
  • BX (Base):基地址寄存器;
  • CX (Count):计数器寄存器;
  • DX (Data):数据寄存器;

SP 和 BP 又称作为指针寄存器:

  • SP (Stack Pointer):堆栈指针寄存器;
  • BP (Base Pointer):基指针寄存器;

SI 和 DI 又称作为变址寄存器:

  • SI (Source Index):源变址寄存器;
  • DI (Destination Index):目的变址寄存器;

控制寄存器:

  • IP (Instruction Pointer):指令指针寄存器;
  • FLAG:标志寄存器;

段寄存器:

  • CS (Code Segment):代码段寄存器;
  • DS (Data Segment):数据段寄存器;
  • SS (Stack Segment):堆栈段寄存器;
  • ES (Extra Segment):附加段寄存器;

"字"在存储器中的存储

8086的字长为16bit

一个字可以存在一个16位寄存器中

  • 一个字的高位字节存在这个寄存器的高8位寄存器
  • 一个字的低位字节存在这个寄存器的低8位寄存器

END 链接