汇编语言——8086微处理器

80x86系列计算机系统主要由三部分组成:中央处理器(CPU)、内存(Memory)、输入\输出(I\O)子系统,各部分之间通过系统总线相连。

1、CPU
CPU主要有算术逻辑部件、控制部件和寄存器构成,其任务是执行内存中的指令序列。
算术逻辑部件用来执行所有的算术与逻辑运算;
控制部件的主要功能是从内存取指令、对指令进行译码分析、从内存取操作数、存结果于内存以及发出执行指令的命令等;
寄存器在计算机中起着十分重要的作用。每个寄存器相当于CPU中的一个存储单元,但其存取速度比内存要快得多。

2、系统总线
总线是用来连接系统各部件的一组公共导线,是部件之间进行数据交换的通道。
1、数据总线
数据总线是用来传递数据的。80x86系列CPU的数据总线为8位、16位、32位和64位等。数据总线定义了CPU在每个内存周期所能存取数据的大小(位数)。因此,在单位时间内,具有16位数据总线的8086所传送的数据量只能达到具有32位数据总线的8086的一半。数据的存取是与数据总线对应的,因此,通常的数据存取自然是以8位、16位、32位和64位进行的。
2、地址总线
地址总线的位数决定了最大可寻址的内存与I\O空间。例如,8086的地址总线为20位,可寻址的最大空间为2^20B
3、控制总线
在控制总线上有两条线:Read和Write,用来指出数据传送的方向。当同时为1时,CPU和内存不通信;当Read为0时,CPU从内存读;当Write为0时,CPU从内存写。
80x86计算机采用两个不同的地址空间:内存空间与I\O空间,但是地址总线有内存与I\O子系统共同享用。因此,必须有一条控制总线来区分地址适用于内存还是用于I\O。

3、内存存取与系统时钟
系统时钟是控制总线上的电信号,周期性的在1和0之间变化,它是计算机系统实现同步操作的基础。
系统时钟从0到1再回到0所用的时间称作一个时钟周期。时钟频率就是每秒的时钟周期数。既然所有的CPU操作均通过时钟来同步,因此,时钟就决定了CPU的执行速度,也就是说,CPU是以一定的时钟频率运行的。

4、8086CPU的寄存器组
80x86CPU的寄存器组包括8位、16位和32位寄存器。这些寄存器可以分为4类:通用寄存器、段寄存器、专用寄存器、其他寄存器
1、通用寄存器
8个8位通用寄存器:AL、AH、BL、BH、CL、CH、DL、DH。
8个16位通用寄存器:AX、BX、CX、DX、SI、DI、BP、SP。
8个32位通用寄存器:EAX、EBX、ECX、EDX、ESI、EDI、EBP、ESP。
其中,AL、AH、BL、BH、CL、CH、DL、DH分别对应于AX、BX、CX、DX的低8位与高8位。AX、BX、CX、DX、SI、DI、BP、SP分别对应于EAX、EBX、ECX、EDX、ESI、EDI、EBP、ESP的低16位。
通用寄存器可以作为指令的操作数,用于存储经常访问的数据。
(1)EAX(Accumulator):累加器。
(2)EBX(Base):基址寄存器。
(3)ECX(Count):计数寄存器。
(4)EDX(Data):数据寄存器。
(5)ESI(Source Index):源变址寄存器。
(6)EDI(Destination Index):目的变址寄存器。
(7)EBP(Base Pointer):基址指针。
(8)ESP(Stack Pointer):堆栈指针。

2、段寄存器
(1)代码段:用来存放程序的指令序列。
(2)数据段:用来存放程序的数据。
(3)堆栈段:作为堆栈使用的内存区域。堆栈用来存储过程返回地址、过程参数和局部变量等。
一个程序可以拥有多个代码段、多个数据段甚至多个堆栈段。
80x86有6个16位的段寄存器:CS\DS\ES\SS\FS\GS。通常,CS\DS\SS分别用来确定当前代码段、数据段、堆栈段的段地址。ES\FS\GS也用来存放数据段的段地址,常称为附加段寄存器。在串操作指令中,ES用来表示目的串所在数据段的段地址。

3、专用寄存器
80x86有两个32位的专用寄存器:指令指针EIP和标志寄存器EFLAGS。这两个寄存器不能用作指令的操作数,而是由CPU直接操作。其中,EIP与EFLAGS的低16位分别由IP和FLAGS标识。

5、标志位
在标志寄存器EFLAGS中有若干标志位,这些标志用来表示CPU当前的操作方式和状态信息。与普通应用程序有关的主要是FLAGS中的9个标志位,包括6个状态标志和3个控制标志,每个标志占一位。
状态标志
(1)CF(Carry Flag):进位标志
对于无符号数运算,当运算结果的最高有效位有进位或借位时,进位标志置1;否则置0。
DEBUG表示:CY(CF=1);NC(CF=0)
(2)ZF(Zero Flag):零标志
若运算结果为0,则ZF=1,否则ZF=0。
DEBUG表示:ZR(ZF=1);NZ(ZF=0)
(3)SF(Sign Flag):符号标志
运算结果最高位为1,则SF=1;否则SF=0。
DEBUG表示:NG(SF=1);PL(SF=0)
(4)PF(Parity Flag):奇偶标志
当运算结果最低字节中1的个数为零或者偶数时,PF=1;否则PF=0。
DEBUG表示:PE(PF=1);PO(PF=0)
(5)OF(Overflow Flag):溢出标志
对于有符号数运算,若算术运算的结果有溢出,则OF=1;否则OF=0。
DEBUG表示:OV(OF=1);NV(OF=0)
(6)AF(Auxiliary Carry Flag):辅助进位标志或称作半进位标志
若加法时结果低4位向前有进位或者减法时结果低4位向前有借位,则AF=1;否则AF=0。
DEBUG表示:AC(AF=1);NA(AF=0)
控制标志
(1)DF(Direction Flag):方向标志
DF用于串操作指令中,以控制地址的变化方向。DF可以用指令CLD清0或者STD置1。若DF=0,则每次串操作后内存地址自动递增,否则自动递减。
(2)IF(Interrupt Flag):中断标志
用于控制CPU是否响应外部可屏蔽中断请求。若IF=1,则允许中断,否则,禁止中断。
(3)TF(Trace Flag):跟踪标志
用于控制CPU是否进入单步调试方式。当TF=1时,CPU以单步方式执行指令,即在每条指令执行结束后,产生中断1,以便对程序进行检查。80x86CPU没有提供直接修改该标志的指令。

你可能感兴趣的:(汇编语言)