Intel80868088CPU的指令系统.ppt

上传人:牧羊曲112 文档编号:6508264 上传时间:2023-11-07 格式:PPT 页数:47 大小:320.49KB
返回 下载 相关 举报
Intel80868088CPU的指令系统.ppt_第1页
第1页 / 共47页
Intel80868088CPU的指令系统.ppt_第2页
第2页 / 共47页
Intel80868088CPU的指令系统.ppt_第3页
第3页 / 共47页
Intel80868088CPU的指令系统.ppt_第4页
第4页 / 共47页
Intel80868088CPU的指令系统.ppt_第5页
第5页 / 共47页
点击查看更多>>
资源描述

《Intel80868088CPU的指令系统.ppt》由会员分享,可在线阅读,更多相关《Intel80868088CPU的指令系统.ppt(47页珍藏版)》请在三一办公上搜索。

1、第3章 8086/8088指令系统,3.3 指令系统,可分成如下6类:(1)数据传送类(2)算术运算类(3)位运算类(4)控制类(5)I/O类(6)串操作类(7)转移类,符号及其含义,OPRD 泛指各种类型的操作数mem 存储器操作数acc 累加器操作数dest 目的操作数src 源操作数disp 8 位或 16 位偏移量,可用符号地址表示DATA 8 位或 16 位立即数PORT 输入/输出端口,可用数字或表达式表示()表示寄存器的内容或存储单元的内容 表示偏移地址,3.3.1 数据传送指令,数据传送指令又可分为如下四种:通用传送 目标地址传送 标志传送 输入输出,1.通用传送指令(1)MO

2、V dest,src;destsrc 传送的是字节还是字取决于指令中涉及的寄存器是8位还是16位。具体来说可实现:MOV mem/reg1,mem/reg2 指令中两操作数中至少有一个为寄存器 例:MOVCL,DL MOVAX,BX MOVSI,CX MOVCL,BX+5,MOV reg,data;立即数送寄存器 MOV mem,data;立即数送存储单元 MOV acc,mem;存储单元送累加器 MOV mem,acc;累加器送存储单元 MOV segreg,mem/reg;存储单元/寄存器送 段寄存器 MOV mem/reg,segreg;段寄存器送存储单 元/寄存器,MOV指令使用规则:

3、,1)IP不能作目的寄存器2)不允许memmem3)不允许regseg4)立即数不允许作为目的操作数5)不允许segreg立即数6)源操作数与目的操作数类型要一致,几个不能传送的解决办法:用AX作桥梁存储器存储器:MOV AX,MEM1 MOV MEM2,AX段寄存器段寄存器:MOV AX,DS MOV ES,AX段寄存器立即数:MOV AX,DATA MOV DS,AX,应用举例:将1000H开始的100个存储单元 全部填充为ASCII码2AH(*)。,程序段如下:MOV DI,1000H MOV CX,64H MOV AL,2AHAGAIN:MOV DI,AL INC DI DEC CX

4、JNZ AGAIN HLT,上程序段存放在代码段中,設(CS)=109EH,则各条指令存放地址如下:,CS:IP 指令109E:0100 MOV DI,1000H109E:0103 MOV CX,64H109E:0106 MOV AL,2AH109E:0108 MOV DI,AL109E:010A INC DI109E:010B DEC CX109E:010C JNZ 0108109E:010E HLT109E:0110,什么是堆栈?按“后进先出(LIFO)”方式工作的存储区域。堆栈以字为单位进行压入弹出操作。为什么要设置堆栈?为什么要按“后进先出”方式工作?参见下图,(2)堆栈操作指令,主程

5、序,IP,继续执行,主程序,执行子程序,转子程序,压栈,弹出,返回主程序,主程序,IP,IP(下),继续执行,主程序,转子程序1,返回主程序,IP,执行子程序 2,转子程序2,返回子程序1,IP(下),执行子程序1,继续执行,子程序1,(a),(b),子程序调用示意图,(a)主程序调子程序;(b)子程序嵌套示意图,压栈,弹出,IP(下),规定由SS指示堆栈段的段基址,堆栈指针SP始终指向堆栈的顶部,SP的初值规定了所用堆栈区的大小。堆栈的最高地址叫栈底。,SP,SS,堆栈段,进栈方向,退栈方向,栈底,栈顶,压栈指令 PUSH src;src为16位操作数 例:PUSHAX;将AX内容压栈 执行

6、操作:(SP)-1高字节AH(SP)-2低字节AL(SP)(SP)-2注意:立即数不能进栈,设(AX)=1020H,执行示意图,低地址,存储区(SS段),执行前(AX)=1020,(SP),存储区(SS段),进栈方向,执行后,20,10,(AL),(AH),PUSH AX指令执行示意图,(SP)-2,(SP),高地址,低地址,高地址,(SP)-1,压栈指令的格式为:PUSH reg PUSH mem/reg PUSH segreg例如:PUSH AX PUSH BX PUSH DS,注意进栈方向是高地址向低地址发展。,弹出指令 POPdest例:POPBX;将栈顶内容弹至BX 执行操作:(BL

7、)(SP)(BH)(SP)+1(SP)(SP)+2,POP BX 的执行示意图如下图所示,低地址,存储区(SS段),出栈方向,执行前,20,10,POP BX指令执行示意图,(SP),存储区(SS段),执行后(BX)=1020,(SP),(SP)+1,(SP)+2,BX,20,10,高地址,低地址,高地址,堆栈指令使用时应注意几点:堆栈操作总是按字进行不能从栈顶弹出一个字给CS堆栈指针为SS:SP,SP永远指向栈顶SP自动进行增减量(-2,+2),格式:XCHG reg,mem/reg功能:交换两操作数的内容。要求:1.两操作数中必须有一个在寄存器中;2.操作数不能为段寄存器和立即数;3.源和

8、目地操作数类型要一致。举例:XCHGAX,BX XCHG2000,CL,(3)交换指令XCHG,(4)查表指令XLAT 执行的操作:AL(BX)+(AL)又叫查表转换指令,它可根据表项序号查出表中对应代码的内容。执行时先将表的首地址(偏移地址)送到BX中,表项序号存于AL中。例如:内存数据段有一张16进制数的ASCII码表,设首地址为2000H,如欲查出表中第11个代码(代码序号从0开始)即十六进制数B的ASCII码。ASCII表在DS段中,并假设(DS)=4000H。见下页图。,30,31,32,.,39,41,42,.,45,46,.,42000H+0,42000H+0BH,0,1,2,9

9、,A,B,E,F,十六进制数ASCII码表,存储器,则可用如下几条指令实现:,MOV BX,2000H;(BX)表首地址MOV AL,0BH;(AL)序号XALT;查表转换执行后得到:(AL)=42H=B,注意:转换表长度最大为256个表项(字节)。,(5)字节-字转换指令,格式:CBW;把AL的符号位复制到AH CWD;把AX的符号位复制到DX用途:用于有符号数的除法。例如:(AL)=A7H,则执行CBW后,AH的内 容为FFH。,2.输入输出(I/O)指令,只限于用累加器AL或AX来传送信息。功能:(累加器)I/O端口(1)输入指令IN格式:IN acc,PORT;PORT端口号0255

10、IN acc,DX;DX表示的端口范围达64K例:IN AL,80H;(AL)(80H端口)IN AL,DX;(AL)(DX),例:OUT 68H,AX;(69H,68H)(AX)OUT DX,AL;(DX)(AL)在使用间接寻址的IN/OUT指令时,要事先用传送指令把I/O端口号设置到DX寄存器,如:MOV DX,220H IN AL,DX;将220H端口内容读入AL,(2)输出指令OUT格式:OUT port,acc OUT DX,acc,3.地址传送指令共有三条:格式:LEA reg,mem;将指定存储器的16位偏移 地址送指定寄存器 LDS reg,mem32;DS:reg(mem开始

11、的四 个内存单元)LES reg,mem32;同上,但DS改为ES 要求源操作数必须是一个内存操作数,目的操作数必须是一个16位的通用寄存器。,设:(SI)=1000H则执行该指令后,(BX)=1010H注意以下两条指令差别:LEA BX,BUFFER MOV BX,BUFFER前者表示将符号地址为BUFFER的存储单元的偏移地址取到 BX中;后者表示将BUFFER存储单元中的内容取到 BX中.,例:LEABX,SI+10H,下面两条指令等效:LEA BX,BUFFER MOV BX,OFFSET BUFFER其中OFFSET BUFFER表示存储器单元BUFFER的偏移地址。二者都可用于取存

12、储器单元的偏移地址,但LEA指令可以取动态的地址,OFFSET只能取静态的地址。,4.标志传送指令共有四条:(1)读标志指令LAHF LAHF把标志寄存器低8位中的5个标志位传送到AH中的指定位,如下图所示:,OF,DF,IF,TF,SF,ZF,AF,PF,CF,AH,LAHF指令的功能,FLAG,(2)设置标志指令SAHF SAHF的功能与LAHF的功能正好相反,用图来示意,只要将上图中5个箭头方向反一下即可。,OF,DF,IF,TF,SF,ZF,AF,PF,CF,AH,SAHF指令的功能,FLAG,执行的操作:(SP)-1标志寄存器高8位(SP)-2标志寄存器低8位(SP)(SP)-2(4

13、)从栈顶弹出标志寄存器指令POPF 执行的操作:标志寄存器低8位(SP)标志寄存器高8位(SP)+1(SP)(SP)+2PUSHF和POPF指令用于保护和恢复标志寄存器内容。,(3)把标志寄存器推入栈顶指令PUSHF,例如:PUSHAX PUSHCX PUSHF;保护标志寄存器内容;这段程序要用到AX,CX以及标志位 POPF;恢复标志寄存器内容 POPCX POPAX,.,数据传送指令中,除SAHF和POPF这两条指令外,其余所有指令均不影响标志位。,3.3.2 算术运算指令,涉及两种类型数据:无符号数和有符号数。对加减法指令,无符号和有符号数可采用同一套指令,但应注意:参加的操作数必须都是

14、无符号数或都是有符号数。需使用不同的标志位来检查无符号数和有符号数的运算结果是否溢出。,两个8位数相加时有4种情况:,共有5条:(1)不带进位的加法指令ADD 格式:ADD dest,src;dest(dest)+(src)ADD mem/reg,data ADD mem/reg1,mem/reg2【功能】实现两个操作数的相加,其结果送回目的操作数中。,1.加法指令,加法指令对操作数的要求如下:可以是字节(8位),也可以是字(16位),但二者必须一致。源操作数可以是立即数。可以是无符号数,也可以是有符号数,但二者应一致。不允许都是存储器操作数。不允许是段寄存器。,例:,ADDAL,30H AD

15、DAX,BX+20H ADDCX,SI ADDDI,200HADD指令对标志位(指状态标志)都有影响。,例:,ADD CL,20H;CL(CL)+20H ADD AX,SI;AX(AX)+(SI)ADD BX+2,AL;(BX+2)(BX)+2)+(AL)ADD DX,BX+SI;DX(DX)+(BX)+(SI)ADD AX,CL;错误!操作数类型应一致 ADD SI,BX;错误!不允许两个操作数都是存储器 ADD DS,AX;错误!不允许把段寄存器作为操作数,(2)带进位位的加法指令ADC,【格式及操作】ADC dest,src;dest(dest)+(src)+(CF)【功能】源操作数de

16、st、目的操作数src、进位标志CF三者相加,结果送回目的操作数中。ADC指令在格式、功能及对标志位的影响方面都与ADD指令基本相同,只是CF也要参加求和运算。,(2)带进位位的加法指令ADC,ADC指令在形式上和功能上都有与ADD类似,只是相加时还要包括进位标志CF的内容,例如:ADC AL,68H;AL(AL)+68H+(CF)ADC AX,CX;AX(AX)+(CX)+(CF)ADC BX,DI;BX(BX)+DI+1DI+(CF),例:,设CF=1,写出以下指令执行后的结果。MOV AL,7EHADC AL,ABH 指令执行后:AL=7EH+ABH+1=2AH,且CF=1。,例:有两个

17、4字节的无符号数相加:2C56F8AC+309E47BE=?设被加数、加数分别存放在BUFFER1及BUFFER2开始的两个存储区内,结果放回BUFFER1存储区,如下页图所示。因CPU只能进行8位或16位的加法运算,为此可将加法分4次进行。,ADC指令主要用于多字节加法运算中,56H,2CH,BEH,47H,BUFFER1,BUFFER2,ACH,F8H,9EH,30H,被加数,加数,数据段,多字节加法示意图,.,.,程序段如下:MOV CX,4;置循环次数 MOV SI,0;置SI初值为零 CLC;清进位标志CFLL:MOV AL,BUFFER2SI ADC BUFFER1SI,AL;带进位加 INC SI;(SI)+1 DEC CX;(CX)-1 JNZ LL;若(CX)0,则转LL,例:,求两个32位无符号数0107A379H与10067E4FH二者之和。MOV DX,0107H;第一个数高16位传送到DX MOV AX,A379H;第一个数低16位传送到AX MOV BX,1006H;第二个数高16位传送到BX MOV CX,7E4FH;第二个数低16位传送到CX ADD AX,CX;低16位相加,进位在CF中 ADC DX,BX;高16位相加,并加上低16位的进位 相加的最后结果为:110E21C8H。,

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

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


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号