指令系统转移指令.ppt

上传人:牧羊曲112 文档编号:5268209 上传时间:2023-06-20 格式:PPT 页数:71 大小:1.05MB
返回 下载 相关 举报
指令系统转移指令.ppt_第1页
第1页 / 共71页
指令系统转移指令.ppt_第2页
第2页 / 共71页
指令系统转移指令.ppt_第3页
第3页 / 共71页
指令系统转移指令.ppt_第4页
第4页 / 共71页
指令系统转移指令.ppt_第5页
第5页 / 共71页
点击查看更多>>
资源描述

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

1、控制转移类指令,控制转移类指令用于实现分支、循环、过程等程序结构,是仅次于传送指令的常用指令重点掌握:JMP/Jcc/LOOP/JCXZ CALL/RET INT n/IRET 常用系统功能调用,控制转移类指令通过改变IP(和CS)值,实现程序执行顺序的改变,目标地址的寻址方式,相对寻址方式指令代码中提供目的地址相对于当前IP的位移量,转移到的目的地址(转移后的IP值)就是当前IP值加上位移量直接寻址方式指令代码中提供目的逻辑地址,转移后的CS和IP值直接来自指令操作码后的目的地址操作数间接寻址方式指令代码中指示寄存器或存储单元,目的地址从寄存器或存储单元中间接获得,用标号表达,用标号表达,用

2、寄存器或存储器操作数表达,目标地址的寻址范围:段内寻址,段内转移近转移(near)在当前代码段64KB范围内转移(32KB范围)不需要更改CS段地址,只要改变IP偏移地址段内转移短转移(short)转移范围可以用一个字节表达,在段内128127范围的转移,目标地址的寻址范围:段间寻址,段间转移远转移(far)从当前代码段跳转到另一个代码段,可以在1MB范围需要更改CS段地址和IP偏移地址目标地址必须用一个32位数表达,叫做32位远指针,它就是逻辑地址,代码段,代码段,实际编程时,汇编程序会根据目标地址的属性,自动处理成短转移、近转移或远转移 程序员可用操作符short、near ptr 或fa

3、r ptr 强制成为需要的转移类型,无条件转移指令,只要执行无条件转移指令JMP,就使程序转到指定的目标地址,从目标地址处开始执行指令操作数label是要转移到的目标地址(目的地址、转移地址)JMP指令分成4种类型:段内转移、相对寻址 段内转移、间接寻址 段间转移、直接寻址 段间转移、间接寻址,JMP label;程序转向label标号指定的地址,无条件转移指令JMP(jump),JMP label;段内转移、相对寻址;IPIP位移量 JMP r16/m16;段内转移、间接寻址;IPr16/m16 JMP far ptr label;段间转移、直接寻址;IP偏移地址,CS段地址 JMP far

4、 ptr mem;段间转移,间接寻址;IPmem,CSmem2,演示,演示,演示,演示,演示,条件转移指令,条件转移指令Jcc根据指定的条件确定程序是否发生转移。其通用格式为:Jcc label;条件满足,发生转移;IPIP8位位移量;否则,顺序执行label是一个标号、一个8位位移量,表示Jcc指令后的那条指令的偏移地址,到目标指令的偏移地址的地址位移label只支持短转移的相对寻址方式,Jcc指令的分类,Jcc指令不影响标志,但要利用标志(表2-4)根据利用的标志位不同,分成三种情况:判断单个标志位状态 比较无符号数高低 比较有符号数大小,Jcc指令实际虽然只有16条,但却有30个助记符

5、采用多个助记符,目的是为了方便记忆和使用,1.判断单个标志位状态,JZ/JE和JNZ/JNE利用零标志ZF,判断结果是否为零(或相等)JS和JNS利用符号标志SF,判断结果是正是负 JO和JNO利用溢出标志OF,判断结果是否产生溢出 JP/JPE和JNP/JPO利用奇偶标志PF,判断结果中“1”的个数是偶是奇 JC/JB/JNAE和JNC/JNB/JAE利用进位标志CF,判断结果是否进位或借位,例题2,题目:将AX中存放的无符号数除以2,如果是奇数则加1后除以2问题:如何判断AX中的数据是奇数还是偶数?解答:判断AX最低位是“0”(偶数),还是“1”(奇数)。可以用位操作类指令1:用逻辑与指令

6、将除最低位外的其他位变成0,保留最低位不变。判断这个数据是0,AX就是偶数;否则,为奇数2:将最低位用移位指令移至进位标志,判断进位标志是0,AX就是偶数;否则,为奇数3:将最低位用移位指令移至最高位(符号位),判断符号标志是0,AX就是偶数;否则,为奇数,例题2解答1 用JZ指令实现,test ax,01h;测试AX的最低位D0(不用AND指令,以免改变AX)jz even;标志ZF1,即D00:AX内是偶数,程序转移add ax,1;标志ZF0,即D01:AX内的奇数,加1even:shr ax,1;AXAX2,用右移一位的方法实现除以2。本例中用RCR指令比SHR指令更好。,例题2解答2

7、 用JNC指令实现,mov bx,axshr bx,1;将AX的最低位D0移进CFjnc even;标志CF0,即D00:AX内是偶数,程序转移add ax,1;标志CF1,即D01:AX内的奇数,加1even:shr ax,1;AXAX2,还可用SAR、ROR和RCR指令,例题2解答3 用JNS指令实现,mov bx,axror bx,1;将AX的最低位D0移进最高位(符号位SF)jns even;标志SF0,即D00:AX内是偶数,程序转移add ax,1;标志SF1,即D01:AX内的奇数,加1even:shr ax,1;AXAX2,错误!循环指令不影响SF等标志,例 判断是否为字母Y,

8、;寄存器AL中是字母Y(含大小写),则令AH0,否则令AH1cmp al,y;比较AL与小写字母yje next;相等,转移cmp al,Y;不相等,;继续比较AL与大写字母Yje next;相等,转移mov ah,-1;不相等,令AH1jmp done;无条件转移指令next:mov ah,0;相等的处理:令AH0done:,例 偶校验,;对DL寄存器中8位数据进行偶校验;校验位存入CF标志test dl,0ffh;使CF0,同时设置PF标志jpe done;DL中“1”的个数为偶数;正好CF0,转向donestc;DL中“1”的个数为奇数,设置CF1done:;完成,2.比较无符号数高低,

9、无符号数的大小用高(Above)、低(Below)表示,需要利用CF确定高低、利用ZF标志确定相等(Equal)两数的高低分成4种关系,对应4条指令JB(JNAE):目的操作数(=)源操作数JBE(JNA):目的操作数()源操作数,3.比较有符号数大小,判断有符号数的大(Greater)、小(Less),需要组合OF、SF标志、并利用ZF标志确定相等与否两数的大小分成4种关系,分别对应4条指令JL(JNGE):目的操作数(=)源操作数JLE(JNG):目的操作数()源操作数,例 求较大值 wmax,cmp ax,bx;比较AX和BXjae next;若AXBX,转移xchg ax,bx;若AX

10、BX,交换next:mov wmax,ax,如果AX和BX存放的是有符号数,则条件转移指令应采用JGE指令,例 求较大值(另解),cmp ax,bx;比较AX和BXjae nextmov wmax,bx;若AXBX,wmaxBXjmp donenext:mov wmax,ax;若AXBX,wmaxAXdone:,例 求较大值(另解对比),cmp ax,bx;比较AX和BXjbe nextmov wmax,ax;若AXBX,wmaxAXjmp donenext:mov wmax,bx;若AXBX,wmaxBXdone:,循环指令,一段代码序列多次重复执行就是循环8088设计有针对CX计数器的计数

11、循环指令LOOP label;循环指令;首先CXCX1;然后判断;若CX0,转移JCXZ label;如果CX0,则转移label操作数采用相对短寻址方式还有LOOPZ/LOOPE和LOOPNZ/LOOPNE两条指令,LOOPELOOPZ指令 指令格式:LOOPE label 或者 LOOPZ label 执行 LOOPELOOPZ 指令,在进行循环次数的计数(即CX(CX)1后,若(CX)0且 ZF1,则转移到目标单元label,否则顺序执行,LOOPNELOOPNZ指令指令格式:LOOPNE label 或者 LOOPNZ label执行LOOPNELOOPNZ指令,在进行循环次数的计数(

12、即CX(CX)-1后,如(CX)0且ZF0,则转移到目标单元label,否则顺序执行。,例 数据块传送(字节),mov cx,400h;设置循环次数:1K1024400Hmov si,offset sbuf;设置循环初值:SI指向数据段源缓冲区开始mov di,offset dbuf;DI指向附加段目的缓冲区开始(附加段)again:mov al,si;循环体:实现数据传送mov es:di,al;每次传送一个字节inc si;SI和DI指向下一个单元inc diloop again;循环条件判定:循环次数减1,不为0转移(循环),例 数据块传送(字),mov cx,200h;设置循环次数:1

13、K2200Hmov si,offset sbuf;设置循环初值:SI指向数据段源缓冲区开始mov di,offset dbuf;DI指向附加段目的缓冲区开始(附加段)again:mov ax,si;循环体:实现数据传送mov es:di,ax;每次传送一个字add si,2;指向下一个(字)单元add di,2loop again;循环条件判定:循环次数减1,不为0转移(循环),例 在存储器的数据段中连续存放了100个8位带符号数,数据块的首地址为2000H。试编写程序统计其中负数的个数,并将个数存放到字节单元MINUS中。分析:为统计负数的个数,可先将MINUS清零然后将数据块中的带符号数逐

14、个取入AL寄存器并使其影响标志位,再利用JS或JNS条件转移指令进行统计。,MOV MINUS,0;MINUS单元清零MOV SI,2000H;将数据块首地址(SI)MOV CX,100;数据块长度(循环次数)(CX)AGAIN:MOV AL,SI;取一个数到ALOR AL,AL;使数据影响标志位而其数值不变JNS NO_M;若不为负数,则转移到NO_MINC MINUS;否则为负数,MINUS单元加1NO_M:INC SI LOOP AGAIN;CX减1,若不为0,则转移到AGAINHLT;停止,子程序指令,子程序是完成特定功能的一段程序当主程序(调用程序)需要执行这个功能时,采用CALL调

15、用指令转移到该子程序的起始处执行当运行完子程序功能后,采用RET返回指令回到主程序继续执行,演示,转移指令有去无回 子程序调用需要返回,其中利用堆栈保存返回地址,1.子程序调用指令CALL,CALL指令分成4种类型(类似JMP)CALL label;段内调用、直接寻址CALL r16/m16;段内调用、间接寻址CALL far ptr label;段间调用、直接寻址CALL far ptr mem;段间调用、间接寻址CALL指令需要保存返回地址:段内调用当前偏移地址IP入栈(SP)(SP)2,SS:SP(IP)段间调用偏移地址IP和段地址CS入栈(SP)(SP)2,SS:SP(CS)(SP)(

16、SP)2,SS:SP(IP),段内调用call near ptr subp(1)保存返回地址(2)转子程序(IP)subp的偏移地址段间调用call far ptr subp(1)保存返回地址(2)转子程序(CS)subp的段地址(IP)subp的偏移地址,2.子程序返回指令RET,根据段内和段间、有无参数,分成4种类型RET;无参数段内返回RET i16;有参数段内返回RET;无参数段间返回RET i16;有参数段间返回需要弹出CALL指令压入堆栈的返回地址段内返回出栈偏移地址IPIPSS:SP,SPSP2段间返回出栈偏移地址IP和段地址CSIPSS:SP,SPSP2CSSS:SP,SPSP

17、2,例 十六进制转换为ASCII码的子程序,;子程序:将DL低4位的一位16进制数转换成ASCII码htoascprocand dl,0fh;只取DL的低4位or dl,30h;DL高4位变成3cmp dl,39h;是09,还是0Ah0Fh?jbe htoend;是09,转移add dl,7;是0Ah0Fh,加上7htoend:ret;子程序返回htoascendp,转换原理,;主程序:调用子程序mov dl,28hcall htoasc,中断指令和系统功能调用,中断(Interrupt)是又一种改变程序执行顺序的方法8088CPU支持256个中断,每个中断用一个编号(中断向量号)区别中断指令

18、有3条:INT n IRET INTO本节主要掌握类似子程序调用指令的中断调用指令INT n,进而掌握系统功能调用,中断指令,INT n;中断调用指令:产生n号中断;主程序使用,其中n表示中断向量号IRET;中断返回指令:实现中断返回;中断服务程序使用,标志处理指令:CLC CF0 CMC CFCF STC CF1 CLD DF0 STD DF1 CLI IF0 STI IF1 注意:*只影响本指令指定的标志,处理机控制指令,其他处理机控制指令:NOP 无操作(机器码占一个字节)HLT 暂停机(等待一次外中断,之后继续执行程序)WAIT 等待(等待外中断,之后仍继续等待)ESC mem 换码(

19、mem)数据总线)LOCK 封锁(维持总线的锁存信号,直到其后的指令执行完)注意:*不影响条件标志,调用的一般过程:功能编号 AH,置入口参数 执行软中断语句INT 21H,常用的dos系统功能调用:1.键盘输入(调用功能号1)调用格式:MOV AH,1 INT 21H 功能:等待从键盘输入一个字符并将输入字符的 ASCII码AL,若按CTRL+BREAK退出,DOS系统功能调用,2.单字符显示输出(调用功能号2)调用格式:MOV DL,a;待显示字符(如a)的ASCII码 DL MOV AH,2 INT 21H,功能:将DL中的字符送屏幕。例:MOV DL,0DH MOV AH,2 INT

20、21H MOV DL,0AH INT 21H,显示回车,显示换行,3.显示字符串(功能调用号9)功能:将当前数据区中DS:DX所指向的以$结尾的字符串送 屏幕显示。注:若字符串中包含字符串$,则不能采用本调用,只能循环 地使用2号调用。例:DATA SEGMENT BUF DB HOW DO YOU DO?$DATA ENDS:MOV DX,SEG BUF;存放字符串的段地址MOV DS,DX LEA DX,BUF;存放字符串的首偏移地址 MOV AH,9 INT 21H,输出字符串HOW DO YOU DO?,5.键盘输入字符串:(功能调用号:10(或0AH)调用格式:MOV DX,SEG

21、BUF;存放字符串的段地址 MOV DS,DX LEA DX,BUF;存放字符串的首偏移地址 MOV AH,10 INT 21H功能:从键盘上往DS:DX所指的输入缓冲区输入以回车键结束的字符串,并送显示器显示。对缓冲区的要求:BUF DB 80 DB?DB 80 DUP(0),;第一个字节存放缓冲区大小,不能 为0,用户确定;第二个字节存放实际输入的字符个数,系统填入;从键盘上输入字符串从第三个字节存 放(如果超过则多余去掉,响铃告警),DATA SEGMENT P DB 100 DB?DB 100 DUP(?)M DB WHAT IS YOUR NAME?$DATA ENDSSTACK S

22、EGMENT STACK DB 100 DUP(?)STACK ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK,S:MOV AX,DATA MOV DS,AX LEA DX,M MOV AH,9 INT 21H MOV DX,0FFSET P MOV AH,10 INT 21H MOV AH,4CH INT 21HCODE ENDS END S,上机演示在屏幕上显示一行提示信息:“WHAT IS YOUR NAME?”,串操作指令 串传送指令 存入串指令 从串取指令 串比较指令 串扫描指令,1.MOVS 串传送指令MOVS DEST,SRC可以

23、用无操作数指令代替:MOVSB(字节)MOVSW(字),例:MOVS ES:BYTE PTR DI,DS:SI 执行操作:(1)(DI)(SI)(2)字节操作:(SI)(SI)1,(DI)(DI)1 字操作:(SI)(SI)2,(DI)(DI)2 方向标志DF=0时用+,DF=1时用-。REP MOVS:将数据段中的整串数据传送到附加段中。源串(数据段)目的串(附加段)执行REP MOVS之前,应先做好:(1)源串首地址 SI(2)目的串首地址 DI(3)串长度 CX(4)建立方向标志(CLD使DF=0,STD使DF=1),(SI),低地址,高地址,数据段,附加段,(SI),(DI),(DI)

24、,DF=0,DF=0,与REP配合工作的 MOVS REP MOVS 执行操作:(1)如(CX)=0则退出REP,否则转(2)(2)(CX)(CX)-1(3)执行MOVS(4)重复(1)(3),例datarea segmentmess1 db personal_computer;源数据段datarea endsextra segmentmess2 db 17 dup(?);目的段extra endscode segmentlea si,mess1;源数据段首地址 lea di,mess2;目的数据段首地址 mov cx,17;数据长度17个字节 cld;DF=0 rep movsb;开始传送字

25、节 code ends,lea si,mess1+16 lea di,mess2+16 mov cx,17 std;DF=1 rep movsb,2.CMPS串比较指令 CMPS SRC,DSTCMPSB(字节)CMPSW(字)执行操作:(1)(SI)-(DI)根据比较结果设置条件标志位:相等 ZF=1 不等 ZF=0(2)字节操作:(SI)(SI)1,(DI)(DI)1 字操作:(SI)(SI)2,(DI)(DI)2,与REPE/REPZ和REPNE/REPNZ配合工作的CMPS REPE/REPZ(REPNE/REPNZ)CMPS 执行操作:(1)如(CX)=0或ZF=0(ZF=1)则退出

26、,否则转(2)(2)(CX)(CX)-1(3)执行CMPS(4)重复(1)(3),例:比较两个字符串,找出它们不相匹配的字节位置 lea si,mess1lea di,mess2mov cx,8cldrepe cmpsb;找到不相匹配的字节时停止;(di)、(si)为不匹配字符位置,SCASB(字节)SCASW(字)执行操作:字节操作:(AL)-(DI),(DI)(DI)1 字操作:(AX)-(DI),(DI)(DI)2,3.SCAS串扫描指令,与REPE/REPZ和REPNE/REPNZ配合工作的SCAS REPE/REPZ(REPNE/REPNZ)SCAS 执行操作:(1)如(CX)=0或

27、ZF=0(ZF=1)则退出,否则转(2)(2)(CX)(CX)-1(3)执行 SCAS(4)重复(1)(3),例:从一个字符串中查找一个指定的字符mess db COMPUTERlea di,messmov al,Tmov cx,8cldrepne scasb;不是T则重复,(DI):相匹配字符的下一个地址(CX):剩下还未比较的字符个数,4.LODS取串指令LODSB(字节)LODSW(字)执行操作:字节操作:(AL)(SI),(SI)(SI)1 字操作:(AX)(SI),(SI)(SI)2,注意:*LODS指令一般不与REP联用,STOSB(字节)STOSW(字)执行操作:字节操作:(DI

28、)(AL),(DI)(DI)1 字操作:(DI)(AX),(DI)(DI)2与REP配合工作的STOS REP STOS 执行操作:(1)如(CX)=0则退出REP,否则转(2)(2)(CX)(CX)-1(3)执行STOS(4)重复(1)(3),5.STOS存串指令,例:把mess2缓冲区的5个字节置为20Hlea di,mess2mov al,20Hmov cx,5cldrep stosb;cx=0时停止,教学要求,了解8088/8086微处理器基本结构掌握8088/8086的寄存器结构、存储器结构和寻址方式熟悉汇编语言的语句格式,掌握8088/8086基本指令:数据传送:MOVXCHGXL

29、AT、PUSHPOP、LEA加减运算:ADDSUB、ADCSBB、CMP、INCDEC逻辑运算:ANDORXORNOTTEST、移位指令:SHLSHRSAR、ROLRORRCLRCR控制转移:JMPJccLOOP、CALLRET、INT n,总结,本章展开了8088CPU16位指令系统的常用指令希望大家就如下几个方面进行一下总结:操作数寻址方式和目的地址寻址方式指令支持的操作数形式常用指令的助记符和功能指令对标志的影响通过复习整理,形成指令系统的整体概念,进而掌握常用指令,指令执行,指令执行演示举例,设CS=1000H,DS=1492HMOV AX,0064HADD AX,0100HMOV 2

30、000H,AX,指令执行,目的地址相对寻址方式,目的地址寄存器段内间接寻址方式,目的地址存储器段内间接寻址方式,目的地址段间直接寻址方式,目的地址存储器段间间接寻址方式,条件转移指令的含义,JZ/JEJump on Zero/EqualJNZ/JNEJump on Not Zero/EqualJSJump on SignJNSJump on Not SignJP/JPEJump on Parity/Parity EvenJNP/JPOJump on Not Parity/Parity OddJOJump on OverflowJNOJump on Not OverflowJC/JB/JNAEJ

31、ump on Carry/Below/Not Above or EqualJNC/JNB/JAEJump on Not Carry/Not Below/Above or EqualJBE/JNAJump on Below or Equal/Not AboveJNBE/JAJump on Not Below or Equal/AboveJL/JNGEJump on Less/Not Greater or EqualJNL/JGEJump on Not Less/Greater or EqualJLE/JNGJump on Less or Equal/Not GreaterJNLE/JGJump

32、on Not Less or Equal/Greater,奇偶校验,奇偶校验是计算机中最常使用的校验方法,因为不论用硬件还是用软件都很容易实现偶校验:如果数据中“1”的个数不是偶数,则校验位是1,使得包括校验位在内的数据中“1”的个数为偶数;否则,校验位为0奇校验:如果数据中“1”的个数不是奇数,则校验位是1,使得包括校验位在内的数据中“1”的个数为奇数;否则,校验位为0,主程序与子程序,CALL label,主程序,RET,子程序,回到CALL指令后的指令处返回地址,十六进制数转换为ASCII码的原理,主程序与中断服务程序,主程序,IRET,中断服务程序,断点,中断请求,中断请求可以来自处理器外部的中断源,也可以由处理器执行指令引起:例如执行INT i8指令。,8088的指令执行,

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

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


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号