微机原理 第三章6_第1页
微机原理 第三章6_第2页
微机原理 第三章6_第3页
微机原理 第三章6_第4页
微机原理 第三章6_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

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

文档简介

1、12022-4-293.2.5 调用调用/转移转移/循环控制循环控制/中断指令中断指令转移可分成两类:段内或段间转移。转移可分成两类:段内或段间转移。段内转移:只要改变段内转移:只要改变IP寄存器的内容寄存器的内容 指在同一段的范围之内进行转移指在同一段的范围之内进行转移 即用新的转移目标地址代替原有的即用新的转移目标地址代替原有的IP值。值。段间转移:要修改段间转移:要修改IP、 CS寄存器的内容寄存器的内容 转到另一段去执行程序。转到另一段去执行程序。 即即转移目标地址转移目标地址= 新的段地址和偏移地址组成。新的段地址和偏移地址组成。目标地址可以是:直接方式目标地址可以是:直接方式/间接

2、方式给出。间接方式给出。代码段代码段代码段代码段代码段代码段代码段代码段第第3章章 Pentium的指令系统的指令系统22022-4-291. 子程序调用和返回指令子程序调用和返回指令CALL label主程序主程序RET子程序子程序回到回到CALL指令后的指令指令后的指令处处返回地址返回地址 CALL 1000H 段内直接段内直接 CALLEAX 段内间接段内间接CALL2500H:3600H 段间直接段间直接CALLDWORD PTR DI 段间间接段间间接第第3章章 Pentium的指令系统的指令系统32022-4-29放在子程序的末尾放在子程序的末尾使子程序在功能完成后返回调用程序继续

3、执行。使子程序在功能完成后返回调用程序继续执行。*为能准确返回为能准确返回 ,返回指令类型与调用指令类型相对应。,返回指令类型与调用指令类型相对应。在子程序调用时,需要保存返回地址,返回地址入栈在子程序调用时,需要保存返回地址,返回地址入栈在子程序返回时:将返回地址出栈在子程序返回时:将返回地址出栈 段内返回段内返回出栈偏移地址出栈偏移地址IP IPSS:SP, SPSP2 段间返回段间返回出栈偏移地址出栈偏移地址IP和段地址和段地址CS IPSS:SP,SPSP2 CSSS:SP,SPSP2返回指令返回指令 RET第第3章章 Pentium的指令系统的指令系统42022-4-29RET n带

4、参数的返回指令:带参数的返回指令: RET指令指令可以带有一个立即数可以带有一个立即数i16,则堆栈指针,则堆栈指针SP将增加,即将增加,即SPSP+i16,这个特点使得程序可以方便地废除若干执行这个特点使得程序可以方便地废除若干执行CALL指令以前入栈的参数指令以前入栈的参数 段内返回段内返回 段间返回段间返回 段内带立即数返回段内带立即数返回 段间带立即数返回段间带立即数返回n只能为偶数只能为偶数第第3章章 Pentium的指令系统的指令系统52022-4-29(AX)(BX)(CX)(SP)code segment main proc far push ax push bx push c

5、x call sub retmain endpsub proc near ret 6sub endpcode ends (SP) 堆栈段堆栈段(SP)(IP)第第3章章 Pentium的指令系统的指令系统62022-4-29JMP1000H ;段内直接;段内直接JMPCX ;段内间接;段内间接JMP1000H:2000H ;段间直接;段间直接JMP DWORD PTR SI ;段间间接;段间间接JMP dest ; 必须指定转移目标地址必须指定转移目标地址(或转向地址或转向地址)。2. 无条件转移指令和条件转移指令无条件转移指令和条件转移指令JMP/J*(其中,(其中,* 代表各种条件)代表各

6、种条件)1) 无条件转移指令无条件转移指令JMP例:已知例:已知(BX)=1000H,(SI)=2000H , (DS)=2000H(23000H)=0250H, (23002H)=2000HJMP DWORD PTR BXSI则:则: (BX)+(SI)=3000H (IP)=(PA)=(16d(DS)+(BX)+(SI)=(23000H)=0250H (CS)=(PA+2)=2000H第第3章章 Pentium的指令系统的指令系统72022-4-29 JE/JZ JNE/JNZ JG/JNLE JNG/JLE JL/JNGE JNL/JGE JNA/JBE JB/JNAE JNB/JAE

7、JA/JNBEv JSv JNSv JOv JNOv JPv NPv JCXZv JECXZ2) 条件转移指令条件转移指令J*第第3章章 Pentium的指令系统的指令系统82022-4-29所有条件转移指令都是相对转移形式所有条件转移指令都是相对转移形式, 段内范围。段内范围。当需往一个较远地方进行条件转移时,当需往一个较远地方进行条件转移时,选用条件转移转到附近一个单元,选用条件转移转到附近一个单元,然后,再用无条件转移转到较远的目的地。然后,再用无条件转移转到较远的目的地。条件转移指令中,相当一部分指令是在比较完二个条件转移指令中,相当一部分指令是在比较完二个 数大小后,根据结果而决定是

8、否转移,数大小后,根据结果而决定是否转移, 条件转移指令不影响标志位条件转移指令不影响标志位第第3章章 Pentium的指令系统的指令系统92022-4-29按转移条件不同,条件转移指令可以分为四大类:按转移条件不同,条件转移指令可以分为四大类: 以单个状态标志作为转移条件助记符以单个状态标志作为转移条件助记符 转移条件转移条件 以以CX的值为的值为0作为转移条件作为转移条件JCXZ/JECXZ(E)CX=0第第3章章 Pentium的指令系统的指令系统102022-4-29JA/JNBECFZF=0高于高于/JAE/JNB/JNCCF=0 高于或等于高于或等于/无进位无进位JB/JNAE/J

9、CCF=1 /不高于等于不高于等于/有进位有进位JBE/JNACFZF=1 /不高于不高于以两个无符号数比较的结果作为转移条件以两个无符号数比较的结果作为转移条件以两个带符号数比较的结果作为转移条件以两个带符号数比较的结果作为转移条件JG/JNLE(SF OF)ZF=0大于大于/JGE/JNL SF OF=0 大于或等于大于或等于/JL/JNGE SF OF=1 /不大于等于不大于等于JLE/JNG(SF OF)ZF=1/不大于不大于第第3章章 Pentium的指令系统的指令系统112022-4-29条件转移指令应用条件转移指令应用 例:比较二个数是否相等例:比较二个数是否相等, 如相等做动作

10、如相等做动作1 , 否则否则 做动作做动作2CMP AX,BXAction_2: 或或 CMP AX,BX action_1: 第第3章章 Pentium的指令系统的指令系统122022-4-29例:例: X,Y放在放在X,Y单元里,单元里,(带符号数判断带符号数判断) 先判先判X 50,YES too_high, NO 做做X-Y , 溢出溢出overflow , 否则求否则求|X-Y|result程序程序: MOV AX, X CMP AX, 50 JG too_high ;大于转大于转too_highSUB AX, YJO overflow ;溢出转溢出转overflowJNS nonn

11、eg ; S=0转转nonneg NEG AX nonneg: MOV result , AXtoo_high:overflow:第第3章章 Pentium的指令系统的指令系统132022-4-29 例例:在在M中有一个首地址为中有一个首地址为array的的N字数组字数组, 要求测试其中正数、要求测试其中正数、0及负及负数的个数。数的个数。 (带符号数判断带符号数判断), 正数个数放在(正数个数放在(DI)中)中, 0的个数放在(的个数放在(SI)中,负数的个数放在中,负数的个数放在 N-(DI)-(SI)送()送(AX), 如果没有负数转如果没有负数转skip, 如果有负数转如果有负数转ne

12、g_val程序:程序: MOV CX,N ; N字数组字数组 MOV BX,0 MOV DI,BX MOV SI,BX AGAIN: CMP WORD PTR ARRARYBX, 0 JLE LESS_OR_AG INC DI ;正数个数正数个数 JMP SHORT NEAT LESS_OR_AG: JL NEAT INC SI ; 0的个数的个数NEAT: ADD BX, 2 DEC CX JNZ AGAIN MOV AX,N SUB AX,DI SUB AX,SI JZ SKIP ;没有负数没有负数 JMP NEAR PTR NEG_VAL ; 负数负数 SKIP: NEG_VAL: 第第

13、3章章 Pentium的指令系统的指令系统142022-4-293. 循环控制指令循环控制指令循环控制指令用于使一些程序段反复执行循环控制指令用于使一些程序段反复执行 循环控制指令有三种:循环控制指令有三种: (1)、LOOP (Loop) 循环指令循环指令 (2)、LOOPE/LOOPZ 当相等当相等/为为“0”循环循环 (3)、LOOPNE/LOOPNZ 当不相等当不相等/不为不为“0”循环循环注意:注意:* CX中存放循环次数中存放循环次数, 只能使用段内直接寻址的只能使用段内直接寻址的8位位位移量位移量(-128127) * ECX 中存放循环次数中存放循环次数, 只能使用段内直接寻址

14、的只能使用段内直接寻址的16位位移量(位位移量(-3276832767)助记符助记符转移条件转移条件不转移条件不转移条件LOOPCX0CX=0LOOPZCX0且且ZF=1CX=0或或ZF=0LOOPNZCX0且且ZF=0CX=0或或ZF=1第第3章章 Pentium的指令系统的指令系统152022-4-29LOOPxx符号地址符号地址 执行执行 操作操作 : ((E)CX) ((E)CX)- 1 此此操作不影响标志操作不影响标志 检查转移条件检查转移条件xx,满足转向目标地址去执行,满足转向目标地址去执行; 不满足执行不满足执行LOOPxx后一条指令后一条指令与条件转移指令不同的是:与条件转移

15、指令不同的是:循环指令隐含循环指令隐含 ( (E)CX ) 减操作。减操作。第第3章章 Pentium的指令系统的指令系统162022-4-29例例: 求首地址为求首地址为ARRAY的的M个字之和,结果存个字之和,结果存入入 TOTAL。 MOV CX, M MOV AX, 0 MOV SI, AXSTART_LOOP: ADD AX, ARRAYSI ADD SI, 2 LOOP START_LOOP MOV TOTAL, AX第第3章章 Pentium的指令系统的指令系统172022-4-29 例:例: 在在string字符串中查找空格字符,串长度为字符串中查找空格字符,串长度为N。修改偏

16、址修改偏址BXYNAL 关键字关键字CX 串长度串长度NDS:BX 串首址串首址判判BX是关键字?是关键字? (CX) (CX)- -1找到处理找到处理未找到处理未找到处理 (CX) = 0 ?YN结束出口结束出口第第3章章 Pentium的指令系统的指令系统182022-4-29用条件转移:用条件转移: JZ MOV CX, N MOV AX, SEG string MOV DS, AX LEA BX, string MOV AL,20H next: CMP AL,BX JZ findINC BX DEC CX JNZ next 未找到处理未找到处理JMP exit find: 找到处理找到

17、处理exit: 结束出口结束出口用循环指令用循环指令:LOOP NZ nextMOV CX, NMOV AX, SEG stringMOV DS, AXLEA BX, string MOV AL,20H next: CMP AL, BX INC BXLOOPNZ nextJZ find未找到处理未找到处理 JMP exit find: 找到处理找到处理exit: 结束出口结束出口 DEC BXnext : INC BX CMP AL,BX LOOP NZ next JZ find 未找到处理未找到处理 JMP exit find: 找到处理找到处理exit: 结束出口结束出口192022-4-

18、29思考:思考: 去掉指令去掉指令JMP exit ,程序执行结果会怎样?,程序执行结果会怎样? PUSH F、POPF可否去掉?若要去掉,程序如何修改?可否去掉?若要去掉,程序如何修改? 执行完执行完LOOPNZ后,可否根据后,可否根据CX=0来来判断查找结果判断查找结果? 有人认为有人认为CX=0,即,即说明没找到说明没找到,对吗?,对吗? 第第3章章 Pentium的指令系统的指令系统202022-4-29循环指令说明:循环指令说明: LOOP退出循环条件是(退出循环条件是(CX)=0 LOOPZ和和LOOPNZ提供了提前结束循环的可能提供了提前结束循环的可能, 不一定要等到不一定要等到(CX)=0才退出循环。才退出循环。 在串中查找字符,查到了,就可退出,在串中查找字符,查到了

温馨提示

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

评论

0/150

提交评论