




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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位远指针,它就是逻辑地址,代码段,代码段,实际编程时,汇编程序会根据目标地址的属性,自动处理成短转移、近转移或远转移 程序员可用操作符sho
3、rt、near ptr 或far ptr 强制成为需要的转移类型,无条件转移指令,只要执行无条件转移指令JMP,就使程序转到指定的目标地址,从目标地址处开始执行指令 操作数label是要转移到的目标地址(目的地址、转移地址) JMP指令分成4种类型: 段内转移、相对寻址 段内转移、间接寻址 段间转移、直接寻址 段间转移、间接寻址,JMP label;程序转向label标号指定的地址,无条件转移指令JMP(jump,JMP label;段内转移、相对寻址 ;IPIP位移量 JMP r16/m16;段内转移、间接寻址 ;IPr16/m16 JMP far ptr label;段间转移、直接寻址 ;
4、IP偏移地址,CS段地址 JMP far ptr mem;段间转移,间接寻址 ;IPmem,CSmem2,演示,演示,演示,演示,演示,条件转移指令,条件转移指令Jcc根据指定的条件确定程序是否发生转移。其通用格式为: Jcc label;条件满足,发生转移 ;IPIP8位位移量; ;否则,顺序执行 label是一个标号、一个8位位移量,表示Jcc指令后的那条指令的偏移地址,到目标指令的偏移地址的地址位移 label只支持短转移的相对寻址方式,Jcc指令的分类,Jcc指令不影响标志,但要利用标志(表2-4) 根据利用的标志位不同,分成三种情况: 判断单个标志位状态 比较无符号数高低 比较有符号
5、数大小,Jcc指令实际虽然只有16条,但却有30个助记符 采用多个助记符,目的是为了方便记忆和使用,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最
6、低位是“0”(偶数),还是“1”(奇数)。可以用位操作类指令 1:用逻辑与指令将除最低位外的其他位变成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内的奇数,加1 even:shr ax,
7、1;AXAX2,用右移一位的方法实现除以2。 本例中用RCR指令比SHR指令更好,例题2解答2 用JNC指令实现,mov bx,ax shr bx,1 ;将AX的最低位D0移进CF jnc even ;标志CF0,即D00:AX内是偶数,程序转移 add ax,1 ;标志CF1,即D01:AX内的奇数,加1 even:shr ax,1;AXAX2,还可用SAR、ROR和RCR指令,例题2解答3 用JNS指令实现,mov bx,ax ror bx,1 ;将AX的最低位D0移进最高位(符号位SF) jns even ;标志SF0,即D00:AX内是偶数,程序转移 add ax,1 ;标志SF1,即
8、D01:AX内的奇数,加1 even:shr ax,1;AXAX2,错误!循环指令不影响SF等标志,例 判断是否为字母Y,寄存器AL中是字母Y(含大小写),则令AH0,否则令AH1 cmp al,y;比较AL与小写字母y je next;相等,转移 cmp al,Y ;不相等, ;继续比较AL与大写字母Y je next;相等,转移 mov ah,-1;不相等,令AH1 jmp done;无条件转移指令 next:mov ah,0;相等的处理:令AH0 done,例 偶校验,对DL寄存器中8位数据进行偶校验 ;校验位存入CF标志 test dl,0ffh ;使CF0,同时设置PF标志 jpe
9、done ;DL中“1”的个数为偶数 ;正好CF0,转向done stc ;DL中“1”的个数为奇数,设置CF1 done:;完成,2. 比较无符号数高低,无符号数的大小用高(Above)、低(Below)表示,需要利用CF确定高低、利用ZF标志确定相等(Equal) 两数的高低分成4种关系,对应4条指令 JB(JNAE):目的操作数(=)源操作数 JBE(JNA):目的操作数()源操作数,3. 比较有符号数大小,判断有符号数的大(Greater)、小(Less),需要组合OF、SF标志、并利用ZF标志确定相等与否 两数的大小分成4种关系,分别对应4条指令 JL(JNGE):目的操作数(=)源
10、操作数 JLE(JNG):目的操作数()源操作数,例 求较大值 wmax,cmp ax,bx;比较AX和BX jae next;若AXBX,转移 xchg ax,bx;若AXBX,交换 next:mov wmax,ax,如果AX和BX存放的是有符号数, 则条件转移指令应采用JGE指令,例 求较大值(另解,cmp ax,bx;比较AX和BX jae next mov wmax, bx ;若AXBX,wmaxBX jmp done next:mov wmax,ax ;若AXBX,wmaxAX done,例 求较大值(另解对比,cmp ax,bx;比较AX和BX jbe next mov wmax,
11、 ax ;若AXBX,wmaxAX jmp done next:mov wmax,bx ;若AXBX,wmaxBX done,循环指令,一段代码序列多次重复执行就是循环 8088设计有针对CX计数器的计数循环指令 LOOP label;循环指令 ;首先CXCX1;然后判断;若CX0,转移 JCXZ label;如果CX0,则转移 label操作数采用相对短寻址方式 还有LOOPZ/LOOPE和LOOPNZ/LOOPNE两条指令,LOOPELOOPZ指令 指令格式: LOOPE label 或者 LOOPZ label 执行 LOOPELOOPZ 指令,在进行循环次数的计数(即CX (CX)1后
12、,若(CX)0且 ZF1,则转移到目标单元label ,否则顺序执行,LOOPNELOOPNZ指令 指令格式: LOOPNE label 或者 LOOPNZ label 执行LOOPNELOOPNZ指令,在进行循环次数的计数(即CX (CX)-1后,如(CX)0且ZF0,则转移到目标单元label ,否则顺序执行,例 数据块传送(字节,mov cx,400h ;设置循环次数:1K1024400H mov si,offset sbuf ;设置循环初值:SI指向数据段源缓冲区开始 mov di,offset dbuf ;DI指向附加段目的缓冲区开始(附加段) again:mov al,si;循环体
13、:实现数据传送 mov es:di,al;每次传送一个字节 inc si;SI和DI指向下一个单元 inc di loop again ;循环条件判定:循环次数减1,不为0转移(循环,例 数据块传送(字,mov cx,200h ;设置循环次数:1K2200H mov si,offset sbuf ;设置循环初值:SI指向数据段源缓冲区开始 mov di,offset dbuf ;DI指向附加段目的缓冲区开始(附加段) again:mov ax,si;循环体:实现数据传送 mov es:di,ax;每次传送一个字 add si,2;指向下一个(字)单元 add di,2 loop again ;
14、循环条件判定:循环次数减1,不为0转移(循环,例 在存储器的数据段中连续存放了100个8位带符号数,数据块的首地址为2000H。试编写程序统计其中负数的个数 ,并将个数存放到字节单元MINUS中。 分析: 为统计负数的个数,可先将MINUS清零然后将数据块中的带符号数逐个取入AL寄存器并使其影响标志位,再利用JS或JNS条件转移指令进行统计,MOV MINUS, 0;MINUS单元清零 MOV SI,2000H;将数据块首地址(SI) MOV CX, 100;数据块长度(循环次数)(CX) AGAIN: MOV AL, SI;取一个数到AL OR AL,AL;使数据影响标志位而其数值不变 JN
15、S NO_M;若不为负数,则转移到NO_M INC MINUS;否则为负数,MINUS单元加1 NO_M :INC SI LOOP AGAIN;CX减1,若不为0,则转移到AGAIN HLT ;停止,子程序指令,子程序是完成特定功能的一段程序 当主程序(调用程序)需要执行这个功能时,采用CALL调用指令转移到该子程序的起始处执行 当运行完子程序功能后,采用RET返回指令回到主程序继续执行,演示,转移指令有去无回 子程序调用需要返回, 其中利用堆栈保存返回地址,1. 子程序调用指令CALL,CALL指令分成4种类型(类似JMP) CALL label;段内调用、直接寻址 CALL r16/m16
16、;段内调用、间接寻址 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)(SP)2,SS:SP(IP,段内调用 call near ptr subp (1) 保存返回地址 (2) 转子程序 (IP) subp的偏移地址 段间调用 call far ptr subp (1) 保存返回地址 (2) 转子程序 (CS) subp的段地址 (IP) sub
17、p的偏移地址,2. 子程序返回指令RET,根据段内和段间、有无参数,分成4种类型 RET;无参数段内返回 RET i16;有参数段内返回 RET;无参数段间返回 RET i16;有参数段间返回 需要弹出CALL指令压入堆栈的返回地址 段内返回出栈偏移地址IP IPSS:SP, SPSP2 段间返回出栈偏移地址IP和段地址CS IPSS:SP,SPSP2 CSSS:SP,SPSP2,例 十六进制转换为ASCII码的子程序,子程序:将DL低4位的一位16进制数转换成ASCII码 htoascproc and dl,0fh;只取DL的低4位 or dl,30h;DL高4位变成3 cmp dl,39h
18、;是09,还是0Ah0Fh ? jbe htoend;是09,转移 add dl,7;是0Ah0Fh,加上7 htoend:ret;子程序返回 htoascendp,转换原理,主程序:调用子程序 mov dl,28h call htoasc,中断指令和系统功能调用,中断(Interrupt)是又一种改变程序执行顺序的方法 8088CPU支持256个中断,每个中断用一个编号(中断向量号)区别 中断指令有3条: INT n IRET INTO 本节主要掌握类似子程序调用指令的中断调用指令INT n,进而掌握系统功能调用,中断指令,INT n ;中断调用指令:产生n号中断 ;主程序使用,其中n表示中
19、断向量号 IRET ;中断返回指令:实现中断返回 ;中断服务程序使用,标志处理指令: CLC CF0 CMC CFCF STC CF1 CLD DF0 STD DF1 CLI IF0 STI IF1 注意: * 只影响本指令指定的标志,处理机控制指令,其他处理机控制指令: NOP 无操作 (机器码占一个字节) HLT 暂停机 (等待一次外中断,之后继续执行程序) WAIT 等待 (等待外中断,之后仍继续等待) ESC mem 换码 ( (mem) 数据总线 ) LOCK 封锁 (维持总线的锁存信号,直到其后的指令执行完) 注意: * 不影响条件标志,调用的一般过程: 功能编号 AH, 置入口参
20、数 执行软中断语句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 21H MOV DL,0AH INT 21H,显示回车,显示换行,3.显示字符串(功能调用号9) 功能:将当前数据区中DS:DX所
21、指向的以$结尾的字符串送 屏幕显示。 注:若字符串中包含字符串$,则不能采用本调用,只能循环 地使用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 BUF;存放字符串的段地址 MOV DS,DX LEA DX,BUF;存放字符串的首偏移地址 MOV AH,10 I
22、NT 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 ENDS STACK SEGMENT STACK DB 100 DUP(?) STACK ENDS CODE SEGM
23、ENT 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 21H CODE ENDS END S,上机演示 在屏幕上显示一行提示信息:“WHAT IS YOUR NAME,串操作指令 串传送指令 存入串指令 从串取指令 串比较指令 串扫描指令,1.MOVS 串传送指令 MOVS DEST, SRC 可以用无操作数指令代替: MOVSB (字节) MOVSW (字,例:MOVS ES:
24、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,DF=0,DF=0,与REP配合工作的 MOVS R
25、EP MOVS 执行操作:(1) 如(CX)= 0则退出REP,否则转(2) (2) (CX) (CX) -1 (3) 执行MOVS (4) 重复(1) (3,例datarea segment mess1 db personal_computer;源数据段 datarea ends extra segment mess2 db 17 dup (?);目的段 extra ends code segment lea si, mess1 ;源数据段首地址 lea di, mess2 ;目的数据段首地址 mov cx, 17 ;数据长度17个字节 cld ;DF=0 rep movsb ;开始传送字节
26、 code ends,lea si, mess1+16 lea di, mess2+16 mov cx, 17 std ; DF=1 rep movsb,2.CMPS串比较指令 CMPS SRC, DST CMPSB (字节) 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
27、) 如(CX)=0或ZF=0 (ZF=1)则退出, 否则转(2) (2) (CX)(CX)-1 (3) 执行CMPS (4) 重复(1) (3,例: 比较两个字符串,找出它们不相匹配的字节位置 lea si, mess1 lea di, mess2 mov cx, 8 cld repe cmpsb;找到不相匹配的字节时停止 ;(di)、(si)为不匹配字符位置,SCASB (字节) SCASW (字) 执行操作: 字节操作:(AL) - (DI), (DI)(DI)1 字操作:(AX) - (DI), (DI)(DI)2,3.SCAS串扫描指令,与REPE/REPZ和REPNE/REPNZ配合
28、工作的SCAS REPE/REPZ (REPNE/REPNZ) SCAS 执行操作:(1) 如(CX)=0或ZF=0 (ZF=1)则退出, 否则转(2) (2) (CX)(CX)-1 (3) 执行 SCAS (4) 重复(1) (3,例:从一个字符串中查找一个指定的字符 mess db COMPUTER lea di, mess mov al, T mov cx, 8 cld repne scasb;不是T则重复,DI): 相匹配字符的下一个地址 (CX):剩下还未比较的字符个数,4.LODS取串指令 LODSB (字节) LODSW (字) 执行操作: 字节操作:(AL)(SI), (SI)
29、(SI)1 字操作: (AX)(SI), (SI)(SI)2,注意: * LODS指令一般不与REP联用,STOSB (字节) 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存串指令,例:把mess2缓冲区的5个字节置为20H lea di, mess2 mov al, 20H mov cx, 5 cld re
30、p stosb;cx=0时停止,教学要求,了解8088/8086微处理器基本结构 掌握8088/8086的寄存器结构、存储器结构和寻址方式 熟悉汇编语言的语句格式,掌握8088/8086基本指令: 数据传送:MOVXCHGXLAT、PUSHPOP、LEA 加减运算:ADDSUB、ADCSBB、CMP、INCDEC 逻辑运算:ANDORXORNOTTEST、 移位指令:SHLSHRSAR、ROLRORRCLRCR 控制转移:JMPJccLOOP、CALLRET、INT n,总结,本章展开了8088CPU16位指令系统的常用指令 希望大家就如下几个方面进行一下总结: 操作数寻址方式和目的地址寻址方式 指令支持的操作数形式 常用指令的助记符和功能 指令对标志的影响 通过复习整理,形成指令系统的整体概念,进而掌握常用指令,指令执行,指令执行演示举例,设CS=1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年初入建筑领域必-备知识建筑设计基础模拟题集及答案
- 2025年美容美发店长招聘面试问题及答案解析
- 2025年初阶市场营销策略与案例研究题集及解析
- 电力基础知识培训总结课件
- 2025年市场营销策划师初级考试预测题及备考指南
- 2025年特岗教师招聘笔试预测题及答题技巧高中物理
- 电切削基础知识培训内容课件
- 2025年如何应对物资储备仓库保管员招聘面试中的难题这里有答案
- 2025年招聘面试宝典物资调配与仓储管理模拟题集
- 2025年物业合同与法规中级面试模拟题及应对策略
- 醉里乾坤大壶中日月长-初中语文九年级第六单元名著导读《水浒传》整本书阅读精读研讨课 公开课一等奖创新教学设计
- DB13(J)-T 8580-2024 双面彩钢板复合风管技术规程
- 第一章 有理数 大单元教学设计-2024-2025学年七年级数学上册(人教版2024)
- 教育教学课件:暑假生活(英文版)
- AQ 2029-2010 金属非金属地下矿山主排水系统安全检验规范(正式版)
- JGJ153-2016 体育场馆照明设计及检测标准
- 小学小升初数学试卷(基础题)
- 2024年交管12123学法减分考试题库和答案
- 黄瓜栽培技术及病虫害防治
- 教师如何应对学生的行为问题
- 良性滑膜瘤(腱鞘巨细胞瘤)
评论
0/150
提交评论