原因:
写这一个的原因是因为看了逆向感觉自己对汇编还是不是很理解欸
那我边看那本边回顾吧
汇编语言的组成
1、汇编指令:机器码的助记符,有对应的机器码。(核心)
2、伪指令:没有对于的机器码,由编译器执行。
3、其他符号:如 +、-、*、/等,由编译器识别,没有对应机器码。
CPU与寄存器
cpu是计算机的核心部件,它控制整个计算机的运作并进行运算,想让一个cpu工作,就必须给它提供指令和数据,指令和数据在存储器中存放,也就是内存。存储器会被分成若干个存储单元,每个存储单元从0开始编号。1个存储单元可以存放一个byte,也就是8个二进制位。
cpu通过地址总线来指定存储单元,可见地址总线能传说多少个不同的信息,cpu就能对多少个存储单元进行寻址。
cpu与内存或其他器件之间的数据传送是通过数据总线来进行的,数据总线的宽度决定了cpu和外界的数据传送速度。
cpu对外部器件的控制是通过控制总线来进行的,在这里控制总线是一个总称,控制总线是一些不同控制线的集合,有多少根控制总线,就意味着cpu提供了对外部器件的多少种控制,所以控制总线决定了cpu对外部器件的控制能力。
寄存器
对于一个汇编语言程序员来说,cpu中的主要部件是寄存器,寄存器是cpu中程序员可以用指令读写的部件,程序员通过改变各种寄存器中的内容来实现对cpu的控制。不同的cpu,寄存器的个数,结构是不同的。
8086cpu有14个寄存器,每个寄存器有一个名称,这些寄存器是:AX,BX,CX,DX,SP,BP,SI,DI,IP,PSW,CS,DS,SS,ES。
通用寄存器:
数据寄存器
AX (Accumulator):累加寄存器,也称之为累加器;
BX (Base):基地址寄存器;
CX (Count):计数器寄存器;
DX (Data):数据寄存器;
指针寄存器:
SP (Stack Pointer):堆栈指针寄存器;
BP (Base Pointer):基指针寄存器;
变址寄存器:
SI (Source Index):源变址寄存器;
DI (Destination Index):目的变址寄存器;
控制寄存器:
IP (Instruction Pointer):指令指针寄存器;
FLAG:标志寄存器;
段寄存器:
CS (Code Segment):代码段寄存器;
DS (Data Segment):数据段寄存器;
SS (Stack Segment):堆栈段寄存器;
ES (Extra Segment):附加段寄存器;
小总结
数据寄存器有 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 位寄存器;