指令系统转移指令.pptx

上传人:莉*** 文档编号:73781686 上传时间:2023-02-22 格式:PPTX 页数:71 大小:523.51KB
返回 下载 相关 举报
指令系统转移指令.pptx_第1页
第1页 / 共71页
指令系统转移指令.pptx_第2页
第2页 / 共71页
点击查看更多>>
资源描述

《指令系统转移指令.pptx》由会员分享,可在线阅读,更多相关《指令系统转移指令.pptx(71页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

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

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

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

4、P far ptr label;段间转移、直接寻址;IP偏移地址,CS段地址 JMP far ptr mem;段间转移,间接寻址;IPmem,CSmem2演示演示演示演示演示第6页/共71页 条件转移指令条件转移指令Jcc根据指定的条件确定程序是否发生转移。其通用格式为:Jcc label;条件满足,发生转移;IPIP8位位移量;否则,顺序执行label是一个标号、一个8位位移量,表示Jcc指令后的那条指令的偏移地址,到目标指令的偏移地址的地址位移label只支持短转移的相对寻址方式第7页/共71页Jcc指令的分类Jcc指令不影响标志,但要利用标志(表2-4)根据利用的标志位不同,分成三种情况

5、:判断单个标志位状态 比较无符号数高低 比较有符号数大小 Jcc指令实际虽然只有16条,但却有30个助记符 采用多个助记符,目的是为了方便记忆和使用第8页/共71页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,判断结果是否进位或借位第9页/共71页例题2题目:将AX中存放的无符号数除以2,如果是奇数则加1后除以2

6、问题:如何判断AX中的数据是奇数还是偶数?解答:判断AX最低位是“0”(偶数),还是“1”(奇数)。可以用位操作类指令1:用逻辑与指令将除最低位外的其他位变成0,保留最低位不变。判断这个数据是0,AX就是偶数;否则,为奇数2:将最低位用移位指令移至进位标志,判断进位标志是0,AX就是偶数;否则,为奇数3:将最低位用移位指令移至最高位(符号位),判断符号标志是0,AX就是偶数;否则,为奇数第10页/共71页例题2解答1 用JZ指令实现test ax,01h;测试AX的最低位D0(不用AND指令,以免改变AX)jz even;标志ZF1,即D00:AX内是偶数,程序转移add ax,1;标志ZF0

7、,即D01:AX内的奇数,加1even:shr ax,1;AXAX2用右移一位的方法实现除以2。本例中用RCR指令比SHR指令更好。第11页/共71页例题2解答2 用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指令第12页/共71页例题2解答3 用JNS指令实现mov bx,axror bx,1;将AX的最低位D0移进最高位(符号位SF)jns even;标志SF0,即D00:A

8、X内是偶数,程序转移add ax,1;标志SF1,即D01:AX内的奇数,加1even:shr ax,1;AXAX2错误!循环指令不影响SF等标志ADD BX,0;增加一条指令第13页/共71页例 判断是否为字母Y;寄存器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:第14页/共71页例 偶校验;对DL寄存器中8位数据进行偶

9、校验;校验位存入CF标志test dl,0ffh;使CF0,同时设置PF标志jpe done;DL中“1”的个数为偶数;正好CF0,转向donestc;DL中“1”的个数为奇数,设置CF1done:;完成第15页/共71页2.比较无符号数高低无符号数的大小用高(Above)、低(Below)表示,需要利用CF确定高低、利用ZF标志确定相等(Equal)两数的高低分成4种关系,对应4条指令JB(JNAE):目的操作数(=)源操作数JBE(JNA):目的操作数()源操作数第16页/共71页3.比较有符号数大小判断有符号数的大(Greater)、小(Less),需要组合OF、SF标志、并利用ZF标志

10、确定相等与否两数的大小分成4种关系,分别对应4条指令JL(JNGE):目的操作数(=)源操作数JLE(JNG):目的操作数()源操作数第17页/共71页例 求较大值 wmaxcmp ax,bx;比较AX和BXjae next;若AXBX,转移xchg ax,bx;若AXBX,交换next:mov wmax,ax如果AX和BX存放的是有符号数,则条件转移指令应采用JGE指令第18页/共71页例 求较大值(另解)cmp ax,bx;比较AX和BXjae nextmov wmax,bx;若AXBX,wmaxBXjmp donenext:mov wmax,ax;若AXBX,wmaxAXdone:第19

11、页/共71页例 求较大值(另解对比)cmp ax,bx;比较AX和BXjbe nextmov wmax,ax;若AXBX,wmaxAXjmp donenext:mov wmax,bx;若AXBX,wmaxBXdone:第20页/共71页循环指令一段代码序列多次重复执行就是循环8088设计有针对CX计数器的计数循环指令LOOP label;循环指令;首先CXCX1;然后判断;若CX0,转移JCXZ label;如果CX0,则转移label操作数采用相对短寻址方式还有LOOPZ/LOOPE和LOOPNZ/LOOPNE两条指令dec cxjnz label第21页/共71页LOOPELOOPZ指令

12、指令格式:LOOPE label 或者 LOOPZ label 执行 LOOPELOOPZ 指令,在进行循环次数的计数(即CX (CX)1后,若(CX)0且 ZF1,则转移到目标单元label,否则顺序执行第22页/共71页LOOPNELOOPNZ指令指令格式:LOOPNE label 或者 LOOPNZ label执行LOOPNELOOPNZ指令,在进行循环次数的计数(即CX (CX)-1后,如(CX)0且ZF0,则转移到目标单元label,否则顺序执行。第23页/共71页例 数据块传送(字节)mov cx,400h;设置循环次数:1K1024400Hmov si,offset sbuf;设

13、置循环初值:SI指向数据段源缓冲区开始mov di,offset dbuf;DI指向附加段目的缓冲区开始(附加段)again:mov al,si;循环体:实现数据传送mov es:di,al;每次传送一个字节inc si;SI和DI指向下一个单元inc diloop again;循环条件判定:循环次数减1,不为0转移(循环)第24页/共71页例 数据块传送(字)mov cx,200h;设置循环次数:1K2200Hmov si,offset sbuf;设置循环初值:SI指向数据段源缓冲区开始mov di,offset dbuf;DI指向附加段目的缓冲区开始(附加段)again:mov ax,si

14、;循环体:实现数据传送mov es:di,ax;每次传送一个字add si,2;指向下一个(字)单元add di,2loop again;循环条件判定:循环次数减1,不为0转移(循环)第25页/共71页例 在存储器的数据段中连续存放了100个8位带符号数,数据块的首地址为2000H。试编写程序统计其中负数的个数,并将个数存放到字节单元MINUS中。分析:为统计负数的个数,可先将MINUS清零然后将数据块中的带符号数逐个取入AL寄存器并使其影响标志位,再利用JS或JNS条件转移指令进行统计。第26页/共71页MOV MINUS,0;MINUS单元清零MOV SI,2000H;将数据块首地址(SI

15、)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 ;停止第27页/共71页 子程序指令子程序是完成特定功能的一段程序当主程序(调用程序)需要执行这个功能时,采用CALL调用指令转移到该子程序的起始处执行当运行完子程序功能后,采用RET返回指令回到主程序继续执行演示 转移指令有去无回 子程序调用需要返回,其中利用堆栈

16、保存返回地址第28页/共71页 1.子程序调用指令CALLCALL指令分成4种类型(类似JMP)CALL label;段内调用、直接寻址CALL r16/m16;段内调用、间接寻址CALL far ptr label;段间调用、直接寻址CALL far ptr mem;段间调用、间接寻址CALL指令需要保存返回地址:n段内调用当前偏移地址IP入栈(SP)(SP)2,SS:SP(IP)n段间调用偏移地址IP和段地址CS入栈(SP)(SP)2,SS:SP(CS)(SP)(SP)2,SS:SP(IP)第29页/共71页段内调用call near ptr subp (1)保存返回地址 (2)转子程序

17、(IP)subp的偏移地址段间调用call far ptr subp (1)保存返回地址 (2)转子程序 (CS)subp的段地址 (IP)subp的偏移地址第30页/共71页 2.子程序返回指令RET根据段内和段间、有无参数,分成4种类型RET;无参数段内返回RET i16;有参数段内返回RET;无参数段间返回RET i16;有参数段间返回需要弹出CALL指令压入堆栈的返回地址n段内返回出栈偏移地址IPIPSS:SP,SPSP2n段间返回出栈偏移地址IP和段地址CSIPSS:SP,SPSP2CSSS:SP,SPSP2第31页/共71页例 十六进制转换为ASCII码的子程序;子程序:将DL低4

18、位的一位16进制数转换成ASCII码htoasc procand dl,0fh;只取DL的低4位or dl,30h;DL高4位变成3cmp dl,39h;是09,还是0Ah0Fh?jbe htoend;是09,转移add dl,7;是0Ah0Fh,加上7htoend:ret;子程序返回htoasc endp转换原理转换原理;主程序:调用子程序mov dl,28hcall htoasc第32页/共71页 中断指令和系统功能调用中断(Interrupt)是又一种改变程序执行顺序的方法8088CPU支持256个中断,每个中断用一个编号(中断向量号)区别中断指令有3条:INT n IRET INTO本

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

20、后继续执行程序)WAIT 等待(等待外中断,之后仍继续等待等待外中断,之后仍继续等待)ESC mem 换码(mem)数据总线数据总线 )LOCK 封锁(维持总线的锁存信号,直到其后的指令执行完维持总线的锁存信号,直到其后的指令执行完)注意注意:*不影响条件标志不影响条件标志 第36页/共71页调用的一般过程:功能编号 AHAH,置入口参数 执行软中断语句INT 21HINT 21H常用的dos系统功能调用:1.键盘输入(调用功能号1)调用格式:MOV AH,1MOV AH,1 INT 21H INT 21H 功能:等待从键盘输入一个字符并将输入字符的 ASCIIASCII码ALAL,若按CTR

21、L+BREAKCTRL+BREAK退出DOS系统功能调用第37页/共71页2.单字符显示输出(调用功能号2)调用格式:MOV DL,MOV DL,a a ;待显示字符(如a)的ASCII码 DL MOV AH,2MOV AH,2 INT 21H INT 21H功能:将DLDL中的字符送屏幕。例:MOV DL,0DHMOV DL,0DH MOV AH,2 MOV AH,2 INT 21H INT 21H MOV DL,0AH MOV DL,0AH INT 21H INT 21H显示回车显示换行第38页/共71页3.显示字符串(功能调用号9)功能:将当前数据区中DS:DXDS:DX所指向的以$结尾

22、的字符串送 屏幕显示。注:若字符串中包含字符串$,则不能采用本调用,只能循环 地使用2号调用。例:DATA SEGMENTDATA SEGMENT BUF DB BUF DB HOW DO YOU DO?$HOW DO YOU DO?$DATA ENDS DATA ENDS :MOV DX,SEG BUF;MOV DX,SEG BUF;存放字符串的段地址存放字符串的段地址MOV DS,DXMOV DS,DX LEA DX,BUF;LEA DX,BUF;存放字符串的首偏移地址 MOV AH,9MOV AH,9 INT 21HINT 21H输出字符串HOW DO YOU DOHOW DO YOU

23、DO?第39页/共71页5.键盘输入字符串:(功能调用号:10(或0AH)调用格式:MOV DX,SEG BUF;MOV DX,SEG BUF;存放字符串的段地址存放字符串的段地址 MOV DS,DXMOV DS,DX LEA DX,BUF;LEA DX,BUF;存放字符串的首偏移地址 MOV AH,10MOV AH,10 INT 21H INT 21H功能:从键盘上往DS:DXDS:DX所指的输入缓冲区输入以回车键结束的字符串,并送显示器显示。对缓冲区的要求:BUF DB 80 BUF DB 80 DB?DB?DB 80 DUP(0)DB 80 DUP(0);第一个字节存放缓冲区大小,不能

24、为0,用户确定;第二个字节存放实际输入的字符个数,系统填入;从键盘上输入字符串从第三个字节存 放(如果超过则多余去掉,响铃告警)第40页/共71页DATA SEGMENTDATA SEGMENT P DB 100 P DB 100 DB?DB?DB 100 DUP(?)DB 100 DUP(?)M DB M DB WHAT IS YOUR NAME?$WHAT IS YOUR NAME?$DATA ENDSDATA ENDSSTACK SEGMENT STACKSTACK SEGMENT STACK DB 100 DUP(?)DB 100 DUP(?)STACK ENDSSTACK ENDSC

25、ODE SEGMENTCODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK ASSUME CS:CODE,DS:DATA,SS:STACKS:MOV AX,DATAS:MOV AX,DATA MOV DS,AX MOV DS,AX LEA DX,M LEA DX,M MOV AH,9 MOV AH,9 INT 21H INT 21H MOV DX,0FFSET P MOV DX,0FFSET P MOV AH,10 MOV AH,10 INT 21H INT 21H MOV AH,4CH MOV AH,4CH INT 21H INT 21HCODE ENDS

26、CODE ENDS END S END S上机演示在屏幕上显示一行提示信息:“WHAT IS YOUR NAME?WHAT IS YOUR NAME?”第41页/共71页串操作指令 串传送指令 存入串指令 从串取指令 串比较指令 串扫描指令第42页/共71页1.MOVS 串传送指令MOVS DEST,SRC可以用无操作数指令代替:MOVSB(字节)MOVSW(字)第43页/共71页例: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时用+,

27、DF=1时用-。REP MOVS:将数据段中的整串数据传送到附加段中。源串(数据段)目的串(附加段)执行REP MOVS之前,应先做好:(1)源串首地址 SI(2)目的串首地址 DI(3)串长度 CX(4)建立方向标志(CLD使DF=0,STD使DF=1)第44页/共71页(SI)低地址高地址数据段附加段(SI)(DI)(DI)DF=0DF=0第45页/共71页与REP配合工作的 MOVS REP MOVS 执行操作:(1)如(CX)=0则退出REP,否则转(2)(2)(CX)(CX)-1 (3)执行MOVS(4)重复(1)(3)第46页/共71页例datarea segmentmess1 d

28、b 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 ;开始传送字节开始传送字节 code endslea si,mess1+16 lea di,mess2+16 mov cx,17 std ;DF=1 rep movsb第47页

29、/共71页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第48页/共71页与REPE/REPZ和REPNE/REPNZ配合工作的CMPS REPE/REPZ(REPNE/REPNZ)CMPS 执行操作:(1)如(CX)=0或ZF=0(ZF=1)则退出,否则转(2)(2)(CX)(CX)-1 (3)执行CMPS (4)重复(1)(3)第49页/共71页例:比较两个字符

30、串,找出它们不相匹配的字节位置 lea si,mess1lea di,mess2mov cx,8cldrepe cmpsb;找到不相匹配的字节时停止;(di)、(si)为不匹配字符位置第50页/共71页SCASB(字节)SCASW(字)执行操作:字节操作:(AL)-(DI),(DI)(DI)1 字操作:(AX)-(DI),(DI)(DI)23.SCAS串扫描指令第51页/共71页与REPE/REPZ和REPNE/REPNZ配合工作的SCAS REPE/REPZ(REPNE/REPNZ)SCAS 执行操作:(1)如(CX)=0或ZF=0(ZF=1)则退出,否则转(2)(2)(CX)(CX)-1

31、(3)执行 SCAS (4)重复(1)(3)第52页/共71页例:从一个字符串中查找一个指定的字符mess db COMPUTERlea di,messmov al,Tmov cx,8cldrepne scasb;不是T则重复(DI):相匹配字符的下一个地址(CX):剩下还未比较的字符个数COMPUTER(di)COMPUTER(di)第53页/共71页4.LODS取串指令LODSB(字节)LODSW(字)执行操作:字节操作:(AL)(SI),(SI)(SI)1 字操作:(AX)(SI),(SI)(SI)2注意注意:*LODS指令一般不与指令一般不与REP联用联用 第54页/共71页STOSB

32、(字节)STOSW(字)执行操作:字节操作:(DI)(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存串指令第55页/共71页例:把mess2缓冲区的5个字节置为20Hlea di,mess2mov al,20Hmov cx,5cldrep stosb;cx=0时停止第56页/共71页教学要求了解8088/8086微处理器基本结构掌握8088/8086的寄存器结构、存储器结构和寻址方式熟悉

33、汇编语言的语句格式,掌握8088/8086基本指令:数据传送:MOVXCHGXLAT、PUSHPOP、LEA加减运算:ADDSUB、ADCSBB、CMP、INCDEC逻辑运算:ANDORXORNOTTEST、移位指令:SHLSHRSAR、ROLRORRCLRCR控制转移:JMPJccLOOP、CALLRET、INT n第57页/共71页总结本章展开了8088CPU16位指令系统的常用指令希望大家就如下几个方面进行一下总结:操作数寻址方式和目的地址寻址方式指令支持的操作数形式常用指令的助记符和功能指令对标志的影响通过复习整理,形成指令系统的整体概念,进而掌握常用指令指令执行第58页/共71页指令执行演示举例设CS=1000H,DS=1492HMOV AX,0064HADD AX,0100HMOV 2000H,AX指令执行指令执行第59页/共71页感谢您的观看!第71页/共71页

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 应用文书 > PPT文档

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁