80X86汇编语言程序设计
80X86汇编语言程序设计第二章8086/8088寻址方式和指令系统一.8086/8088寄存器组:  1.数据寄存器:AX(). AX和AL是累加器。用累加器进行计算操作时间最短。BX(). BX又叫基址寄存器。唯一作为存储器指针的寄存器。CX(). CX 控制循环的次数。CL保存移位的位数。DX(). DX用于做32位乘除法时,存放被除数或保留余数。  2.指针寄存器:SP堆栈指针. 保存堆栈指针栈顶地址。BP基址指针.    3.变址寄存器:SI源地址.DI目的地址. 变址和指针寄存器主要用于存放某个存储单元地址的偏移,或某组存储单元开始地址的偏移,即作为存储器指针使用。通用寄存器数据寄存器.指针寄存器.变址寄存器构成。  4.控制寄存器:IP指令指针. 指令指针IP给出接着要执行的
指令在代码段中的偏移。FLAG标志寄存器.包含了9个标志,主要用于反映处理器的状态和运算结果的某些特征。运算结果标志进位标志CF;零标志ZF(Zero F);符号标志SF(Sign F);溢出标志OF;奇偶标志PF;辅助进位标志AF;状态控制标志方向标志DF;中断允许标志IF;跟踪标志TF。  5.段寄存器:CS代码段. DS数据段. SS堆栈段.ES附加段. 二. 存储器分段和地址的形成:  1.存储单元的地址和内容地址是用二进制数来表示的,它是无符号整数,书写格式为十六进制数。16位二进制数可以表示2的16次方,也就是0~65535的地址范围。65536个字节单元的存储容量是64K。一个存储单元中存放的信息成为该存储单元的内容。字单元的地址采用它的低地址来表示,并采用“高高低低”的原则。四个连续的字节单元就构成了一个双字单元。
汇编语言结束指令2.存储器地址的分段及物理地址的形成
8086/8088 CPU有20根地址线,可直接寻址的物理地址为2的20次方也就是1M字节。所以,要访问1M字节空间的存储器必须有20位地址。CPU采用存储器地址分段的办法来提供20位地址。从0地址开始,每16个字节为一小段。IBMPC机对段的起始地址有所限制,段不能起始于任意地址,而必须从任一小段的首地址开始。在16进制表示的地址中,最低位是0。{00000,00010,00020,00030,…000F0,…F FFE0,FFFF0,} -在1M字节的存储器里,每一个存储单元都有一个唯一的20位地址。称为:该存储单元的物理地址。把存储单元的地址与所在段的起始地址的差称为段内偏移,称为偏移。在整个1M地址空间中,存储单元的物理地址等于段起始地址加上偏移。物理地址=段*16+偏移20位物理地址=16位段地址+16位偏移地址。指令中不使用物理地址,而是使用逻辑地址,总线接口单元BIU按
需要根据段值和偏移自动形成20位物理地址。  3.段寄存器的引用计算机在取指令的时候,自动引用代码段寄存器CS,再加上IP所给出的16位偏移,得到要取指令的物理地址。当涉及到一个堆栈操作时,则自动引用堆栈寄存器SS,再加上SP所给出的16位偏移,得到堆栈操作所需要的物理地址。当偏移涉及BP寄存器时,缺省引用段寄存器SS。在存取一个普通存储器操作数时,则自动选择数据寄存器DS 或附加段寄存器ES,再加上16位偏移,得到存储器操作数的物理地址。
三.8086/8088的寻址方式:计算机是通过执行指令序列来解决问题的,因而每种计算机都有一组指令
集提供给用户使用,这组指令集就称为计算机的指令系统。计算机中的指令操作码字段和操作数字段两部分组成。汇编语言是一种符号语言,它用助记符来表示操作码,用符号或符号地址来表示操作数或操作数地址。它与机器指令一一对应。
寻址方式:表示指令中用于说明操作数所在的地址的方法8086/8088有七种基本的寻址方式,下面介绍这七种寻址方式:1.立即寻址方式操作数就包含在指令中,它作为指令的一部分,跟在操作码后存放在代码段。这种操作数称为立即数。例如:指令:mov ax,1234H mov al,5mov bx,3064H 2.寄存器寻址方式操作数在CPU内部的寄存器中,指令指定寄存器号。对于16位操作数,寄存器可以是:等。对于8位操作数,寄存器可以是:等。这种寻址方式于操作数就在寄存器中,不需要访问存储器来取得操作数,因而可以取得较高的运算速度。例如:mov ax,bx mov si,ax mov al,dh 3.直接寻址方式操作数在寄存器中,指令直接包含有操作数的有效地址。操作数一般存放在数据段。所以操作数的地址DS加上指令中直接给出的16位偏移得到。例如:mov ax,[8054]DS=2000H 在汇编语言指令中,可以用符号地址代替