资源描述
,*,安徽建筑工业学院电子与信息学院,NMI,INTR,第3章 8086指令系统,3.1 指令格式与寻址方式,3.2 数据传送指令,3.3 算术运算指令,3.4 逻辑运算和移位指令,1),指令的基本格式,计算机中的指令由操作码字段和操作数字段两部分组成;,指令的格式如图所示:,操作码:指计算机所要执行的操作,或称为操作类型;,操作数:指在指令执行操作的过程中所需要的操作数;,3.1 指令格式与寻址方式,2),寻址方式,寻址方式就是指令中用于说明操作数所在地址的方法。,立即寻址方式,例 MOV CL,1DH,则指令执行后,(CL)=1DH,例 MOV AX,3000H,则指令执行后,(AX)=3000H,直接寻址方式,例 MOV AX,2000H,将数据段中偏移地址为2000H单元的字送给AX寄存器,。,寄存器寻址,方式,例,下列程序执行后,(,AX,),=,?,(,BX,),=,?,MOV AX,,,1234H,MOV BX,,,5678H,ADD AX,,,BX,执行:,1234HAX,5678HBX,(,AX,),+,(,BX,),AX,执行后:(,AX,),=68ACH,,(,BX,),=5678H,基址加变址寻址方式,例 MOV AX,BX+SI;,(,也可以写成MOV AX,BXSI)如(DS)=3000H,(BX)=1000H,(SI)=12FBH,则EA=1000+12FB=22FBH,PA=30000+22FBH=322FBH;执行结果是(AX)=89ABH。,课堂习题,:,假定DS=2000H,ES=2100H,SS=1500H,SI=00A0H,BX=0100H,BP=0010H,请指出下列指令的源操作数字段是什么寻址方式?它的物理地址是多少?,MOV AX,0ABH MOV AX,BX,MOV AX,100H ES:MOV AX,BX,MOV AX,BP MOV AX,BX+10H,MOV AX,50HBX MOV AX,BX SI,MOV AX,60HBPSI,8086指令系统,典型指令使用频率,指令类型,指令使用频率度,数据传送类,43,转/跳控制类,23,算术运算类,15,比较类,13,逻辑运算类,5,其他,1,3.2 数据传送指令,1)通用数据传送指令,(1)MOV传送指令,指令的格式为:MOV OPD,OPS;(OPS)OPD,【例】数据间传送,MOV AX,1234H ;源操作数为直接寻址,MOV BH,DI ;源操作数为寄存器间接寻址,MOV DI,ES:3SI ;源操作数为变址寻址,使用跨段前缀,MOV BP,3BX+SI;源操作数为基址加变址寻址,MOV AX,2345H,MOV DS:BP,DL;使用跨段前缀,MOV ES,AX,注:IP不能用作源操作数和目的操作数;,立即数和,CS,不能用作目的操作数;,两个存储器之间不能直接传送数据;,两个段寄存器之间不能直接传送数据;,立即数不能传入段寄存器。,数据交换指令XCHG,XCHG OPD,OPS;即(OPD)OPS,(OPS)OPD。,【例】寄存器与存储器之间数据交换。,MOV AX,5678H;(AX)=5678H,MOV BX,0FFFFH;(BX)=0FFFFH,XCHG AX,BX;(AX)=0FFFFH,(BX)=5678H,2)堆栈操作指令,进栈指令PUSH,PUSH OPS(PUSH REG/MEM),即:(SP)SP(OPS)158SP,(SP)SP(OPS)70SP,【,例】设SS=2000H,SP=0040H,AX=25FEH,执行:PUSH AX,执行后:SS=2000H,SP=003EH,AX=25FEH,(2003EH)=25FEH,出栈指令POP,POP OPD(POP REG/MEM),该指令为PUSH指令的逆过程。,即:(SP)(OPD)70(SP)+SP,(SP)(OPD)158(SP)+SP,【例】设SS=2000H,SP=0040H,BX=25FEH,(20040H)=2031H,执行:POP BX,执行后:SS=2000H,SP=0042H,BX=2031H,(20040H)=2031H,3)输入输出指令,输入指令IN,输入指令用来从指定的外设端口取信息送入累加器。它有四种形式:,格式:IN AL,PORT,功能:(PORT)AL,格式:INAX,PORT,功能:(PORT)AX,格式:INAL,DX,功能:(DX)AL,格式:INAX,DX,功能:(DX)AL,输出指令OUT,输出指令用来把累加器的内容送往指定的外设端口,它有四种形式:,格式:OUTPORT,AL,功能:(AL)PORT,格式:OUTPORT,AX,功能:(AX)PORT,格式:OUTDX,AL,功能:(AL)DX,格式:OUTDX,AX,功能:(AX)DX,传送偏移地址指令 LEA,格式:LEA OPD,OPS(LEA REG,MEM),功能:将偏移地址送入指定寄存器。,【例】主存偏移地址的获取。,MOV BX,0100H;(BX)=0100H,MOV SI,0210H;(SI)=0210H,LEA BX,1234BX+SI;(BX)=1544H,4)地址传送指令,3.3 算术运算指令,1)加法指令,加1指令 INC,INC OPD;(操作数可以是寄存器或存储器),如:INC BX,即(BX)+1BX,加指令ADD,ADD OPD,OPS即(OPD)+(OPS)OPD,带进位加指令ADC,ADC OPD,OPS,即(OPD)+(OPS)+CFOPD,例无符号双字加法运算。,MOV AX,4652H;(AX)=4652H,ADD AX,0F0F0H;(AX)=3742H,CF=1,MOV DX,0234H;(DX)=0234H,ADC DX,0F0F0H;(DX)=0F325H,CF=0,减1指令DEC,DEC OPD,即(OPD)1OPD,如:DEC CX。即(CX)1CX,2)减运算指令,减指令SUB,SUB OPD,OPS,即(OPD)(OPS)OPD,【例】减法运算。,MOVAX,5678H;(AX)=5678H,SUBAX,1234H;(AX)=4444H,MOVBX,3354H;(BX)=3354H,SUBBX,3340H;(BX)=0014H,SBB OPD,OPS,即(OPD)(OPS)CFOPD,带借位减指令 SBB,比较指令 CMP,CMP OPD,OPS,即(OPD)(OPS)。,【例】比较AL的内容数值大小。,CMP AL,50;(AL)50,JBL1;(AL)=50,(AL)50AL,INC AH;(AH)+1AH,L1:,无符号数乘法指令MUL,MUL OPS,即字节乘法:(AL)*(OPS)AX,字乘法:(AX)*(OPS)DX,AX,【例】无符号数0A3H与11H相乘。,MOVAL,0A3H;(AL)=0A3H,MOVBL,11H;(BL)=11H,MULBL ;(AX)=0AD3H,有符号乘指令IMUL,IMUL OPS,字节乘法:(AL)*(OPS)AX,字乘法:(AX)*(OPS)DX、AX,3)乘运算指令,DIV OPS,字节除法:(AX)/(OPS)AL(商)、AH(余数),字除法:(DX、AX)/(OPS)AX(商)、DX(余数),【例】写出实现无符号数0400H/0B4H运算的程序段。,MOV AX,0400H;(AX)=0400H,MOV BL,0B4H;(BL)=0B4H,DIV BL ;商(AL)=05H,余数(AH)=7CH,4),除运算指令,无符号除指令DIV,有符号除指令IDIV,IDIV OPS,格式:AAA,如果AL的低4位大于9或(AF)=1,则:,(AL)=(AL)+6;(AH)=(AH)+1;,(AF)=(CF)=1;且AL高4位清零。,否则:(CF)=(AF)=0;AL高4位清零。,非压缩的BCD码加法调整指令AAA,5)十进制调整指令,压缩的BCD码加法调整指令DAA,格式:DAA,如果AL寄存器中低4位大于9或辅助进位(AF)=1,则:,(AL)=(AL)+6且(AF)=1;,如果(AL)=0A0H或(CF)=1,则:(AL)=(AL)+60H且(CF)=1,同时,SF、ZF、PF均有影响。,【例】压缩BCD码的加法运算,实现压缩BCD码加法:68+28=96。,MOV AL,68H;,(,AL,),=68H,表示压缩BCD码68,MOV BL,28H;,(,BL,),=28H,表示压缩BCD码28,ADD AL,BL;二进制加法:,(,AL,),=68H+28H=90H,DAA ;十进制调整:,(,AL,),=96H,3.4,逻辑运算和移位指令,1)逻辑运算指令,格式:NOT OPD ;即(OPD)OPD,【例】逻辑非运算。,MOV AX,878AH;(AX)=878AH,NOT AX,;(AX)=7875H,逻辑非指令NOT,逻辑乘(“与”)指令AND,格式:AND OPD,OPS ;即(OPD)(OPS),OPD,【例】将AL中第3位和第7位清零。,MOV AL,0FFH,AND AL,77H,格式:TEST OPD,OPS ;,即(OPD)(OPS),【例】测试AX中的第12位是否为0,不为0则转L,TEST AX,1000H,JNE L,测试指令TEST,逻辑加(“或”)指令OR,格式:OR OPD,OPS ;即(OPD),(OPS),OPD,逻辑“异或”指令XOR,格式:XOR OPD,OPS;,即(OPD)(OPS),OPD,11=0,10=1,01=1,00=0。,2)移位指令,算术左移和逻辑左移指令SAL(SHL),格式:SAL OPD,1 或SHL OPD,1,SAL OPD,CL或SHL OPD,CL,算术右移指令SAR,格式:SAR OPD,1或SAR OPD,CL,逻辑右移指令SHR,格式:SHR OPD,1或SHR OPD,CL,循环左移指令ROL,格式:ROL OPD,1或ROL LPD,CL,循环右移指令ROR,格式:ROR OPD,1或ROR OPD,CL,带进位的循环左移指令RCL,格式:RCL OPD,1或RCL OPD,CL,带进位的循环右移指令RCR,格式:RCR OPD,1或RCR OPD,CL,
展开阅读全文