微机原理与接口技术3指令系统和寻址方式.docx
《微机原理与接口技术3指令系统和寻址方式.docx》由会员分享,可在线阅读,更多相关《微机原理与接口技术3指令系统和寻址方式.docx(17页珍藏版)》请在冰豆网上搜索。
微机原理与接口技术3指令系统和寻址方式
操作码:
指令。
操作数:
描述该指令的操作对象,存放在指令的地址码字段中;存放在寄
存器中;存放在存储器的数据段、堆栈段或附加数据段中。
与对
应的三种操作数是:
立即操作数、寄存器操作数和存储器操作数。
①寻址方式:
确定操作数存放地址的方法。
1)立即寻址方式:
操作数直接给出,即数字表达式。
(不需要访问存储器)。
说明:
立即数可为8位,可位16位;只能为整数;只能做源操作数。
2)寄存器寻址方式:
操作数在CPU内部的寄存器中,指令中给出寄存器名。
说明:
寄存器为16位(AX,BX,CX,DX,SI,DI,SP,BP)
8位(AH,AL,BH,BL,CH,CL,DH,DL);
源操作数和目的操作数都(同时)可以使用寄存器寻址。
3)存储器寻址:
操作数在存储器中。
3)(1直接寻址方式:
存储单元的有效地址由指令直接给出。
说明:
默认的段寄存器DS,如果不是,则需要用前缀指出
如MOVBX,EX:
[3100H]
3)(2寄存器间接寻址方式:
存储单元的有效地址在寄存器中。
说明:
寄存器可为基址寄存器(BX,BP),变址寄存器(SI,DI);
默认的段寄存器位DS,当寄存器为BP时,段寄存器为SS。
3)(3寄存器相对寻址方式:
操作数的偏移地址是指定寄存器与一个整数之和。
3)(4基址变址寻址:
操作数的偏移地址是两个指定寄存器的值之和。
3)(相对基址变址寻址方式:
操作数的偏移地址是指定寄存器的值与相对偏移量
之和
②对操作数的说明:
立即操作数:
(1)只能做源操作数
(2)指令中的立即操作数不应超过其8位或16位的取值范围
MOVAL,100H,错误,应该为MOVAX,100H
寄存器操作数:
(1)存放在通用寄存器(AX-DX),地址指针(IP)或变址寄存器
(SI,DI),以及段寄存器(SS,DS)
存储器操作数:
(1)存储器操作数可以作为源操作数,也可以作为目的操作数,
(2)多数指令不允许源操作数、目的操作数同时为存储器操作数。
③8088/8086CPU的指令系统:
【{********}:
表示汇编格式】
1)数据传送指令:
(1)通用传送指令
1、最基本的传送指令:
{MOV目的操作数源操作数}
目的操作数←源操作数
说明:
1:
不能将立即数直接传送给段寄存器
2:
两个段寄存器之间不允许直接传送数据
3:
两内存单元之间不能直接传送数据
4:
CS,IP,PSW不能做目的操作数,即值用
户无权改变
5:
目的操作数不能是立即寻址方式
6:
源操作数与目的操作数必须字长相等
7:
MOV指令不影响标志位
2、堆栈操作指令:
PUSH和POP(按先进后出,后进先出的原则)
{PUSH源操作数}(压栈:
操作:
(SP)←(SP)-2
((SP)+1,(SP))←操作数
{POP目的操作数}(弹栈:
操作:
操作数←((SP)+1,(SP))
(SP)←(SP)+2
说明:
1:
PUSH、POP指令的操作数不能使用立即寻
址方式。
POP指令的操作数不能使用CS寄
存器。
2:
PUSH、POP指令只能做字操作。
3:
不影响标志位。
3、交换指令:
XCHG(两者互换)
{XCHG目的操作数,源操作数}
说明:
1:
目的和源都不能为立即数或段寄存器,IP。
2:
不能同时为内存单元。
3:
目的操作数和源的取值范围要相同,同为8位
或者16位。
4:
不影响标志位。
(2)累加器专用传送
1、换码指令:
XLAT(用于编码制的转换)
{XLAT或XLAT地址标号}
说明:
1:
内存中必须有码表。
2:
不影响标志位。
2、输入/输出指令IN,OUT(16位时,端口只能放在DX中)
1、输入指令:
IN(CPU从外设端口接收数据)
2、输出指令:
OUT(CPU向外设端口发送数据)
说明:
8位:
INAL,I/O口地址表达式
OUT地址表达式,AL
16位:
MOVDX,地址表达式MOVDX,地址表达式
INAX,DXOUTDX,AX
(3)地址传送指令
1、偏移地址送寄存器指令:
LEA(loadeffectiveaddress取有效地址指
令)(将内存单元的地址送到某一个寄存器中)
{LEA16位寄存器名,存储器寻址方式}
说明:
1:
16位寄存器不包括段寄存器。
2:
不影响标志位。
2、指针送指定寄存器和DS寄存器指令:
LDS(loadpointerintoregister
DS取地址指针装入DS和另一个寄存器的指令)
(将4个字节的内存单元地址(一个段地址和偏移
量送到两个目的寄存器中,后2个字节送入DS)
{LDS16位寄存器名,存储器寻址方式}
说明:
1:
16位寄存器不允许是段寄存器。
2:
不影响标志位。
3、指针送指定寄存器和ES寄存器指令:
LES(loadpointerintoregister
DS取地址指针装入ES和另一个寄存器的指令)
{LES16位寄存器名,存储器寻址方式}
说明:
1:
16位寄存器不允许段寄存器。
2:
不影响标志位。
(4)标志传送指令
1、读取标志指令:
LAHF(loadAHwithFlags)读取标志位置AH中
{LAHF}
2、设置标志指令:
SAHF(storeAHontoFlags)将AH设置到A标志位
{SAHF}
3、标志入栈指令:
PUSHF{PUSHF}
标志出栈指令:
POPF{POPF}
2)算术运算指令:
(1)加法指令
1、不带进位位的加法指令:
ADD(addition)
汇编格式:
ADD目的操作数,源操作数
执行的操作:
(目的操作数)←源操作数+目的操作数
2、带进位位的加法指令:
ADC(additionwithcarry)(实现多字节相加)
汇编格式:
ADC目的操作数,源操作数
执行的操作:
(目的操作数)←源操作数+目的操作数+CF
3、增量指令:
INC(incrementdestinationby1)
汇编格式:
INC操作数
执行的操作:
(操作数)←操作数+1
说明:
1:
除增量指令不影响CF标志位,其他标志位均受指令影响
2:
CF标志位表示无符号数有无溢出,OF标志位表示有符号
数有无溢出
(2)减法指令
1、不考虑借位的减法指令:
SUB(subtract)
汇编格式:
SUB目的操作数,源操作数
执行的操作:
(目的操作数)←目的操作数-源操作数
2、考虑借位的减法指令:
SBB(subtractwithborrow)
汇编格式:
SBB目的操作数,源操作数
执行的操作:
(目的操作数)←目的操作数-源操作数-CF
3、减量指令:
DEC(decrementdestinationby1)
汇编格式:
DEC操作数
执行的操作:
(操作数)←操作数-1
4、求补指令:
NEG(negate)
汇编格式:
NEG操作数
执行的操作:
(操作数)←0-操作数
5、比较指令CMP(comparetwooperands)
汇编格式:
CMP目的操作数,源操作数
执行的操作:
目的操作数-源操作数。
说明:
结果不回送,两个操作数保持原值,影响标志位。
说明:
1、除DEC不影响CF标志位,其余标志位均受指令影响。
2、ZF标志位表示零标志位,SF表示符号标志位。
(3)乘法指令
1、无符号数的乘法指令:
MUL(multiplyaccumulatorby
register-or-memory;unsigned)
汇编格式:
MUL源操作数
执行的操作:
若为字节操作(AX)←(AL)×源操作数
若为字操作(DX),(AX)←(AX)×源操作数
2、有符号数的乘法指令:
IMUL(integermultiplyaccumulatorbyregister-
or-memory;signed)
汇编格式:
IMUL源操作数
执行的操作:
与MUL相同,只是处理的数据是有符号数,
而MUL处理的数据是无符号数。
说明:
1:
乘法指令的源操作数不能为立即寻址方式。
2:
乘法指令对除CF和OF以外的标志位无定义。
(4)除法指令
1、无符号数的乘法指令:
DIV(division;unsigned)
汇编格式:
DIV源操作数
执行的操作:
若为字节操作:
(AL)←(AX)/源操作数的商
(AH)←(AX)/源操作数的余数
若为字操作:
(AX)←(DX、AX)/源操作数的商
(DX)←(DX、AX)/源操作数的余数
商和余数均为无符号数。
2、有符号数的乘法指令:
IDIV(integerDivision;signed)
汇编格式:
IDIV源操作数
执行的操作:
与DIV相同,只是操作数是有符号数,商和余数均
为有符号数,余数符号同被除数符号。
说明:
1、乘法对所有的标志位未定义。
2、源操作数的寻址方式不能为立即寻址方式。
3、除法指令可能导致的错误:
①除数位0,②除法溢出。
产生除法错中断警告,优先级为0最高。
(5)符号扩展指令(正数将AH或DX清0,负数将AH或DX置1)
1、字节转换为字指令:
CBW
汇编格式:
CBW
执行的操作:
将(AL)的符号扩展到(AH)中去。
如果(AL)的最高有
效位为0,则(AH)=00H;如(AL)的最高有效位为1,
则(AH)=0FFH。
2、字转换为双字指令:
CWD
汇编格式:
CWD
执行的操作:
将(AX)的符号扩展到(DX)中去。
如果(AX)的最高
有效位为0,则(DX)=00H;如(AX)的最高有效位
为1,则(DX)=0FFH。
说明:
这两条指令都不影响标志位。
(6)十进制调整指令:
1、组合BCD码的运算调整指令
加法调整指令DAA(decimaladjustforaddition)
减法调整指令DAS(decimaladjustforsubtraction)
汇编格式:
DAA
执行的操作:
调整(AL)中的二进制BCD码的和。
调整方法如下:
若AF=1或者(AL)的低4位是在AH~FH之间,则
(AL)加06H,且自动置AF=1;
若CF=1或者(AL)的高4位是在AH~FH之间,则
(AL)加60H,且自动置CF=1。
汇编格式:
DAS
执行的操作:
调整(AL)中的差。
调整方法如下:
若AF=1,则(AL)减06H;
若CF=1,则(AL)减60H。
2、非组合BCD码调整指令
加法调整指令{AAA}
减法调整指令{AAS}
乘法调整指令{AAM}
除法调整指令{AAD}
3)逻辑运算指令和移位指令
(1)逻辑运算指令
说明:
AND、OR、XOR和TEST四条指令的使用形式很相似,都是双
操作数指令,操作数的寻址方式的规定与算术运算指令相同,对
标志位的影响也相同,使CF=0,OF=0,AF位无定义,SF、ZF、
PF根据运算结果设置。
1、AND逻辑与指令汇编格式:
AND目的操作数,源操作数
2、OR逻辑或指令汇编格式:
OR目的操作数,源操作数
3、XOR逻辑异或指令汇编格式:
XOR目的操作数,源操作数
说