微机原理-寻址方式指令系统.ppt

上传人:小飞机 文档编号:6363365 上传时间:2023-10-21 格式:PPT 页数:71 大小:358KB
返回 下载 相关 举报
微机原理-寻址方式指令系统.ppt_第1页
第1页 / 共71页
微机原理-寻址方式指令系统.ppt_第2页
第2页 / 共71页
微机原理-寻址方式指令系统.ppt_第3页
第3页 / 共71页
微机原理-寻址方式指令系统.ppt_第4页
第4页 / 共71页
微机原理-寻址方式指令系统.ppt_第5页
第5页 / 共71页
点击查看更多>>
资源描述

《微机原理-寻址方式指令系统.ppt》由会员分享,可在线阅读,更多相关《微机原理-寻址方式指令系统.ppt(71页珍藏版)》请在三一办公上搜索。

1、微机原理及应用,聊城大学物理系技术物理实验室,2002年10月7日,第2章8086/8088的寻址方式和指令系统,指令执行时间2.3 8086/8088指令系统2.3.1 数据传送指令2.3.2 算术运算指令作业:习题集P6 2-2 2-5 2-8 2-10 2-17 2-25 2-30,2.3 8086/8088指令系统,可分成如下6类:数据传送指令算术运算指令逻辑运算和位移指令串操作指令控制转移指令处理器控制指令,2.3.1 数据传送指令,用来实现:寄寄,CPU存CPUI/O 之间的数据传送。这是一种最基本、最重要的操作。这类指令又可分为如下四种:通用传送累加器专用传送地址传送标志传送,1

2、.通用传送指令(1)MOV dst,src;dstsrc 传送的是字节还是字取决于指令中涉及的寄存器是8位还是16位。具体来说可实现:MOV mem/reg1,mem/reg2式中两操作数中至少有一个为寄存器 例:MOVCL,DLMOVAX,BXMOVSI,CXMOVCL,BX+5,MOVreg,data;立即数送寄存器MOVmem/reg,dataMOVac,mem;存储单元送累加器MOVmem,ac;累加器送存储单元MOVsegreg,mem/reg;段寄 存/寄MOVmem/reg,segreg;存/寄 段寄,对MOV指令小结,可执行:寄寄;但CS,IP不能作目的寄存器寄存;不能:存存寄

3、,存段寄;不能:段寄段寄寄立即数;不能:段寄立即数存立即数,几个不能送的解决办法:MOVAL,mem1;通过寄存器AL作桥梁MOVmem2,AL;用来解决存存MOVAX,DS;通过AX解决:MOVES,AX;段寄段寄MOVAX,data;通过AX解决:MOVDS,AX;段寄立即数,举例:将1000H开始的100个存储单元送上ASCII码2AH(*)。程序段如下:MOVSI,1000H MOVCX,64H MOVAL,2AHAGAIN:MOVSI,AL INCSI DECCX JNZ AGAIN INT20H;若(CX)=0,返回DOS,上程序段存放在码段中,设(CS)=109EH,则各条指令存

4、放地址如下:109E:0100 MOV SI,1000H109E:0103 MOV CX,64H109E:0106 MOV AL,2AH109E:0108 MOV SI,AL109E:010A INC SI109E:010B DEC CX109E:010C JNZ 0108109E:010E INT 20H109E:0110,送上2AH(*)后。数据段中相应存储单元的内容改变如下:DS:1000 2A 2A 2A 2A 2A 2A 2A 2A-2A 2A 2A 2A 2A 2A 2A 2A*DS:1010 2A 2A 2A 2A 2A 2A 2A 2A-2A 2A 2A 2A 2A 2A 2A

5、 2A*DS:1020 2A 2A 2A 2A 2A 2A 2A 2A-2A 2A 2A 2A 2A 2A 2A 2A*DS:1030 2A 2A 2A 2A 2A 2A 2A 2A-2A 2A 2A 2A 2A 2A 2A 2A*DS:1040 2A 2A 2A 2A 2A 2A 2A 2A-2A 2A 2A 2A 2A 2A 2A 2A*DS:1050 2A 2A 2A 2A 2A 2A 2A 2A-2A 2A 2A 2A 2A 2A 2A 2A*DS:1060 2A 2A 2A 2A 00 00 00 00 00 00 00 00 00 00 00 00*,堆栈:在内存中开辟若干单元作为

6、栈区,按 后进先出 方式工作。为什么要设置堆栈?为什么要按 后进先出 方式工作?参见图2-7,“,“,”,”,(2)堆栈操作指令,主程序,IP,IP(下),继续执行,主程序,执行子程序,转子程序,压栈,弹出,返回主程序,主程序,IP,IP(下),继续执行,主程序,转子程序1,返回主程序,IP,执行子程序 2,转子程序2,返回子程序1,IP(下),执行子程序1,继续执行,子程序1,(a),(b),图2-7 子程序调用示意图,(a)主程序调子程序;(b)子程序嵌套示意图,堆栈规定设置在堆栈段SS内,堆栈指针SP始终指向堆栈的顶部,SP的初值规定了所用堆栈区的大小。压栈指令 PUSH src例:PU

7、SHAX;将AX内容压栈 执行操作:(SP)-1高字节AH(SP)-2低字节AL(SP)(SP)-2,设(AX)=1020H,执行示意图如图,(SP),低地址,存储区(SS段),执行前(AX)=1020,(SP),低地址,存储区(SS段),进栈方向,执行后,20,10,AL,AH,图2-8 PUSH AX指令执行示意图,2-8,图2-8 PUSH AX指令执行示意图,(SP)-1,(SP)-2,压栈指令的格式为:PUSH regPUSH mem/regPUSH segreg 弹出指令POPdst例:POPBX;将栈顶内容弹至BX执行操作:(BL)(SP)(BH)(SP)+1(SP)(SP)+2

8、,注意进栈方向是高地址向低地址发展。,POPBX 的执行示意图如图2-9所示,(SP),低地址,存储区(SS段),出栈方向,执行前,20,10,图2-9 POP BX指令执行示意图,(SP),低地址,存储区(SS段),执行后(BX)=1020,20,10,(SP)+1,(SP)+2,POP指令的格式同PUSH指令,堆栈指令使用时应注意两点:堆栈操作总是按字进行不能从栈顶弹出一个字给CS,格式为:XCHG reg,mem/reg要求两操作数中必须有一个在寄存器中,不允许使用段寄存器。举例:XCHGAX,BX XCHG2000,CL,(3)交换指令XCHG,2.累加器专用传送指令,所谓专用只限于用

9、累加器AL或AX来传送信息。完成的操作:CPUI/O端口(1)输入指令IN格式:IN ac,port;port端口号0255H IN ac,DX;DX表示的端口范围达64K例:IN AL,80H;(AL)(80H)IN AX,DX;(AX)((DX)+1,(DX)),例:OUT 68H,AX;(68+1,68H)(AX)OUT DX,AL;(DX)(AL)在使用间接的IN/OUT指令时,在指令执行前,应先用传送指令对DX寄存器设置好端口号,如:MOVDX,220HINAL,DX;将220H端口内容读 入AL累加器,(2)输出指令OUT格式:OUT port,ac OUT DX,ac,(3)换码

10、指令XLAT 执行的操作:(AL)(BX)+(AL)又叫查表转换指令,它可根据表中代码的序号查出表中对应代码的内容。执行时先将表的首地址(偏移地址)送到BX中,代码序号存于AL中。例如:内存数据段有一张16进制数的ASCII码表,设首地址为2000H,如图2-10所示,如欲查出表中第11个代码(代码序号从0开始)即 B 的ASCII码,(表中地址设(DS)=4000H),30,31,32,.,39,41,42,.,45,46,.,42000H+0,42000H+11,0,1,2,9,A,B,E,F,图2-10 十六进制数ASCII码表,存储器,MOV BX,2000H;(BX)表首地址 MOV

11、 AL,0BH;(AL)序号 XALT;查表转换 执行后得到:(AL)=42H 3。地址传送指令 共有三条,它们是:(1)LEA reg,mem;将指定存储器的16 位偏址送指定寄存器.指令要求源操作数必须是一个内存操作数,目的操作数必须是一个16位的通用寄存器。,则可用如下几条指令实现:,设:(SI)=1000H则执行该指令后,(BX)=1010H注意以下两条指令差别:LEABX,BUFFER 和 MOV BX,BUFFER下面两条指令等效:LEA BX,BUFFER 和 MOV BX,OFFSET BUFFER其中OFFSET BUFFER表示存储器BUFFER的偏移地址。,例:LEABX

12、,SI+10H,(2)LDS reg,mem32;把指定存储器的内 容送入指定的寄存器 传送的是一个32位的地址指针,将存储器的前两个单元的内容(16位偏址)送入指定的寄存器,后两个单元的内容(段地址)送入DS。例:LDSSI,0100H若指令执行前(DS)=3000H,(30100H)=0200H(30102H)=1000H,则指令执行后(SI)=0200H,(DS)=1000H,与LDS指令类似,将32位地址指针送指定的寄存器(常指定为DI)及ES.4。标志传送指令 共有四条:(1)读标志指令LAHF 本指令把标志寄存器低8位中的5个标志位传送到AH中的指定位,如下图2-11所示,(3)L

13、ES reg,mem32,OF,DF,IF,TF,SF,ZF,AF,PF,CF,AH,FLAG,图2-11 LAHF指令的功能,(2)设置标志指令SAHF SAHF的功能与LAHF的功能正好相反,用图来示意,只要将图2-11中5个箭头方向反一下即可。,执行的操作:(SP)-1标志寄存器高8位(SP)-2标志寄存器低8位(SP)(SP)-2(4)从栈顶弹出标志寄存器指令POPF 执行的操作:标志寄存器低8位(SP)标志寄存器高8位(SP)+1(SP)(SP)+2 PUSHF和POPF指令用于保护和恢复标志寄存器内容,(3)把标志寄存器推入栈顶指令PUSHF,例如:PUSHAX PUSHCX PU

14、SHF.这段程序要用到AX,CX以及标.志位,可能改变.POPF;恢复时,后入栈先弹出 POPCX POPAX 关于数据传送指令对标志位的影响,除SAHF和POPF这两条指令外,其余所有指令均不影响标志位。,2.3.2 算术运算指令,算术运算指令涉及两种类型数据,即无符号数和有符号数。对加法指令和减法指令而言,无符号和有符号数可采用同一套指令,其条件有两个:一是参加的操作数必须同为无符号数或同为有符号数。二是要采用不同标志位来检查无符号数和有符号数的运算结果是否溢出。,下面看一下两个8位数相加时的4种情况:,无符号数和有符号数均不溢出二进制相加 无符号数加有符号数加 0000 1000 8+8

15、+0001 1110+30+(+30)0010 0110 38+38 结果38 CF=0 OF=0,无符号数溢出 0000 1000 8+8+1111 1101+253+(-3)10000 0101 261+5 结果5 CF=1OF=0 有符号数溢出 0000 1000 8+8+0111 1101+125+(+125)1000 0101 133+133结果-123 CF=0 OF=1(补码表示),无符号数和有符号数均溢出 1000 1000 136-120+1111 0111+247+(-9)10111 1111 383-129 结果127 CF=1 OF=1上面四种情况清楚说明,CF标志可用

16、来表示无符号数的溢出,OF标志可用来表示有符号数的溢出。需要指出的是有符号数的溢出是一种出错,在运算过程中应当避免。,共有5条指令:(1)不带进位的加法指令ADD.格式有:ADDac,data ADDmem/reg,data ADDmem/reg1,mem/reg2例:ADDAL,30H ADDAX,BX+20H ADDCX,SI ADDDI,200HADD指令对标志位(指状态标志)都有影响.,1.加法指令,(2)带进位位的加法指令ADC,ADC指令在形式上和功能上都有与ADD类似,只是在相加时要把进位标志的现行值CF加到和中,例如:ADC AL,68H ADC AX,CX ADC BX,DI

17、,例:有两个4字节的无符号数相加:2C56F8ACH+309E47BEH=?设被加数、加数分别存放在BUFFER1及BUFFER2开始的两个存储区内,要求和放回BUFFER1存储区,如下页图所示。因CPU只能进行8位或16位的加法运算,为此可将加法分4次进行,ADC指令主要用于多字节加法运算中.,56H,2CH,BEH,47H,.,BUFFER1,BUFFER2,ACH,F8H,9EH,30H,被加数,加数,数据段,图2-12 多字节加法示意图,.,程序段如下:MOV CX,4;置循环次数 MOV SI,0;置SI初值为零 CLC;清进位标志CFAGAIN:MOV AL,BUFFER2SI A

18、DC BUFFER1SI,AL INC SI DEC CX JNZ AGAIN INT 20H其中:MOV AL,BUFFER2SI和 MOV AL,BUFFER2+SI等效思考:若最高位有进位,如何改?,2.3.3 算术运算指令,1.加法指令 2.减法指令 3.乘法指令 4.除法指令2.3.3 逻辑运算和移位指令,格式:INCreg INCreg/mem 例:INC AL INCBYTE PTRBX+4本指令除CF外,对其余标志均有影响。(4)BCD码的加法十进制调正指令AAA和DAAAAA 本指令对在AL中的由两个未组合的BCD码相加后的结果进行调正,得到一个正确的未组合的BCD码。,(3

19、)加1指令INC(单操作数指令),例1:MOV AL,08 0000 1000 ADD AL,07+0000 0111 0000 1111 结果应为15,而计算机相加为0FH,原因在于运算过程中,如遇到低4位往高4位产生进位时(此时AF=1)按逢十六进一的规则,但BCD码要求逢十进一,因此只要产生进位就会丢掉一个6,这就要进行加6调正。,实际上当低4位的结果9(即AF之间)时,也应进行加6调正。如上面的结果进行加6得:0000 1111+0000 0110 0001 0101,如AL的低4位9或AF=1,则:(AL)(AL)+6,(AH)(AH)+1,AF1(AL)(AL)0FH)CFAF 否

20、则(AL)(AL)0FH)再来看前例,用如下程序段可得正确结果 MOVAL,08H ADDAL,07H AAA,AAA指令的调正步骤:,例2:计算2659+3619=?设被加数和加数的每一位都以ASCII码形式存放在内存中,低位在前,高位在后,另留出5个单元存相加的结果。如下页图2-13示,36H,32H,39H,31H,.,STRING1,STRING2,39H,35H,36H,33H,被加数,加数,数据段,9,5,6,2,9,1,6,3,SUM,结果,图2-13,程序段如右:LEASI,STRING1 LEADI,STRING2 LEABX,SUM MOVCX,4 CLC AGAIN:MO

21、VAL,SI ADCAL,DI AAA MOVBX,AL INCSI INCDI INCBX DECCX JNZAGAIN,根据程序请为SUM填写出结果,若最高位有进位,程序如何修改?从此例不难看出,AAA又被称为加法的ASCII调正指令。AAA指令只影响AF和CF,其余标志无定义。,DAA 两个组合的BCD码相加结果在AL中,通过DAA调正得到一个正确的组合的BCD码.指令调正方法:若AL的低4位9或AF=1 则(AL)(AL)+6,且AF1 若AL的高4位9或CF=1 则(AL)(AL)+60H,且CF1与AAA不同,DAA指令不改变AH的内容。DAA指令对OF无定义,但影响所有其它标志。

22、,50,举例:0100 1000 MOV AL,48H+0111 0100 MOV BL,74H 1011 1100 ADD AL,BL+0110 0110 DAA 1 0010 0010(进位)执行ADD后,(AL)=BCH,高4位、低4位均大于9,故DAA指令执行加66调正,最后结果为:(AL)=22H,CF=1,AF=1使用AAA和DAA这两条指令时,应紧跟在ADD或ADC指令之后。,8086/8088共有7条减法指令(1)不考虑借位的减法指令SUB其操作数格式同ADD,即 SUBac,data SUBmem/reg,data SUBmem/reg1,mem/reg2例:SUBAL,60

23、H SUBBX+20H,5678H SUBAX,CX,2.减法指令,本指令在形式上和功能上都和SUB类似,只是相减时还应减去CF的值。例:SBBAX,CX SBBWORD PTRSI,2080H SBB指令主要用于多字节的减法。因无符号数的小数减大数时,不够减而产生借位,此时进位标志CF=1。,(2)考虑借位的减法指令SBB,操作数格式:DECreg DECmem/reg例:DECCL DECBYTE PTRDI+2 以上三条指令除DEC不影响CF外,都对标志位有影响。,(3)减1指令DEC,因对一个操作数取补码相当于用0减去此操作数,故NEG执行的是减法运算。例:NEGAL;对AL中的数取补

24、码 若(AL)=0,执行后(AL)=0,CF=0 若(AL)=FCH,执行后(AL)=04H,CF=1 FCH是-4的补码,执行后(AL)=04,故利用NEG指令可得到负数的绝对值。如果操作数的值为80H(-128)或8000H(-32768),则执行求补指令后,结果不变,但OF=1。本指令对6个标志位均有影响.,(4)求补指令NEG,CMP也是执行两个操作数相减,但不送回结果,其结果只反映在标志位上。例:CMPAL,0AH;AL与0AH比较 CMPCX,SI;CX与SI比较 CMPDI,BX+03;DI与存储器比较 比较指令影响所有标志位。如何根据标志位来判断两个操作数的比较结果呢?若两个所

25、比较的数相等,则ZF=1,否则ZF=0 这样根据ZF就可判断两个数是否相等。,(5)比较指令CMP(操作数格式同SUB),断谁大谁小呢?分两种情况考虑:比较的是两个无符号数 若CF=0,则被减数大,因大数减小数无须借位.若CF=1,则被减数小.比较的是两个有符号数 若两个数都是正数或负数时,相减不溢出(即OF=0),可用SF来判断,若SF=0,表示被减数大,SF=1则反之.,若两个数不相等,如何根据标志位来判,此时不能单看SF,还需考虑OF,判别条件:OF=0时,若SF=0被减数大;若SF=1减数大.OF=1时,若SF=1被减数大;若SF=0减数大.也可归纳为:OFSF=0时(或SF=OF),

26、被减数大.OFSF=1时(或SF=OF),减数大.比较指令在使用时,一般在其后紧跟一条条件转移指令,判断比较结果的转向。例如有符号数比较结果的条件转移指令:,若比较的数中有一个为正,另一个为负,JG/JNLE;大于转移,条件OFSF=0,且ZF=0JLE/JNG;小于或等于转移,条件OFSF=1 或ZF=1举例:比较AL、BL、CL中带符号数的大小,将最小数放在AL中。程序段如下:CMP AL,BL;AL和BL比较 JNG BBB;若ALBL,则转 XCHG AL,BL;若ALBL,则交换BBB:CMP AL,CL;AL和CL比较 JNG CCC;若ALCL,则转 XCHG AL,CL;若AL

27、CL,则交换CCC:INT 20H;返回DOS,AAS 对AL中由两个未组合的BCD码相减的结 果进行调正。调正操作为:若AL的低4位9或AF=1,则:(AL)(AL)-6,(AH)(AH)-1,AF1(AL)(AL)0FH)CFAF 否则:(AL)(AL)0FH),(6)BCD码的减法十进制调正指令AAS和DAS,举例:16-8=?0000 0110 MOV AX,0106H-0000 1000 MOV BL,08H 1111 1110 SUB AL,BL-0000 0110 AAS 1111 1000 0000 1111 0000 1000结果为:(AL)=08H,(AH)=0,CF=AF

28、=1,结果应在AL中。调正操作为:若AL的低4位9或AF=1,则:(AL)(AL)-6,且AF1 若AL的高4位9或CF=1,则:(AL)(AL)-60H,且CF1 DAS对OF无定义,但影响其余标志位。AAS和DAS这两条指令在使用时要求紧跟在减法指令之后。,DAS 对两个组合的BCD码减法进行调正,进行乘法时:8位*8位16位乘积16位*16位32位乘积(1)无符号数的乘法指令MUL(MEM/REG)使用乘法指令对被乘数和乘积的存放地方均有规定:被乘数存放地方 乘积存放地方对字节乘 AL AX对字乘 AX DX,AX例:MUL BL;AL*BL,乘积在AX中 MULCX;AX*CX,乘积在

29、DX和AX中 MULBYTE PTRBX,3.乘法指令,该指令在功能上和形式上与MUL类似,只是要求两乘数均为有符号数。例:IMULCL;AL中有符号数*CL中 有符号数 IMULWORD PTRSI 举例:设(AL)=FEH,(CL)=11H 将FEH及11H均看做无符号数 执行MUL CL(可用二进制相乘算出来)得(AX)=10DEH=4318,(2)有符号数乘法指令IMUL(MEM/REG),将FEH及11H均看做有符号数 执行IMUL CL 得(AX)=FFDEH=-34 其实这个结果也可以手算出来,FEH是用补码表示的,它的真值为-2,先将两个数的绝对值相乘:0000 0010*00

30、01 0001 0000 0010 0000 0010 0000 0000 0010 0010 因负数乘正数乘积符号为负,需将上乘积绝对值取补码,得:1111 1111 1101 1110,(3)BCD码的乘法十进制调正指令AAM 先执行MUL把两个非组合的BCD码相乘,结果在AX中,再执行AAM进行调正,得到正确的结果。调正的操作为:(AL)/0AH,(AH)商(AL)余数,例:要求进行如下十进制乘法运算:7*8=?可编程如下:MOVAL,07H;(AL)=07HMOVCL,08H;(CL)=08HMULCL;(AX)=0038HAAM;(AH)=05H,(AL)=06H 所得结果为非组合的

31、BCD码。该指令影响标志位PF、SF、ZF,对其余标志位无定义。,4.除法指令,8086/8088 CPU执行除法运算,要求被除数字长为除数字长的两倍,并对被除数、商及余数存放地方有如下规定:被除数商余数字节除法 AX AL AH字除法DX:AXAX DX,例:DIV CL;AX除以CL DIV WORD PTRBX;DX:AX除以 BX,BX+1两存储器(16位)若除数为零或AL中商大于FFH,(或AX中商大于FFFFH),则CPU产生一个类型0的内部中断。(2)有符号数除法指令IDIV(MEM/REG)本指令除要求有符号数相除外,在功能上和形式上与DIV类似。当然其商及余数均为有符号数,且

32、余数符号总是与被除数符号相同。,(1)无符号数除法指令DIV(MEM/REG),商-6,余数+1或商-7,余数-3 给出的结果为前一种:举例:IDIV BX;DX:AX除以BX IDIV BYTE PTRSI;AX除以存储器(8位)字节相除若商超过了-128+127,或字相除,若商超过了-32768+32767的范围,则自动产生一个类型0的中断。这两条除法指令对标志位无影响。,例:25除-4有两种结果:,下面讨论扩展指令,前面已指出除法运算要求被除数字长是除数字长的两倍,若不满足则需对被除数进行扩展,否则产生错误。对于无符号数除法扩展很简单,只需将AH或DX清零即可。对有符号数而言,则是符号位的扩展。共提供了两条指令。,指令的操作为:若(AL)80H则(AH)0若(AL)80H则(AH)FF(5)将字扩展为双字的指令CWD指令的操作为:若(AX)8000H则(DX)0 若(AX)8000H则(DX)FFFFH这两条扩展指令均不影响标志位。,(4)将字节扩展成字的指令CBW,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号