微机原理与接口技术徐惠民第3章.ppt
《微机原理与接口技术徐惠民第3章.ppt》由会员分享,可在线阅读,更多相关《微机原理与接口技术徐惠民第3章.ppt(91页珍藏版)》请在三一办公上搜索。
1、微机原理与接口技术,第三章 8088/8086的指令系统,第三章 8088/8086的指令系统,主要内容各种寻址方式8086/8088的指令系统,指令系统:一台计算机所能识别和执行的全部 指令的集合。指令的组成:操作码说明计算机要执行哪种操作,如传送、运算、移位、跳转等操作,它是指令中不可缺少的组成部分。操作数是指令执行的参与者,即各种操作的对象。有些指令不需要操作数,通常的指令都有一个或两个操作数,也有个别指令有3个甚至4个操作数。,指令的表示:二进制代码 0000001011001111B(机器指令)助记符 ADDCL,BH(汇编指令),3.1 8086/8088的寻址方式,根据指令内容确
2、定操作数地址的过程,称为寻址。根据寻址计算所得到的操作数地址叫做操作数的有效地址(EA),也就是段内偏移地址。有效地址还需要与相应的段基地址组合才是20位的物理地址(PA),该工作由CPU完成。操作数的来源:(1)直接包含在指令中;(2)在CPU的某寄存器中;(3)在内存中。,3.1 8086/8088的寻址方式,寻址方式有:,1、立即寻址 这种寻址的操作数直接放在指令中。不需要访问存储器。例:MOV AL,34H MOV AX,1234H 需要注意在16位操作时,两个 字节数据的高低位存储位置。立即数只能是源操作数。立即寻址主要用来给寄存器或存储单元赋初值。,注意:在8086/8088的汇编
3、指令中,逗号前的操作数为目的操作数,逗号后的操作数为源操作数。,3.1 8086/8088的寻址方式,2、寄存器寻址操作数就放在CPU的内部寄存器中,AX、BX、CX、DX、DI、SI、SP、BP、DS、ES和SS,不需要访问存储器。例:INC CX MOV AX,BX 若执行前 AX=30A6H,BX=69EDH,CX=40D9H 则执行后 AX=69EDH,BX内容不变 CX=40DAH,3.1 8086/8088的寻址方式,3、直接寻址 有效地址(偏移地址EA)由指令直接给出,有效地址只包含位移量。例:MOV AX,2000H 默认的段寄存器是DS,也可以在指令中使用段超越前缀来指定段寄
4、存器。例:MOV AL,ES:2000H 有效地址EA=2000H,在指令中直接给出。物理地址PA=(ES)10H+2000H,3.1 8086/8088的寻址方式,4、寄存器间接寻址操作数的地址在对应的寄存器中称为寄存器间接寻址。EA取自基址寄存器BX,BP或变址寄存器SI,DI 中的一个,操作数在有效地址对应的存储单元中。以SI,DI,BX间接寻址:默认操作数在数据段DS中 以BP间接寻址:默认操作数在堆栈段SS中(可与DS等其他段寄存器形成段超越)例:MOV AX,BX 若(DS)=1492H,(BX)=2000H 则EA=(BX)=2000H 物理地址PA=14920H+2000H=1
5、6920H,执行(AX)=(16920H),3.1 8086/8088的寻址方式,5、变址寻址在寄存器间接寻址的基础上再加一个16位的偏移量。例:MOV AX,SI+COUNT 或 MOV AX,COUNTSI若COUNT=3000H,(DS)=3000H(SI)=2000H,则物理地址=35000H,EA=3000H+2000H=5000HPA=30000H+5000H=35000H,3.1 8086/8088的寻址方式,、基址加变址寻址EA=基址寄存器(BX或BP)变址寄存器(SI或DI)16位偏移量若用BX:默认操作数在数据段DS中 若用BP:默认操作数在堆栈段SS中例:MOV AX,B
6、X+DI+6,3.1 8086/8088的寻址方式,寻址方式的书写格式1、在方括号内部允许有一个或两个寄存器的名字,如果一对方括号内部有基址寄存器和变址寄存器,使用“”作为连接。2、在方括号内部允许有位移量,使用或号作为连接符号。3、在方括号外部允许有位移量,可以在左边或右边。MOVAX,BX+SI+6 MOVAX,BX+SI6 MOVAX,6BX+SI MOVAX,BXSI6 MOVAX,BX+6SI,3.2 8086/8088的指令系统,Intel 8086/8088指令系统共有117条基本指令,可分成6个功能组:数据传送类指令 算术运算类指令 逻辑运算类指令 串操作类指令 控制转移类指令
7、 处理器控制类指令,3.2.1数据传送指令,1数据传送MOV指令一般格式:MOV OPRD1,OPRD2MOV 是操作码,OPRD1和OPRD2分别是目的操作数和源操作数。功能:完成数据传送具体来说,一条MOV数据传送指令能实现:CPU内部寄存器之间数据的任意传送(除了代码段寄存器CS和指令指针IP以外)。MOV AL,BL;字节传送MOV CX,BX;字传送MOV DS,BX,3.2.1数据传送指令,立即数传送至CPU内部的通用寄存器组(即AX、BX、CX、DX、BP、SP、SI、DI),MOV CL,4MOV AX,03FFHMOV SI,057BH CPU内部寄存器(除了CS和IP以外)
8、与存储器(所有寻址方式)之间的数据传送。MOV AL,2000HMOV AX,SIMOV DI,CXMOV SI,BLOCKBPMOV DS,DATASI+BXMOV DESTBP+DI,ES,3.2.1数据传送指令,能实现用立即数给存储单元赋值MOV BYTE PTR 2000H,25HMOV WORD PTR SI,35H,3.2.1数据传送指令,对于MOV 指令应注意几个问题:MOV传送指令中,不允许对CS和IP进行操作;两个存储器操作数之间不允许直接进行信息传送;如我们需要把地址(即段内的地址偏移量)为2000H的存储单元的内容,传送至同一段内的地址为3000H的存储单元中去,MOV指
9、令不能直接完成这样的传送,但我们可以CPU内部寄存器为桥梁来完成这样的传送:MOV AL,2000H;MOV 3000H,AL,3.2.1数据传送指令,两个段寄存器之间不能直接传送信息,也不允许用立即寻址方式为段寄存器赋初值;(X)MOV DS,100H;(X)MOV DS,ES;目的操作数,不能用立即寻址方式。MOV指令不影响标志位,3.2.1数据传送指令,2堆栈指令 堆栈:就是一个按后进先出(LIFO)的原则组 织的一般内存区域即堆栈段。用SS指 示段地址。堆栈指针SP总是指向栈 顶(最后压入的数的地址)。SP的初 值规定了所用堆栈的大小(堆栈的深 度),一个栈的深度最大为64kB。堆栈用
10、途:临时存放数据传递参数保存和恢复寄存器,3.2.1数据传送指令,入栈指令PUSH一般格式:PUSH OPRD源操作数可以是CPU内部的16位通用寄存器、段寄存器(CS除外)和内存操作数(所有寻址方式)。入栈操作对象必须是16位数。功能:将数据压入堆栈执行步骤为:SP=SP-1;SP=操作数高8位;SP=SP-1;SP=操作数低8位,3.2.1数据传送指令,例:PUSH BX执行过程为:SP=SP-1,SP=BH;SP=SP-1,SP=BL,3.2.1数据传送指令,(2)出栈指令POP一般格式:POP OPRD目的操作数可以是CPU内部的16位通用寄存器、段寄存器(CS除外)和内存操作数(所有
11、寻址方式)。出栈操作对象必须是16位数。功能:将数据弹出堆栈执行步骤为:操作数低8位=SP;SP=SP1;操作数高8位=SP;SP=SP+1;,3.2.1数据传送指令,3交换指令 XCHG一般格式:XCHG OPRD1,OPRD2功能:完成数据交换。把一个字节或一个字的源操作数与目的操作数相交换。交换能在通用寄存器之间、通用寄存器与存储器之间进行。但段寄存器和立即数不能作为一个操作数;不能在存储器与存储器之间对换数据。例:XCHG AL,CL XCHG AX,DI XCHG BX,SI XCHG AX,2000H XCHG DATASI,DH,3.2.1数据传送指令,4累加器专用传送指令 输入
12、输出指令IN,OUTIN指令一般格式:IN AL,n;ALnIN AX,n;AXn+1nIN AL,DX;ALDX IN AX,DX;AXDX+1DX功能:从I/O端口输入数据至AL或AX.输入指令允许把一个字节或一个字由一个输入端口传送到AL或AX中。若端口地址超过255时,则必须用DX保存端口地址,这样用DX作端口寻址最多可寻找64K个端口。,8086/8088通过输入输出指令与外设进行数据交换;呈现给程序员的外设是端口(Port)即I/O地址。8088的对外数据线为8位,只有字节传送指令。16位输入输出指令中的端口地址只能取偶数。,3.2.1数据传送指令,OUT指令一般格式:OUT n,
13、AL;ALn OUT n,AX;AXn+1nOUT DX,AL;ALDXOUT DX,AX;AXDX+1DX功能:将AL或AX的内容输出至I/O端口。该指令将AL或AX中的内容传送到一个 输出端口。端口寻址方式与IN指令相同。,3.2.1数据传送指令,(2)查表转换指令格式:XLAT 功能:完成一个字节的查表转换:AL=(DS)16(BX)+(AL)要求:寄存器AL的内容作为一个256字节的表的下标;表的基地址在BX中,转换后的结果存放在AL中。,3.2.1数据传送指令,例:设(DS)=A000H,(BX)=0010H,表的起始地址为A0010H,表中放数字0-9的ASCII码 MOVBX,0
14、010H MOVAL,06H XLAT 执行该程序后,(AL)=36H本指令可用在数制转换、函数表查表、代码转换等场合。,A000:0010,30H,31H,A000:0016,36H,3.2.1数据传送指令,5地址传送指令(有三条地址传送指令)LEA(Load Effective Address)一般格式:LEA OPRD1,OPRD2功能:把源操作数OPRD2的地址偏移量传送至目的 操作数OPRD1。要求:源操作数必须是一个内存操作数,目的操作数必须是一个16位的通用寄存器。这条指令通常用来建立串操作指令所须的寄存器指针。例:LEA BX,2000H;把2000H单元的偏移地址送到BX,即
15、BX=2000H,3.2.1数据传送指令,LDS(Load pointer into DS)一般格式:LDS OPRD1,OPRD2功能:完成一个地址指针的传送。地址指针包括段地址部分和偏移量部分。指令将段地址送入DS,偏移量部分送入一个16位的指针寄存器或变址寄存器。要求:源操作数是一个内存操作数,目的操作数是一个通用寄存器或变址寄存器。,3.2.1数据传送指令,例:LDS SI,BX;其中(BX)=2000H;本指令将把BX所指的32位地址指针的段地址部分送入DS,偏移量部分送入SI。DS:2000 20 2001 69 2002 73 2003 20DS=0B10H,执行 LDS SI,
16、BX,SI=6920HDS=2073H,3.2.1数据传送指令,LES(Load pointer into ES)一般格式:LES OPRD1,OPRD2这条指令除将地址指针的段地址部分送入ES外,与LDS类似。例如:LES DI,BX,3.2.1数据传送指令,6标志寄存器传送(有四条标志传送指令)LAHF(LOAD AH WITH FLAG)将标志寄存器中的S、Z、A、P和C(即低8位)传送至AH寄存器的指定位,空位没有定义。SAHF(STOREAH WITH FLAG)将寄存器AH的指定位,送至标志寄存器的S、Z、A、P和C位。根据AH的内容,影响上述标志位,对O、D和I无影响。,3.2.
17、1数据传送指令,PUSHF(PUSH FLAG)将标志寄存器压入堆栈顶部,同时修改堆栈指针,不影响标志位。POPF(POP FLAG)堆栈顶部的一个字,传送到标志寄存器,同时修改堆栈指针,影响标志位。,3.2.2算术运算指令,80868088提供加、减、乘、除四种基本算术操作。这些操作都可用于字节或字的运算,也可以用于带符号数与无符号数的运算。带符号数用补码表示。同时80868088也提供了各种校正操作,故可以进行十进制算术运算。参与加、减运算的操作数可如下图所示:,3.2.2算术运算指令,1加法指令(Addition)一般形式:ADD OPRD1,OPRD2;不带进位的加法 功能:OPRD1
18、OPRD1+OPRD2完成两个操作数相加,结果送至目的操作数OPRD1。目的操作数可以是累加器,任一通用寄存器以及存储器操作数。例:ADD AL,30;累加器与立即数相加ADD BX,3000H;通用寄存器与存储单元内容相加ADD DI,CX;通用寄存器之间ADD DX,DATABX+SI;通用寄存器与存储单元内容相加ADD BETASI,DX;存储器操作数与寄存器相加这些指令对标志位CF、OF、PF、SF、ZF和AF有影响。,3.2.2算术运算指令,一般形式:ADC OPRD1,OPRD2;带进位的加法功能:OPRD1OPRD1+OPRD2+CF这条指令与上条指令类似,只是在两个操作数相加时
19、,要把进位标志CF的现行值加上去,结果送至目的操作数。ADC指令主要用于多字节运算中。例:若有两个四字节的数,已分别放在自FIRST和SECOND开始的存储区中,每个数占四个存储单元。存放时,最低字节在地址最低处,则可用以下程序段实现相加。MOV AX,FIRSTADD AX,SECOND;进行字运算MOV THIRD,AXMOV AX,FIRST+2ADC AX,SECOND+2MOV THIRD+2,AX这条指令对标志位的影响与ADD相同。,3.2.2算术运算指令,一般形式:INC OPRD;增量指令功能:OPRDOPRD+1完成对指定的操作数OPRD加1,然后返回此操作数。此指令主要用于
20、在循环程序中修改地址指针和循环次数等。这条指令执行的结果影响标志位AF、OF、PF、SF和ZF,而对进位标志CF没有影响。如:INC AL INC BYTE PTRBX,.2.2算术运算指令,2减法指令(Subtraction)一般形式:SUB OPRD1,OPRD2;不考虑借位功能:OPRD1OPRD1-OPRD2完成两个操作数相减,即从OPRD1中减去OPRD2,结果放在OPRD1中。例:SUB CX,BX SUB BP,CL指令对标志位AF、CF、OF、PF、SF和ZF都有影响。例 说明执行“MOV BX,4336H;SUB BX,0136H”后对标志位的影响。解:4336H=0100
21、0011 0011 0110;(-0136H)原=1000 0001 0011 0110;(-0136H)补=1111 1110 1100 1010 0100 0011 0011 0110 0100 0011 0011 0110+1111 1110 1100 1010-0000 0001 0011 0110 0100 0010 0000 0000 0100 0010 0000 0000结果对比发现:两种计算结果值相同,标志位OF=ZF=SF=0,PF=1也相同,但CF、AF却相反,标志CF=0,AF=0的值正确的;所以若采用补码求和代替减法运算,要把CF、AF的结果值求反后作为最终结果,而其他
22、值保持不变。,3.2.2算术运算指令,一般形式:SBB OPRD1,OPRD2;考虑借位功能:OPRD1OPRD1-OPRD2-CF 这条指令与SUB类似,只是在两个操作数相减时,还要减去借位标志CF的现行值 指令对标志位AF、CF、OF、PF、SF和ZF都有影响。同ADC指令一样,本指令主要用于多字节操作数相减。注意:若两个带符号数采用补码运算时,若CS表示最高位(符号位)的进位(对加法)或借位(对减法)(有进位或者借位时CS=1,否则为0);而CP表示数值部分最高位的进位(对加法)或借位(对减法)(有进位或者借位时CP=1,否则为0);当CS不等于CP时,结果产生溢出(OF=1),否则不产
23、生溢出(OF=0),即OF CS CP。,3.2.2算术运算指令,形式:DEC OPRD;减量 功能:OPRDOPRD-1对指令的操作数减1,然后送回此操作数,在相减时,把操作数作为一个无符号二进制数来对待。指令执行的结果,影响标志AF、OF、PF、SF和ZF但对CF标志不影响(即保持此指令以前的值)。例:DEC BYTE PTRSI DEC CL,3.2.2算术运算指令,形式:NEG OPRD;求补 功能:(NEGDate)对操作数OPRD取补:相当于 用零减去操数,再把结果送回操作数。(也就是已知负数的补码求负数原码的绝对值或已知负数原码的绝对值求其补码的运算。)例:NEG AL若AL00
24、111100,则取补后为11000100(即00000000011110011000100,也就是求绝对值为00111100的负数的补码)若在字节操作时对-128,或在字操作时对-32768取补,则操作数没变化,但标志OF置位。此指令影响标志AF、CF、OF、PF、SF和ZF。此指令的结果一般总是使标志CF=1(总有借位),除非在操作数为零时,才使CF=0。,3.2.2算术运算指令,形式:CMP OPRD1,OPRD2(比较指令)功能:OPRD1-OPRD2比较指令完成两个操作数相减,使结果反映在标志位上,但并不送回结果(即不带回送的减法)。例:CMP AL,100CMP DX,DI比较指令主
25、要用于比较两个数之间的关系。在比较指令之后,根据ZF标志即可判断两者是否相等。,相等的比较:若两者相等,相减以后结果为零,ZF标志为1,否则为0。若两者不相等,则可在比较指令之后利用其它标志位的状态来确定两者的大小。大小的比较:如果是两个无符号数(如CMPAX,BX)进行比较,则可以根据CF标志的状态判断两数大小。若结果没有产生借位(CF=0),显然AXBX;若产生了借位(即CF1),则AXBX。,3.2.2算术运算指令,带符号数比较:例:比较54与24的大小 解:54-24=54+(-24)-24补=11101000,54补=00110110 00110110+11101000 100011
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机 原理 接口 技术 惠民
链接地址:https://www.31ppt.com/p-5381478.html