微机原理第06次课第03章-3-NEWppt课件_第1页
微机原理第06次课第03章-3-NEWppt课件_第2页
微机原理第06次课第03章-3-NEWppt课件_第3页
微机原理第06次课第03章-3-NEWppt课件_第4页
微机原理第06次课第03章-3-NEWppt课件_第5页
已阅读5页,还剩69页未读 继续免费阅读

下载本文档

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

文档简介

1、1,8086指令系统,传送类指令 数据操作类指令 串操作指令 控制类指令,本章要求,2,串操作类指令,串操作指令就是用一条指令实现对一串字符或数据的操作。 它主要由以下几种指令组成: 一、字符串传送指令:MOVSB/MOVSW 二、字符串比较指令:CMPSB/CMPSW 三、字符串检索指令:SCASB/SCASW 四、取字符串指令:LODSB/LODSW 五、存字符串指令:STOSB/STOSW,返回,串操作类指令特点,3,串操作指令,针对数据块或字符串的操作 可实现存储器到存储器的数据传送 待操作的数据串称为源串,目标地址称为目标串 串操作指令是唯一的一组能直接处理源和目的操作数都在存储单元

2、的指令,4,串操作指令的特点,源串一般存放在数据段,偏移地址由SI指定。允许段重设 目标串必须在附加段,偏移地址由DI指定 指令自动修改地址指针,修改方向由DF决定。DF=0 增地址方向;DF=1 减地址方向 数据块长度值由CX指定 可增加自动重复前缀以实现自动修改CX内容,5,串操作指令流程,6,重复前缀,REP 无条件重复 REPE 相等重复 REPZ 为零重复 REPNE 不相等重复 REPNZ 不为零重复,条件重复,CX0ZF=1,CX0ZF=0,CX0 重复,7,串操作指令与重复前缀,8,示 例,LEA SI , BUFFER1 LEA DI , BUFFER2 MOV CX , 1

3、7 CLD REP MOVSB,LEA SI , BUFFER1 LEA DI , BUFFER2 MOV CX , 17 CLD AGAIN: MOVSB DEC CX JNZ AGAIN,LEA SI , BUFFER1 LEA DI , BUFFER2 MOV CX , 17 AGAIN: MOV AL , SI MOV DI, AL INC SI INC DI DEC CX JNZ AGAIN,REP 执行的操作: 1) 如(CX)=0则退出REP,否则往下执行. 2) (CX)=(CX)-1 3) 执行其后的串指令 4) 重复1)3,编写程序实现:将BUFFER1中的17个数传送到B

4、UFFER2中去,9,怎样编写程序,DATA SEGMENT DATA ENDS,EXTRA SEGMENT EXTRA ENDS,CODE SEGMENT CODE ENDS,ASSUME CS:CODE,DS:DATA,ES:EXTRA,MOV AX , DATA MOV DS , AX MOV AX , EXTRA MOV ES , AX,BUFFER1 DB Hello, everybody,BUFFER2 DB 17 DUP(,LEA SI , BUFFER1 LEA DI , BUFFER2 MOV CX , 17 CLD REP MOVSB,STA: END STA,OK,返回,

5、10,字符串传送指令,指令格式: MOVS DST, SRC ; (DI) (SI) 字节 MOVSB ; 字节 (DI) (DI) 1,(SI) (SI) 1 MOVSW ; 字 (DI) (DI) 2,(SI) (SI) 2 指令功能:把DS段由SI指出的字节或字传送到ES段由DI指出存储单元中,并修改SI和DI地址指针。MOVSB完成字节操作,MOVSW完成字操作,通常指令前面加重复前缀REP,数据串长度送CX寄存器。 指令说明,返回,11,字符串传送指令说明,用CLD指令将DF清零,地址指针自动加(MOVSB1 MOVSW 2)增址 用STD指令将DF置1,地址指针自动减(MOVSB1

6、 MOVSW 2)减址 第二、三种格式明确地注明是传送字节或字,隐含了两个操作数的地址。第一种格式则应在操作数明确是字还是字节操作,如: MOVS ES:BYTE PTRDI, DS:SI,12,串传送指令例,用串传送指令实现200B数据的传送: LEA SI,MEM1 LEA DI,MEM2 MOV CX,200 CLD REP MOVSB HLT,返回,13,字符串比较指令,指令格式: CMPS DST, SRC ; (DI) (SI) 字节 CMPSB ; 字节 (DI) (DI) 1,(SI) (SI) 1 CMPSW ; 字 (DI) (DI) 2,(SI) (SI) 2 指令功能:

7、把DS段由SI指出的字节或字和ES段由DI指出的字或字节相比较,并比较后修改SI和DI地址指针。指令影响标志位,利用重复前缀可实现在两个字符串中寻找第一个不等的元素或第一个相等的元素。 指令说明,返回,14,字符串比较指令说明,指令前缀有以下三种形式: (1)REP 重复 (2)REPZ/REPE 相等/为零则重复 (3)REPNZ/REPNE 不相等/不为零则重复,15,串比较指令例,比较两个字符串是否相等,并找出其中第一个不相等字符的首地址,将该地址送到BX中,不想等字符送到AL中。设MEM1为源串首地址,MEN2为目的串首地址,两个字串长度均为200,LEA SI,MEM1 LEA DI

8、,MEM2 MOV CX,200 CLD REPE CMPSB TEST CX,00FFH,JZ STOP DEC SI MOV AL,SI MOV BX,SI STOP:HLT,返回,16,字符串检索指令,指令格式: SCAS DST ; SCASB ; 字节 (AL ) (DI) ,(DI) (DI) 1 SCASW ; 字 (AX) (DI) ,(DI) (DI) 2 指令功能:用AL中的字节或AX中的字,与位于ES段由DI寄存器指出内存单元的字节或字相比较。通过前缀控制,可以实现AL中的字节或AX中的字与内存单元相等或不等的比较。 指令说明,返回,17,字符串检索指令说明,指令REPN

9、Z SCASB有以下两种退出情况: (1)字符串中某字节与AL中的字节相等,从而退出。 (2)字符串中没有字节与AL中的字节相等,但检索完毕,从而退出。可通过ZF检测来判断当前处于哪种情况,ZF=1,为前一种情况,ZF=0,为后一种情况,ZF与CX无关,返回,18,取字符串指令,指令格式: LODS SRC ; LODSB ; 字节 (AL) (SI) ,(SI) (SI) 1 LODSW ; 字 (AX) (SI) ,(SI) (SI) 2 指令功能:将位于DS段由SI寄存器指出内存单元的内容取到AL或AX中,返回,19,存字符串指令,指令格式: STOS DST ; STOSB ; 字节

10、(AL) (DI) ,(DI) (DI) 1 STOSW ; 字 (AX) (DI) ,(DI) (DI) 2 指令功能:把AL中的字节或AX中的字,存到ES段由DI寄存器指出内存单元,并自动修改地址指针。加上前缀REP后,可使一串内存单元中填满相同的数,返回,20,控制类指令,此类指令主要由以下几部分组成: 一、子程序调用和返回指令 二、无条件转移和条件转移指令 三、循环控制指令 四、中断控制指令 五、处理器控制指令,返回,21,子程序调用和返回指令,子程序结构相当于高级语言中的过程。为 了方便模块化程序设计,往往把程序中某 些具有独立功能的部分编写成独立的程序 模块,称之为程序。子程序调用

11、和返回指 令都不影响标志位。 一、子程序调用指令:CALL 二、子程序返回指令:RET,返回,指令说明,22,调用指令的执行过程,将调用指令的下一条指令的地址(断点)压入堆栈 获取子过程的入口地址(子过程第1条指令的偏移地址) (执行子过程,含相应参数的保存及恢复) 将断点偏移地址由堆栈弹出,返回原程序,返回,23,子程序调用指令,该类指令提供了子程序内直接调用指令、段内间接调用指令、段间直接调用指令和段间间接调用指令。 一、段内直接调用 二、段内间接调用 三、段间直接调用 四、段间间接调用 指令说明,返回,24,段内直接调用,指令格式:CALL DST ; (SP) (SP)-2, (SP)

12、-2, (SP)-1) (IP) (IP) (IP)+16位偏移量 例如: CALL 1000H ; 段内直接调用,调用地址 在指令中给出,返回,子过程与原调用程序在同一代码段,在调用之前只需保护断点的偏移地址,25,段内间接调用,指令格式:CALL DST ; (SP) (SP)-2, (SP)-2, (SP)-1) (IP) (IP) (EA) 例如: CALL AX ; 段内间接调用,调用地址 由AX给出。(IP) (AX,返回,子过程与原调用程序在同一代码段,在调用之前只需保护断点的偏移地址,26,段间直接调用,指令格式:CALL DST ; (SP) (SP)-2, (SP)-2,

13、(SP)-1) (CS)段地址 (SP) (SP)-2, (SP)-2, (SP)-1) (IP)偏移地址 例如: CALL 2500:3600 ; 段间直接调用,调用段地 址和偏移量在指令中给出,返回,子过程与原调用程序不在同一代码段,在调用之前需保护断点的段基地址和偏移地址。先将断点的CS压栈,再压入IP,27,段间间接调用,指令格式:CALL DST ; (SP) (SP)-2, (SP)-2, (SP)-1) (CS) (SP) (SP)-2, (SP)-2, (SP)-1) (IP) (IP) (EA) 寻址方式确定的有效地址 (CS) (EA+2) 例如: CALL DWORD P

14、TRDI ; 段间间接调用,指令给出 调用段地址和偏移量的存 放地址,28,示例,设(DS)=6000H,(SI)=0560H,指令 CALL DWORD PTRDI 的操作示意图,XXH,XXH,XXH,XXH,IP,CS,CALL,代码段,数据段,60560H,返回,29,子程序调用指令说明,调用指令在执行时,会把下一条指令的地址推入堆栈,这个地址叫返回地址。在段内调用的情况下,只把返回地址的偏移量推入堆栈,在段间调用的情况下,把返回地址的段地址和偏移量都推入堆栈,返回,30,子程序返回指令,该指令有以下两条: 一、子程序返回指令:RET 二、带参数的返回指令:RET n 所有返回指令都不

15、影响标志位,返回,31,子程序返回指令:RET,指令格式:RET ; (IP) (SP)+1, (SP) (SP) (SP)+2 指令说明:返回指令RET作为子程序的最后一条指令用来返回高一层的程序。执行时,会从堆栈顶部弹出返回地址出栈送IP寄存器 (段内或段间)和CS寄存器(段间)。8086指令系统中,段内返回指令和段间返回指令形式是一样的。不影响标志位,返回,32,带参数的返回指令:RET n,指令格式:RET EXP ; (IP) (SP)+1, (SP) (SP) (SP)+2 (SP) (SP)+D16 指令说明:EXP是一个表达式,根据它的值计算出常数为指令中的位移量n。n可以表示

16、为0FFFFH范围中的任何一个偶数。 应用范围:主程序为某个子程序提供一定的参数或参数地址,在进入子程序之前,主程序将这些参数或参数的地址压入堆栈中,通过堆栈供子程序调用,子程序使用后,这些参数已无使用价值,堆栈中不需要保存这些参数,因而在返回指令RET中提供参数n在返回同时堆栈指针自动增加几个字节,以去掉堆栈中的几个字节,返回,33,无条件转移和条件转移指令,一、无条件转移指令 无条件转移到目标地址,执行新的指令 二、条件转移指令 在具备一定条件的情况下转移到目标地址,返回,通过修改指令的偏移地址或段地址及偏移地址实现程序的转移,34,无条件转移指令:JMP,指令功能: 无条件转移指令可以转

17、移到内存中存放的任何程序段。指令必须指定转移的目标地址(或称转移地址)。无条件转移指令不影响标志位。 指令分类: 段内转移和段间转移。段内转移只须改变IP寄存器的内容,用新的转移目标地址代替原有的IP的值就可以。段间则转到另一段去执行程序,因此,不仅要修改IP寄存器的内容,而且还要修改CS寄存器的内容。 指令格式,返回,35,无条件转移指令格式,指令格式:JMP LABEL (1) 段内直接短转移:格式:JMP SHORT OPR ; (IP) (IP)+8位移量 ; 8位移量是一个带符号 数,转移范围在 128-+127 例如:JMP SHORT 10H ; 转移地址偏移量在指令 中给出 (

18、2)段内直接近转移:格式:JMP NEAR PTR OPR (IP) (IP)+16位移量;16位移量是一个带符号 数,转移范围在段内任意位置 例如:JMP 1000H ;段内直接转移,转移地址偏移量在指令中给出,返回,下一页,36,无条件转移指令格式,3) 段内间接转移:格式:JMP WORD PTR OPR ; (IP) (EA); EA值由OPR的寻址方式确定。 它可以使用除立即数以外的任一种寻址方式。 例如:JMP CX ; 段内间接转移,转移地址偏移 量由CX给出 (4) 段间直接(远)转移 :格式:JMP FAR PTR OPR ; (IP) OPR的段内偏移地址; (CS) OP

19、R所在 段的段地址 例如:JMP 2000:0100H ; 段间直接转移,转移段 地址和偏移量在指令中给出,返回,下一页,37,无条件转移指令格式,5) 段间间接转移: 格式:JMP DWORD PTR OPR ; (IP) (EA) (CS) (EA+2) EA值由OPR的寻址方式确定。它可以使用除立即数以外的任一种寻址方式。 例如:JMP DWORD PTRSI 段间间接转移,转移地址在SI,SI+1,SI+2,SI+3所指的内存单元中,前两个字节为偏移量,后两个字节为段地址,返回,38,条件转移指令,条件转移指令是以某一个标志位的值或者某几个标志位的值作为判断是否进行转移的依据,如果满足

20、要求则转移,否则执行后续指令。 条件转移指令可以分为以下几大类: 一、根据单个条件标志的设置情况转移 二、比较两个无符号数 三、比较两个带符号数 四、CX寄存器值判断 指令说明,返回,39,单个条件标志转移指令,指令格式: JZ/JE OPR ; 结果为0或相等,则转移 ZF=1 JNZ/JNE OPR ;结果不为0或不相等,则转移ZF=0 JS OPR ; 结果为负,则转移 SF=1 JNS OPR ; 结果为正,则转移 SF=0 JO OPR; 溢出,则转移 OF=1,返回,下一页,40,单个条件标志转移指令,JNO OPR ; 不溢出,则转移 OF=0 JP/JPE OPR ; 奇偶位为

21、1,则转移 PF=1 JNP/JPO OPR ; 奇偶位为0,则转移 PF=0 JB/JNAE/JC OPR ; 低于(不高于也不等于)或 进位为1,则转移 CF=1 JNB/JAE/JNC OPR ; 不低于(高于或等于)或进 位为0,则转移 CF=0,返回,上一页,41,比较两个无符号数,指令格式: JB/JNAE/JC OPR ; 低于,不高于也不等于,或进 位为1,则转移 CF=1 JNB/JAE/JNC OPR ; 不低于,高于或等于,或进位为 0,则转移 CF=0 JBE/JNA OPR ; 低于或等于,不高于,则转移 CF=1或ZF=1 JNBE/JA OPR ; 不低于也不等于

22、,高于,则转移 CF=0且ZF=0,返回,42,比较两个带符号数,指令格式: JL/JNGE OPR ; 小于,不大于也不等于,则转移 SFOF=1且ZF=0 JNL/JGE OPR ; 不小于,大于或等于,则转移 SFOF=0或ZF=1 JLE/JNG OPR ; 小于或等于,不大于,则转移 (SFOF)或ZF=1 JNLE/JG OPR ; 不小于也不等于,大于,则转移 (SFOF)且ZF=0,返回,43,CX寄存器值判断,指令格式: JCXZ OPR ; 根据CX内容修改情况产生不 同的分支。CX值为0,则转移,返回,44,条件转移指令说明,指令说明: (1)所有条件转移指令都是相对转移

23、形式,-128-+127范围。 (2)比较两个数的大小后转移,要看是有符号数还是无符号数。无符号数用“高于”和“低于”来判断,有符号数用“大于”和“小于”来判断。 (3)大部分可以用两种助记符表示,45,调用指令与转移指令的比较,用于调用一个子过程 调用前须保护断点地址 子过程执行结束后要返回原调用处继续执行原程序,断点恢复,返回,46,循环控制指令,指令所控制的目的地址都是-128-+127范围内,循环次数由CX寄存器指定。该类指令主要有以下三种: 一、LOOP循环指令 二、LOOPZ/LOOPE指令 三、LOOPNZ/LOOPNE指令,返回,47,无条件循环指令LOOP,指令格式: LOO

24、P LABEL ; 指令功能: 先将CX的内容减1,再判断CX中是否为0,为0则退出,否则循环。 操作: DEC CX JNZ 符号地址,返回,48,条件循环指令LOOPZ/LOOPE,指令格式: LOOPZ/LOOPE OPR ; 指令功能:先将CX的内容减1,再判断CX中是否为0,并且判断ZF是否为1。如果ZF=0,或CX=0,则退出;只有在ZF=1并且CX0情况下,才继续循环。 指令说明:(1)CX中的值为0时,并不会影响标志位ZF,ZF由前面其它指令来决定 (2)该指令可用于查找相等的情况,返回,49,条件循环指令LOOPNZ/LOOPNE,指令格式: LOOPNZ/LOOPNE OP

25、R ; 指令功能:先将CX的内容减1,再判断CX中是否为0,并且判断ZF是否为1。如果ZF=0,并且CX=0,则继续循环;只有在CX=0,或ZF=1情况下,则退出循环。 指令说明:(1)CX中的值为0时,并不会影响标志位ZF,ZF由前面其它指令来决定。 (2)该指令用于查找不相等的情况,返回,50,MOV AX,DATA1 MOV BX,DATA2 CMP AX,BX JL NEXT1 MOV CX,AX JMP NEXT2 NEXT1: MOV CX,BX NEXT2: MOV AH,4CH INT 21H,下面程序的功能是什么,51,中断控制指令,一、一般中断指令:INT n 二、溢出中断

26、指令:INTO 三、中断返回指令:IRET 思考:中断与过程调用的区别,返回,52,中断指令,中断与过程调用: 中断是随机事件或异常事件引起,调用则是事先已在程序中安排好 响应中断请求不仅要保护断点地址,还要保护FLAGS内容 调用指令在指令中直接给出子程序入口地址,中断指令只给出中断向量码,入口地址则在向量码指向的内存单元中,返回,P150,53,INT n 中断指令,指令格式: INT n 执行的操作: (SP) (SP)-2 (SP)+1,(SP) (PSW) (SP) (SP)-2 (SP)+1,(SP) (CS) (SP) (SP)-2 (SP)+1,(SP) (IP) (IP) (

27、n*4) (CS) (n*4+2) 指令说明:指令在执行完以上操作后,再把IF和TF位置0,但不影响其余的标志位,中断类型码 n=0 255,P149,54,中断指令,n4 =存放中断服务子程序入口地址的单元地址,操作总结: 将FLAGS压入堆栈 将INT指令下一条指令的CS、IP压栈 取中断服务程序入口地址,55,中断指令例,INT 21H,IPL,IPH,CSL,CSH,SP=1200,FLAGSL,FLAGSH,SP=11FA,执行INT指令后,保护断点,56,中断指令例,执行INT 21H指令后 IP=? CS=,返回,57,溢出中断指令,指令格式: INTO 相当于 INT 4 执行

28、的操作: (SP) (SP)-2 (SP)+1,(SP) (PSW) (SP) (SP)-2 (SP)+1,(SP) (CS) (SP) (SP)-2 (SP)+1,(SP) (IP) (IP) (10H) (CS) (12H,返回,若OF=1,则启动一个类型为4的中断过程,给出一个出错标志,如果OF=0,不做任何操作。 INTO指令通常安排在有符号数加减运算指令之后,58,中断返回指令,指令格式: IRET 执行的操作: (IP) (SP)+1,(SP) (SP) (SP)+2 (CS) (SP)+1,(SP) (SP) (SP)+2 (PSW) (SP)+1,(SP) (SP) (SP)+

29、2 指令说明:中断服务程序的最后一条指令,负责恢复断点和标志寄存器内容。该指令的标志位由堆栈中取出的值来设置,返回,59,处理器控制指令,该类指令主要有以下两大类指令组成: 一、标志操作指令 二、其他处理器控制指令,返回,60,标志操作指令,标志操作指令由以下三种指令组成: 一、进位标志CF操作指令 二、方向标志DF操作指令 三、中断允许标志IF操作指令,返回,61,进位标志CF操作指令,指令组成: (1)STC进位位置1指令: CF 1 (2)CLC进位位置0指令:CF 0 (3)CMC进位位求反指令: CF CF 指令说明: 用在多字节或字运算中,用来传递低位向高位的进位,STC置1,CL

30、C清0,CMC求反,返回,62,方向标志DF操作指令,指令组成: STD方向标志位置1指令:DF 1 CLD方向标志位置0指令:DF 0 指令说明:执行串操作指令过程中,决定字符地址的修改方向。STD置1:字符地址减量修改,CLD置0:字符地址增量修改,返回,63,中断允许标志IF操作指令,指令组成: STI中断标志位置1指令:IF 1 CLI中断标志位置0指令:IF 0 指令说明: STI置1,开放中断;CLI清0,屏蔽外部中断,返回,64,其他处理器控制指令,一、暂停指令 二、交权指令 三、等待指令 四、总线封锁指令,返回,65,暂停指令,指令格式: HLT 指令说明: 该指令经常和中断过

31、程联系在一起,常用于外部硬件中断,返回,66,交权指令,指令格式: ESC 指令说明: 在带协处理器的系统中,程序中的交权指令表示8086调用协处理器工作,返回,67,等待指令,指令格式: WAIT 指令说明: 该指令一般是和ESC指令配合使用。8086用ESC指令使协处理器工作以后,自己还可以执行一些其他操作,此时处于并行工作状态。要取回协处理器的处理结果。可安排一条等待指令WAIT指令过程中,不断测试CPU的TEST引腿上的信号,返回,68,总线封锁指令,指令格式: LOCK 指令说明: 该指令可以放在任何一条指令的前面,LOCK实际上是一个指令前缀。LOCK前缀用在8086最大模式中,在硬件上将CPU的LOCK引腿与总线控制器8289的LOCK输入端相连,用了指令前缀LOCK以后,CPU在执行前缀后面的一条指令时,会从LOCK引腿往外送1个低电平信号,CPU访问存储器或外设时,总线控制器会对总线实行封锁,使其他处理器得不到总线控制权,不能访问存储器或外设,返回,69,结束语,第3

温馨提示

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

评论

0/150

提交评论