程序控制指令

上传人:suns****4568 文档编号:93077133 上传时间:2019-07-16 格式:PPT 页数:59 大小:275.50KB
返回 下载 相关 举报
程序控制指令_第1页
第1页 / 共59页
程序控制指令_第2页
第2页 / 共59页
程序控制指令_第3页
第3页 / 共59页
程序控制指令_第4页
第4页 / 共59页
程序控制指令_第5页
第5页 / 共59页
点击查看更多>>
资源描述

《程序控制指令》由会员分享,可在线阅读,更多相关《程序控制指令(59页珍藏版)》请在金锄头文库上搜索。

1、1,程序控制指令,控制转移指令分为: 转移指令 循环控制指令 调用和返回指令 中断指令,2,转移指令的实质:改变IP(或CS)的内容。 所有转移指令不会影响标志位。 分为无条件转移和条件转移两种。,3.2.转移指令,3,(1) 无条件转移指令 - JMP 本指令无条件转移到指定的目标地址,以执行从该地址开始的程序段。根据设置CS、IP的方法,JMP指令分成4种情况。 段内直接转移: JMP disp 指令中给出的8/16位的位移量加到IP。CS保持不变。 段内间接转移: JMP reg/mem reg/mem中的16位偏移地址送IP。CS保持不变。 段间直接转移 JMP segment:off

2、set 指令中给出的16位的段和16位的偏移地址送到CS和IP。 段间间接转移 JMP mem32 mem32中的16位的段和16位的偏移地址送到CS和IP。,4,转移的目标地址由指令直接给出。指令中给出的目标地址实际上是一个相对于IP的位移量: 位移量 转移范围 汇编语言中格式 8位 -128+127 JMP SHORT OPRD 16位 -32768+32767 JMP NEAR PTR OPRD 例:JMP 0120H ;直接转向0120H JMP SHORT LP ;转向LP JMP NEAR PTR BBB ;转向BBB 由于是段内转移,故转移后CS内容保持不变, 段内直接转移,5,

3、段内间接转移 转移的目标地址由寄存器或存储单元的内容给出。 例1:JMP SI 若(SI)=1200H,则指令执行后,(IP)=1200H,于是转向代码段的偏移地址1200H处开始执行。 注意:目标地址以段内偏移的形式给出,而不是相对于IP的位移量,所以它是一个16位的操作数。,6,例2:JMP BX+DI 设指令执行前: (DS)=3000H,(BX)=1300H, (DI)=1200H,(32500H)=2350H; 则指令执行后:(IP)=2350H 在汇编语言中,段内间接寻址通常写成: JMP WORD PTRBX+DI 表示所取得的目标地址是一个字。,7,段间直接转移 在指令中直接给

4、出要转移到的目的段地址和偏移地址。 例:JMP 2000H:1000H 执行时,(IP)1000H,(CS)2000H 注:直接地址为符号地址时,段间直接转移指令中的符号地址前应加操作符FAR PTR。 例:JMP FAR PTR far_label 其中的far_label为远类型的标号。,8,转移的目的地址(段和偏移)在两个相邻的字存储单元中。例如: JMP DWORD PTRSI 设指令执行前:(DS)=4000H,(SI)=1212H, (41212H)=1000H,(41214H)=4A00H 则指令执行后:(IP)=1000H,(CS)=4A00H 于是转到4B000H处开始执行指

5、令。 例中的DWORD PTR表示转移地址是一个双字。,段间间接转移,9,4000,1212,+),41212,DS,SI,00,10,00,4A,41212 41213 41214 41215,1000,4A00,IP,CS,段间间接转移操作示意图,11111111,11101100,JMP DWORD PTR SI的机器码,DS:SI,10,条件转移指令可实现程序的条件分支。 条件转移指令根据标志位的状态来决定是否进行分支转移。 格式: JXX label ;xx为条件名称缩写 指令的转移范围为-128+127字节。 主要的条件转移指令参见p142表3-7。,(2)条件转移指令 - JXX

6、,11, 根据单个标志位设置的条件转移指令 JB/JC ;低于,或CF=1,则转移 JNB/JNC/JAE ;高于或等于,或CF=0,则转移 JP/JPE ;奇偶标志PF=1(偶),则转移 JNP/JPO ;奇偶标志PF=0(奇),则转移 JZ/JE ;结果为零(ZF=1),则转移 JNZ/JNE ;结果不为零(ZF=0),则转移 JS ;SF=1,则转移 JNS ;SF=0,则转移 JO ;OF=1,则转移 JNO ;OF=0,则转移,12,这类指令主要用来判断两个数的大小。一般指令序列为: CMP dist,src ;比较 Jxx label ;根据比较结果转移 判断无符号数的大小 JA

7、高于则转移(distsrc) 转移条件为: CF=0ZF=0 JNA/JBE 低于或等于则转移(distsrc) 转移条件为: CF=1ZF=1, 根据组合条件设置的条件转移指令,13,JG ;大于则转移(distsrc) 转移条件为: (SFOF=0)ZF=0 JGE ;大于或等于则转移(distsrc) 转移条件为: (SFOF=0)ZF=1 JL ;小于则转移(distsrc) 转移条件为: (SFOF=1)ZF=0 JLE ;小于或等于则转移(distsrc) 转移条件为: (SFOF=1)ZF=1,判断有符号数的大小,14,根据CX内容来决定是否转移的转移指令 JCXZ label

8、若(CX)=0,则转移到label处开始执行。,15,条件转移指令举例:以十六进制数形式显示BX中的内容。 MOV BX, 1234H MOV CH, 4 ; CH做循环计数器 ROT: MOV CL, 4 ; CL做移位计数器 ROL BX, CL ; 将最高4位移到低4位 MOV AL, BL AND AL, 0FH ; 取出低4位 ADD AL, 30H ; 转换为ASCII码 CMP AL, 39H ; 与 9 比较 JBE DISP ; 若(AL)9, 则转显示 ADD AL, 7 ; 若(AL)9, 再加7转为A-F DISP: MOV DL, AL ; (DL)字符 MOV AH

9、, 2 INT 21H ; 显示输出 DEC CH ; 4个十六进制数显示完否? JNZ ROT ; 没有, 循环 MOV DL, 48H ; H MOV AH, 2 INT 21H ; 最后显示H,16,看P86 例3.8,17,3.3.循环控制指令,用在循环程序中以确定是否要继续循环。 循环次数通常置于CX中。 转移的目标应在距离本指令-128+127的范围之内。 循环控制指令不影响标志位。,18,(1)LOOP 格式:LOOP label 操作:(CX)-1CX; 若(CX)0,则转至label处执行; 否则退出循环,执行LOOP后面的指令。 注:LOOP指令与下面的指令段等价: DEC

10、 CX JNZ label,19,(2)LOOPZ (LOOPE) 格式:LOOPZ label 操作:(CX)-1CX; 若(CX)0ZF=1,则转至label处执行; 否则退出循环,执行LOOP后面的指令。 (3)LOOPNZ (LOOPNE) 格式:LOOPNZ label 操作:(CX)-1CX; 若(CX)0ZF=0,则转至label处执行; 否则退出循环,执行LOOP后面的指令。,20,例1:给1A000H开始的256个内存单元均减去1,若 发现某个单元减为0则立即退出循环,其后的单元不再减1。程序段如下:(逻辑地址为1A00:0H) MOV AX, 1A00H MOV DS, A

11、X ; 1A00H段 MOV DI, -1 MOV CX, 256 GOON: INC DI DEC BYTE PTRDI LOOPNZ GOON HLT,21,例2:在8000H开始的长度为1000字节的字符串中 查找S,若找到,把其偏移地址记录在ADDR中,否则ADDR单元置为0FFFFH。 MOV DI, 8000H MOV CX, 1000 MOV AL, S MOV ADDR, 0FFFFH GOON: SCASB LOOPNZ GOON JNZ DONE DEC DI MOV ADDR,DI DONE: HLT,22,看P94 例3.10 P96 例3.13 P102 例3.16,

12、23,3.4 串操作指令,串:顺序放在内存中的一组相同类型的数据。 串操作:对串中的元素进行相同的操作。 串操作的寻址方式: 源操作数指针DS:SI(DS可超越) 目的操作数指针ES:DI 每次串操作后: 串操作指令自动修改SI和DI字节1,字2。DF标志决定。(注意:退出串操作后,指针指向最后操作的元素的下一个元素) 可完成两个存储单元之间的传送和比较操作(也仅是串指令可以),24,重复前缀 有的串操作指令前面可加上重复前缀REP。当使用REP前缀时,该指令重复执行,重复执行次数由CX决定(带有REP前缀的串操作指令每执行一次,CX自动减1)。 重复前缀包括: REP CX0 时重复执行 R

13、EPE/REPZ CX0ZF=1时重复执行 REPNE/REPNZ CX0ZF=0时重复执行,25,串指令使用的一般方法,设置源串地址,设置目标串地址,设置串长度,设置操作方向DF,串指令,MOV SI, 源串首地址 (或LEA SI, 源串),MOV DI, 目的串首地址 (或LEA DI, 目的串),MOV CX, 串长度,CLD(或STD),串指令,26,指令执行的操作为: MOVSB: (ES):(DI)(DS):(SI) SI1, DI1 MOVSW: (ES):(DI+1)(DI)(DS):(SI+1)(SI) SI2, DI2 指令也可写成:MOVS dest,src 但要求:

14、src用DS:SI寻址,dest用ES:DI寻址 传送是字节还是字,由操作数的类型决定,串传送指令MOVSB / MOVSW,27,串传送指令使用举例,用串传送指令实现200个字节的数据传送: LEA SI,MEM1 LEA DI,MEM2 MOV CX,200 CLD REP MOVSB HLT,28,串比较指令CMPSB / CMPSW,指令执行的操作为: CMPSB: (DS):(SI)-(ES):(DI) SI1, DI1 CMPSW: (DS):(SI+1)(SI)-(ES):(DI+1)(DI) SI2, DI2 指令也可写成:CMPS dest, src 比较的结果只反映在标志位

15、上,串本身无变化。 本指令可用来检查两个串是否相等。,29,串扫描SCASB / SCASW,执行的操作: 对字节:(AL)(ES):(DI) DI1 对字: (AX)(ES):(DI1)(DI) DI2 搜索指令执行的仍是比较(减法)操作,结果只影响标志位。 要搜索的关键字放在AL(字节)或AX(字)中。 本指令用于在串中查找指定的信息。,30,SCAS指令加上重复前缀后,可对串进行连续扫描比较: 若前缀为REPZ,则表示比较结果相等且(ZF=1)且串未结束(CX0),则继续比较。 若前缀为REPNZ,则表示比较结果不相等(ZF=0)且串未结束(CX0)就继续比较。,31,例:在ES段的偏移1000H开始处存有10个ASCII码。搜索E,若找到则记下搜索次数及存放地址,并在屏幕上显示Y;若未找到则显示N。(见右图) 在屏幕上显示一个字符的 指令段如下:(参见附录C.3) MOV DL, MOV AH,2 INT 21H 实现题目要求的程序段见下页:,1000H,41,42,43,44,45,46,A,B,C,D,F,. . .,ES段,E,32,

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

当前位置:首页 > 大杂烩/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号