第3章微机原理_第1页
第3章微机原理_第2页
第3章微机原理_第3页
第3章微机原理_第4页
第3章微机原理_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、本教案内容本教案内容第第3章章 8086CPU指令系统指令系统1.汇编语言指令汇编语言指令2.8086指令分类指令分类3.数据与转移地址的数据与转移地址的寻址方式寻址方式4.数据传送类指令数据传送类指令5.算术运算类指令算术运算类指令6.逻辑运算类指令逻辑运算类指令7.移位类指令移位类指令8.标志位操作指令标志位操作指令9.转移指令转移指令10.循环控制指令循环控制指令11.子程序调用返回子程序调用返回指令指令12.中断调用返回指中断调用返回指令令13.字符串操作指令字符串操作指令14.I/O输入输出指令输入输出指令15.其它指令其它指令16.宏指令宏指令3.11 3.11 子程序调用返回指令

2、子程序调用返回指令概念:概念:子程序为功能确定、且独立的程序段。子程序为功能确定、且独立的程序段。优点:优点:1.1. 可以将任何一段独立的程序归整为一个子程序,可以将任何一段独立的程序归整为一个子程序,当需要该段程序时,只需调用子程序即可,调当需要该段程序时,只需调用子程序即可,调用后会自动返回到调用指令的下一条指令。因用后会自动返回到调用指令的下一条指令。因此采用子程序设计时,可以简化程序设计。此采用子程序设计时,可以简化程序设计。2.2. 从调试程序的角度,由于原本在多处出现的程从调试程序的角度,由于原本在多处出现的程序段,缩减为子程序调用指令,使调试程序更序段,缩减为子程序调用指令,使

3、调试程序更加方便。加方便。3.11 3.11 子程序调用返回指令子程序调用返回指令缺点:缺点:采用子程序设计后。由于调用子程序和从子程序采用子程序设计后。由于调用子程序和从子程序中返回需要执行指令,并且为保护某些寄存器的中返回需要执行指令,并且为保护某些寄存器的内容,需要进行压入堆栈和弹出堆栈的操作,因内容,需要进行压入堆栈和弹出堆栈的操作,因此会使程序执行速度受到一定的影响。此会使程序执行速度受到一定的影响。 3.11 3.11 子程序调用返回指令子程序调用返回指令实现:实现:子程序调用是通过自动修改(子程序调用是通过自动修改(IPIP)和)和/ /或(或(CSCS)的内容实现的。的内容实现

4、的。为了确保子程序调用后能够返回到调用指令之后,为了确保子程序调用后能够返回到调用指令之后,CALLCALL指令会自动保存返回地址(指令会自动保存返回地址(IPIP和和/ /或或CSCS),),而而RETRET指令会自动返回到指令会自动返回到CALLCALL指令的下一条指令。指令的下一条指令。 3.11 3.11 子程序调用返回指令子程序调用返回指令一、子程序调用指令一、子程序调用指令CALLCALL子程序调用指令子程序调用指令CALLCALL(Call procedureCall procedure)有两)有两种格式:种格式:CALL LABELCALL LABEL;调用入口地址为;调用入口

5、地址为 ;标号;标号LABELLABEL的子程序的子程序CALL OPRCALL OPR;调用子程序,其入口地址;调用子程序,其入口地址 ;为操作数;为操作数OPROPR的内容的内容 3.11 3.11 子程序调用返回指令子程序调用返回指令CALL LABELCALL LABEL;调用入口地址为;调用入口地址为 ;标号;标号LABELLABEL的子程序的子程序分三种情况:分三种情况:(1 1)当标号)当标号LABELLABEL与与CALLCALL指令不在同一个段内时,指令不在同一个段内时,子程序调用在段间进行,其完成的操作有:子程序调用在段间进行,其完成的操作有:CSCS入栈,入栈,IPIP入

6、栈;(入栈;(IPIP)LABELLABEL的偏移地址;的偏移地址;(CSCS)LABELLABEL的段地址。指令的寻址方式为的段地址。指令的寻址方式为段间直接寻址。段间直接寻址。3.11 3.11 子程序调用返回指令子程序调用返回指令(2 2)当标号)当标号LABELLABEL与与CALLCALL指令在同一个段内,且指令在同一个段内,且可以采用可以采用8 8位有符号数表示其相对位移量时,则位有符号数表示其相对位移量时,则子程序调用在段内进行,其完成的操作有:子程序调用在段内进行,其完成的操作有:IPIP入入栈;(栈;(IPIP)(IPIP)+DISP8+DISP8。指令的寻址方式为。指令的寻

7、址方式为段内直接寻址,也称为相对寻址。段内直接寻址,也称为相对寻址。(3 3)当标号)当标号LABELLABEL与与CALLCALL指令在同一个段内,且指令在同一个段内,且需要采用需要采用1616位有符号数表示其相对位移量时,则位有符号数表示其相对位移量时,则子程序调用在段内进行,其完成的操作有:子程序调用在段内进行,其完成的操作有:IPIP入入栈;(栈;(IPIP)(IPIP)+DISP16+DISP16。指令的寻址方式。指令的寻址方式为段内直接寻址,也称相对寻址。为段内直接寻址,也称相对寻址。3.11 3.11 子程序调用返回指令子程序调用返回指令CALL OPRCALL OPR;调用子程

8、序,其入口地址;调用子程序,其入口地址 ;为操作数;为操作数OPROPR的内容的内容分为三种情况分为三种情况 :(1 1)当)当OPROPR为为1616位的通用寄存器位的通用寄存器REG16REG16时,则子时,则子程序调用在段内进行,其完成的操作有:程序调用在段内进行,其完成的操作有:IPIP入栈;(入栈;(IPIP)(REG16REG16)。指令的寻址方式)。指令的寻址方式为段内间接寻址。为段内间接寻址。3.11 3.11 子程序调用返回指令子程序调用返回指令(2 2)当)当OPROPR为为1616位的存储单元位的存储单元RAMRAM时,则子程时,则子程序调用在段内进行,其完成的操作有:序

9、调用在段内进行,其完成的操作有:IPIP入栈;(入栈;(IPIP)(RAMRAM)。指令的寻址方式)。指令的寻址方式为段内间接寻址。为段内间接寻址。(3 3)当)当OPROPR为为3232位的存储单元位的存储单元RAMRAM时,则子程时,则子程序调用在段间进行,其完成的操作有:序调用在段间进行,其完成的操作有:CSCS入栈,入栈,IPIP入栈;(入栈;(IPIP)(RAMRAM),(),(CSCS)(RAMRAM2 2)。指令的寻址方式为段间间)。指令的寻址方式为段间间接寻址。接寻址。 3.11 3.11 子程序调用返回指令子程序调用返回指令二、子程序返回指令二、子程序返回指令RETRET子程

10、序返回指令子程序返回指令RETRET(Return from procedureReturn from procedure)有三种格式:有三种格式:RETRET ;用于段内子程序的返回,;用于段内子程序的返回, 完成完成IP IP 出栈,即(出栈,即(IPIP)(SPSP)RETF RETF ;用于段间子程序的返回,;用于段间子程序的返回, 完成完成IP IP 出栈,出栈,CS CS 出栈出栈RET nRET n ;完成;完成RET(RET(或或RETF)RETF)指令功能后,指令功能后, (SP)(SP)+n(SP)(SP)+n3.11 3.11 子程序调用返回指令子程序调用返回指令三、过程

11、定义三、过程定义在在IBM PCIBM PC汇编过程中,子程序通常以过程方式汇编过程中,子程序通常以过程方式编写。过程定义格式:编写。过程定义格式:过程名过程名 PROC PROC 类型类型 RET RET 过程名过程名 ENDPENDP其中,过程名是用户给子程序起的名字,它可其中,过程名是用户给子程序起的名字,它可以看作为标号,具有段地址、偏移地址和类型以看作为标号,具有段地址、偏移地址和类型的属性。子程序的类型可以取的属性。子程序的类型可以取NEARNEAR(近程过程,(近程过程,可供段内调用)和可供段内调用)和FARFAR(远程过程,可供段间调(远程过程,可供段间调用),当类型缺省时,表

12、示用),当类型缺省时,表示NEARNEAR(近程过程)。(近程过程)。 一个子程序名一但定义,就具有以下三个属性一个子程序名一但定义,就具有以下三个属性 段地址段地址段内偏移地址段内偏移地址类型类型FARNEAR(可缺省)(可缺省)就是子程序第一条指令的地址就是子程序第一条指令的地址3.11 3.11 子程序调用返回指令子程序调用返回指令3.11 3.11 子程序调用返回指令子程序调用返回指令子程序还可以是另一种形式:子程序还可以是另一种形式:标号:标号: RETRET子程序调用与返回指令应用结构子程序调用与返回指令应用结构段内子程序调用与返回段内子程序调用与返回 ;主程序;主程序CODE S

13、EGMENTCODE SEGMENT ASSUME CS:CODE ASSUME CS:CODESTART:START: 3.11 3.11 子程序调用返回指令子程序调用返回指令; ;子程序子程序SUB1SUB1SUB1 PROC NEARSUB1 PROC NEAR RET ;RET ;SUB1 ENDPSUB1 ENDPCODE ENDSCODE ENDS END START END STARTCALLCALL NEAR PTRNEAR PTR SUB1SUB1可以省略可以省略IP(SP)IP(SP)SP(SP)+2SP(SP)+2SP(SP)-2SP(SP)-2(SP)(SP)返回返回

14、地址(地址(IPIP)IP(IP)+16IP(IP)+16 位位DISPDISP3.11 3.11 子程序调用返回指令子程序调用返回指令 ;主程序;主程序CODEM SEGMENTCODEM SEGMENT ASSUME CS:CODEM ASSUME CS:CODEMSTART:START: CALL FAR PTR SUB2 CALL FAR PTR SUB2 MOV AH,4CH MOV AH,4CH INT 21H INT 21HCODEM ENDSCODEM ENDS ;子程序;子程序CODES SEGMENTCODES SEGMENT ASSUME CS:CODES ASSUME

15、CS:CODESSUB2 PROC FARSUB2 PROC FAR RETF ; RETF ;也可以写成也可以写成RETRETSUB2 ENDPSUB2 ENDPCODES ENDSCODES ENDS END START END STARTIP(SP)IP(SP) SP SP(SPSP)+2+2CS(SP) CS(SP) SP SP(SPSP)+2+2SP(SP)-2SP(SP)-2 (SP) (SP)返回地址(返回地址(CSCS)SP(SP)-2SP(SP)-2 (SP) (SP)返回地址(返回地址(IPIP)IPOFFSET SUB2IPOFFSET SUB2 CSSEG SUB2 C

16、SSEG SUB2 3.11 3.11 子程序调用返回指令子程序调用返回指令例例3.32 3.32 子程序设计,编写子程序实现统子程序设计,编写子程序实现统计一个字(计一个字(AXAX)中)中“1”1”的个数。的个数。解:利用移位指令或循环移位指令,每次解:利用移位指令或循环移位指令,每次对对CFCF位进行检测位:位进行检测位:p当当CF=1CF=1时,则总个数加时,则总个数加1 1;p当当CF=0CF=0时,则总个数不变。时,则总个数不变。这种操作可以采用有条件转移指令来实现,这种操作可以采用有条件转移指令来实现,但更方便的方式是采用但更方便的方式是采用ADCADC指令实现。子指令实现。子程

17、序如下:程序如下: 3.11 3.11 子程序调用返回指令子程序调用返回指令COUNTER1 PROC NEARCOUNTER1 PROC NEAR PUSH AX PUSH AX MOV CX,16 MOV CX,16 XOR BL,BL XOR BL,BLCOU1:COU1: SHR AX,1 SHR AX,1 ADC BL,0 ADC BL,0 LOOP COU1 LOOP COU1 POP AX POP AX RET RETCOUNTER1 ENDP COUNTER1 ENDP 3.11 3.11 子程序调用返回指令子程序调用返回指令例例3.33 3.33 子程序应用。利用上例设计的子

18、程序,子程序应用。利用上例设计的子程序,统计字型变量统计字型变量VAR1VAR1中中1 1的个数。的个数。解:在数据段中定义变量解:在数据段中定义变量VAR1VAR1和和CounterVar1CounterVar1:VAR1VAR1DWDW1234H1234HCounterVar1 CounterVar1 DB ?DB ?则可在代码段中编写程序:则可在代码段中编写程序:MOV AX, VAR1MOV AX, VAR1CALL COUNTER1CALL COUNTER1MOVMOV CounterVar1,BL CounterVar1,BL执行后,结果单元执行后,结果单元CounterVar1C

19、ounterVar1的值为的值为5 5,说明,说明1234H1234H中包含有中包含有5 5个个“1”1”。 3.11 3.11 子程序调用返回指令子程序调用返回指令例例3.34 3.34 编写以十六进制数显示编写以十六进制数显示ALAL和和AXAX内容的子内容的子程序(程序(DISPALDISPAL、DISPAXDISPAX)。)。解:先编写显示解:先编写显示ALAL寄存器内容的子程序寄存器内容的子程序DISPALDISPAL。由于由于ALAL中有两位十六进制数,每一位的值为中有两位十六进制数,每一位的值为0 09 9、0AH0AH0FH0FH,在显示时需要将它们转换成相应的,在显示时需要将

20、它们转换成相应的ASCIIASCII码,然后调用码,然后调用INT 21HINT 21H的的02H02H号功能进行显号功能进行显示。子程序示。子程序DISPALDISPAL如下:如下:3.11 3.11 子程序调用返回指令子程序调用返回指令DISPAL DISPAL PROC NEARPROC NEAR PUSH AX PUSH AX PUSH CX PUSH CX PUSH DX PUSH DX PUSH AX PUSH AX MOV CL,4 MOV CL,4;处理高位十六进制数;处理高位十六进制数 SHR AL,CLSHR AL,CL CALL CHANG CALL CHANG;十六进制

21、数变换成;十六进制数变换成ASCIIASCII码码 MOV AH,02MOV AH,02 MOV DL,AL MOV DL,AL INT 21H INT 21H;显示一位字符;显示一位字符 3.11 3.11 子程序调用返回指令子程序调用返回指令 POP AXPOP AX AND AL,0FH AND AL,0FH;处理低位十六进制数;处理低位十六进制数 CALL CHANGCALL CHANG;十六进制数变换成;十六进制数变换成ASCIIASCII码码 MOV AH,02MOV AH,02 MOV DL,AL MOV DL,AL INT 21H INT 21H;显示一位字符;显示一位字符 P

22、OP DXPOP DX POP CX POP CX POP AX POP AX RET RETDISPAL DISPAL ENDPENDP3.11 3.11 子程序调用返回指令子程序调用返回指令CHANG PROC NEARCHANG PROC NEAR ;十六进制数变换成;十六进制数变换成ASCIIASCII码码 CMP AL,10CMP AL,10 JNGE CHANG1 JNGE CHANG1 ADD AL,7 ADD AL,7CHANG1:CHANG1: ADD AL,30H ADD AL,30H RET RETCHANG ENDPCHANG ENDP3.11 3.11 子程序调用返回

23、指令子程序调用返回指令可以直接调用可以直接调用DISPALDISPAL实现显示实现显示AXAX的内容,子程序的内容,子程序DISPAXDISPAX内容如下:内容如下:DISPAX DISPAX PROC NEARPROC NEARXCHG AL,AHXCHG AL,AHCALL DISPALCALL DISPALXCHG AH,ALXCHG AH,ALCALL DISPALCALL DISPAL RET RETDISPAX ENDPDISPAX ENDP3.11 3.11 子程序调用返回指令子程序调用返回指令作业:作业:3.12 3.12 中断调用与返回指令中断调用与返回指令计算机在程序运行过

24、程中,由于发生了某些计算机在程序运行过程中,由于发生了某些“紧紧急事件急事件”,需要进行特殊处理(转向中断服务子,需要进行特殊处理(转向中断服务子程序执行),处理后返回到程序中断处继续执行,程序执行),处理后返回到程序中断处继续执行,这种过程称为中断处理过程。这里的这种过程称为中断处理过程。这里的“紧急事件紧急事件”可以是由硬件产生的,例如系统掉电、硬件故障、可以是由硬件产生的,例如系统掉电、硬件故障、定时计数器溢出等;可以是执行指令产生的,例定时计数器溢出等;可以是执行指令产生的,例如除法溢出等;还可以是专门的中断调用指令所如除法溢出等;还可以是专门的中断调用指令所产生的。本节主要介绍专门的

25、中断调用指令、中产生的。本节主要介绍专门的中断调用指令、中断服务子程序的结构和中断返回指令。断服务子程序的结构和中断返回指令。3.12 3.12 中断调用与返回指令中断调用与返回指令一、中断调用指令一、中断调用指令INTINT中断调用指令中断调用指令INTINT(InterruptInterrupt)的格式为:)的格式为:INT INT n n这表示调用第这表示调用第n n号中断,号中断,n n为中断类型号,其值可以是为中断类型号,其值可以是0 0255255。当执行该指令时,会进行下列操作:。当执行该指令时,会进行下列操作:1.1.PSWPSW、CSCS、IPIP入栈;入栈;2.2.清除清除

26、IFIF、TFTF标志;标志;3.3.从中断向量表中取出中断向量(中断向量为中断服从中断向量表中取出中断向量(中断向量为中断服务子程序的入口地址);务子程序的入口地址);4.4.转到中断服务子程序进行执行;转到中断服务子程序进行执行;5.5.中断服务子程序的最后一条指令应该是中断返回指中断服务子程序的最后一条指令应该是中断返回指令,执行该指令可以返回到程序中断处继续执行。令,执行该指令可以返回到程序中断处继续执行。 3.12 3.12 中断调用与返回指令中断调用与返回指令二、中断返回指令二、中断返回指令IRETIRET中断返回指令中断返回指令IRETIRET(Interrupt returnI

27、nterrupt return)的格)的格式为:式为:IRETIRET表示从中断服务子程序返回主程序。执行该指表示从中断服务子程序返回主程序。执行该指令时,会完成令时,会完成IPIP、CSCS、PSWPSW的出栈操作,其的出栈操作,其次序与次序与INT n INT n 指令的入栈次序相反。由于指令的入栈次序相反。由于修改了修改了IPIP和和CSCS的内容,从而实现的程序的的内容,从而实现的程序的返回功能。返回功能。 3.12 3.12 中断调用与返回指令中断调用与返回指令三、中断向量表三、中断向量表每个中断服务子程序的入口地址(称为中断向量)每个中断服务子程序的入口地址(称为中断向量)为为3232位(位(1616位的偏移地址和位的偏移地址和1616位的段地址),位的段地址),占用占用4 4个地址单元。计算机中采用最低的个地址单元。计算机中采用最低的10241024个地址单元(称为个地址单元(称为0 0页)来存储中断向量,因页)来存储中断向量,因此,此,n n号中断的中断向量存放地址为:号中断的中断向量存放地址为:4 4n n ,调用该中断时,可以从该地址获得中断服务调用该中断时,可以从该地址获得中断服务子程序的入口地址。子程序的入口地址。3.12 3.

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论