❤️💕💕汇编语言目前仍在发挥着不可替代的作用,在效率上无可替代,在底层,学习linux内核,计算机外围设备和驱动,都离不开汇编。Myblog:http://nsddd.top
[TOC]
8086一共有14
个寄存器:
- 通用寄存器:AX、BX、CX、DX
- 变址寄存器:SI、DI
- 指针寄存器:SP、BP
- 指令指针寄存器:IP
- 段寄存器:CS、SS、DS、ES
- 标志寄存器:PSW
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 位寄存器来使用了。
- AX 寄存器可以分为两个独立的 8 位的 AH 和 AL 寄存器;
- BX 寄存器可以分为两个独立的 8 位的 BH 和 BL 寄存器;
- CX 寄存器可以分为两个独立的 8 位的 CH 和 CL 寄存器;
- 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位寄存器