版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、转移指令,注意,段内转移和段间转移,段内转移:目标地址在当前段内 属性为NEAR,段间转移:目标地址不在当前段内 属性为FAR,段间转移,转移指令修改(IP,转移指令修改 (CS)和(IP,除中断指令,其它指令均不影响标志位,直接转移和间接转移,直接转移:目标地址直接 出现在指令中,间接转移:目标地址间接存储 于寄存器或存储单元中,间接转移,1、转移指令,两种,JMP 无条件转移指令,Jcc 条件转移指令,1)、JMP无条件转移指令,五种格式,段内直接短转移 段内直接近转移 段内间接转移 段间直接远转移 段间间接转移,1)、段内直接短转移,格式,JMP SHORT 目的地址标号,IP)当前(I
2、P)+disp8,注意,双字节指令,机器码: E8 KK KK为disp8,带符号数的补码,范围-128+127,目的地址的偏移地址 =当前(IP)+disp8=跳转指令地址+2+disp8,转移范围:从当前IP位置开始,向前128(减80H)个字节,向后127(加7FH)个字节,例,JMP SHORT NEXT,向前到(1000H)-80H=0F80H 向后到(1000H)+7FH=107FH,NEXT所指地址范围,E8H 50H,指令机器码,8位位移量D8的范围在(-128 127)之间,否则出错,实际使用时,在汇编指令中出现的直接是目的地址的标号,对于编程者,关心的是这个标号所指位置是否
3、超出了本指令的跳转范围,2)、段内直接近转移,格式,JMP NEAR PTR 目的地址标号,IP)当前(IP)+disp16,注意,三字节指令,机器码: E8 KK JJ JJKK为disp16,带符号数补码,范围-32768+32767,目的地址的偏移地址 =当前(IP)+disp16=跳转指令地址+3+disp16,转移范围:从当前IP位置开始,向前32768 (减8000H)个字节,向后32767 (加7FFFH)个字节。 但不超出本段,3)、段内间接转移,格式,JMP WORD PTR OPR,IP) (EA) 或(IP) (reg16,OPR 为16位寄存器、存储器,例,JMP AX
4、 JMP WORD PTR BPDI,转移范围:当前段,4)、段间直接转移,格式,JMP FAR PTR 目的地址标号,IP)目的地址标号的偏移地址 (CS)目的地址标号的段地址,JMP FAR PTR NEXT NEXT : MOV AL,SI,例,转移范围:整个存储器1M空间,5)、段间间接转移,格式,JMP DWORD PTR OPR,IP)OPR低16位 (CS)OPR高16位,例,JMP DWORD PTR BPDI,转移范围:整个存储器1M空间,2、条件转移指令,两种,比较转移指令,判位转移指令,均采用相对短转移,即: (IP)当前(IP)+disp8,转移范围: 从当前(IP)所
5、指单元开始-128+127,1)、比较转移指令,根据前一条比较指令结果(对标志位的影响)作测试条件。决定是否转移,分为: 无符号数比较转移指令 带符号数比较转移指令,无符号数比较的结果作为转移条件(P134,两个带符号数比较的结果作为转移条件,例: 数据段RESULT开始的30个单元中存放着某班30个同学的某门课程的考试成绩。要求统计成绩在80分以上的学生人数,将其存放在BL中,MOV AL,80 LEA DI,RESULT MOV CX,30 MOV BL,0 AGN:JMP AL,DI JA NEXT INC BL,NEXT:INC DI DEC CX JNZ AGN HLT ;停机,2)
6、、判位转移指令,根据当前某标志位的状态来决定是否进行转移,3)、判CX转移指令,既是一条转移指令,也可用来控制循环,但循环控制条件与LOOP相反,2、循环控制指令,三种,LOOP,LOOPE/LOOPZ,LOOPNE/LOOPNZ,格式,LOOPxx符号地址,执行操作,CX) (CX)- 1 此操作不影响标志 检查转移条件xx,满足转向目标地址去执行; 不满足执行LOOPxx后一条指令,只允许段内直接短转移方式,跳转范围-128127,都用CX作为循环计数器,循环指令说明: LOOP退出循环条件是(CX)=0 LOOPZ和LOOPNZ提供了提前结束循环的可能,在串中查找字符,查到了,退出, 用
7、LOOPNZ,不相等时继续查找。 比较两串时,当有字符不等,退出,两字符串不等。 可用LOOPZ,当相等时继续比较。 执行完 LOOPNZ或LOOPZ后,判断ZF的值 对查找字符,ZF=1,说明找到;否则没有找到。 对串比较,ZF=1, 说明两串相等;否则不等,LOOP,相当于: DEC CX JNZ 目的地址标号,例:在数据段DATA开始的30个单元中存放着某班30位同学的某门考试成绩,求总分和平均成绩,结果分别保存在DX,AL中,MOV DX,0 LEA SI,DATA MOV CX,30 NEXT:ADD DL,BYTE PTR SI ADC DH,0 INC SI LOOP NEXT
8、MOV CL,30 MOV AX,DX DIV CL,例: 在string字符串中查找空格字符,串长度为N,MOV CX, N MOV AX, SEG string MOV DS, AX LEA BX, string MOV AL,20H next: CMP AL,BX JZ find INC BX DEC CX JNZ next 未找到处理 JMP exit find: 找到处理 exit: 结束出口,用条件转移: JZ,MOV CX, N MOV AX, SEG string MOV DS, AX LEA BX, string MOV AL,20H next: CMP AL, BX PUS
9、H F INC BX POPF LOOPNZ next JZ find 未找到处理 JMP exit find: 找到处理 exit: 结束出口,用循环指令: LOOPNZ,思考: 去掉指令JMP exit ,程序执行结果会怎样? PUSH F、POPF可否去掉?若要去掉,程序如何修改? 执行完LOOPNZ后,可否根据CX=0来判断查找结果? CX=0,即说明没找到,对吗,3、过程( 子程序 )调用指令,子程序具有独立功能的独立程序模块,子程序(过程)定义格式: 子程序名 PROC 类型 子程序名 ENDP,子程序调用和返回 调用: CALL 返回: RET,过程与调用语句间的位置,有两类:
10、NEAR类:调用指令与过程在同一个段中 FAR类:调用指令与过程不在同一个段中,子程序调用和返回 调用: CALL 返回: RET,1)、 CALL调用,CALL调用指令有4种: 段内直接调用段间直接调用 段内间接调用段间间接调用,CALL指令出现在主程序中,1)、 段内直接调用,格式,(SP)(SP)-2, (SP)+1,(SP)(IP) ; (IP) (IP)+D16,CALL 子程序名,第一步,断点入栈保护,第二步,装入子程序入口地址,D16 机器指令中的位移量,目的地址和当前(IP)地址之差,例: NEAR 类型过程 code SEGMENT ;code段 CALL subp ; D1
11、6 =subp- XXX XXX:YYY subp PROC NEAR ;过程定义 RET ;返回 subp ENDP code ENDS,2)、 段内间接调用,格式,(SP)(SP)-2, (SP)+1,(SP)(IP) ;(IP) OPR的值,CALL WORD PTR OPR,第一步,断点入栈保护,第二步,装入子程序入口地址(操作数的值,OPR 为16位寄存器,或存储器,例,CALL WORD PTR SI CALL BX,3)、 段间直接调用,格式,SP)(SP)-2 (SP)+1,(SP)(CS) (SP)(SP)-2 (SP)+1,(SP)(IP) (IP)入口偏移地址(指令第2,
12、3字节 ) (CS)DST段地址(指令中第4,5字节,CALL FAR PTR 子程序名,例 : CSEG1 SEGMENT CALL FAR PTR subp ;处的CS:IP入栈;转subp : CSEG1 ENDS CSEG2 SEGMENT subp PROC RET subp ENDP CSEG2 ENDS,4)、段间间接调用,格式,SP)(SP)-2 ((SP+1),(SP))(CS) (SP)(SP)-2 ((SP+1),(SP))(IP) (IP)(EA) (CS)(EA+2,CALL DWORD PTR OPR,例,CALL DWORD PTR SI,2)、 RET返回,RE
13、T返回指令有4种: 段内返回 段间返回 段内带立即数返回 段间带立即数返回,放在子程序的末尾 子程序执行完后返回调用程序继续执行,1)、段内返回,格式: RET; 机器码: C3H或者C2H 执行操作:(IP)(SP)+1,(SP) (SP)(SP)+2,2)、段间返回,格式: RET; 机器码: CBH或CAH 执行操作: (IP)(SP)+1,(SP) (SP)(SP)+2 (CS)(SP)+1,(SP) (SP)(SP)+2,段内带立即数返回 格式:RET EXP; 执行操作: (IP)(SP)+1,(SP) (SP)(SP)+2 (SP)(SP)+D16 EXP是一个表达式 计算出来的
14、常数成为机器指令中位移量D16,修改堆栈 指针,4、中断和中断返回指令,以后学习,2、 过程( 子程序 )调用指令 子程序程序中具有独立功能的部分编写成独立程序模块。 子程序(过程)定义格式: 符号名 PROC 类型 符号名 ENDP 子程序调用和返回指令: CALL RET(RETURN) 过程有两种类型: 按过程与调用语句间的位置,过程有两种类型。 NEAR类型:调用指令与过程在同一个段中 FAR类型:调用指令与过程不在同一个段中 CALL指令和RET指令都不影响条件码,分界,段内直接调用 格式:CALL DST;(SP)(SP)-2, (SP)+1,(SP)(IP) ; (IP) (IP
15、)+D16 DST给出转向地址(子程序的入口地址)。 D16机器指令中的位移量(转向地址和返回地址之差)。 位移量为D16范围-32768+32767H,占有两个字节,1)、 CALL( Call a procedure)调用 CALL调用指令调用地址由指令给出 CALL调用指令有4种: 段内直接调用段间直接调用 段内间接调用段间间接调用,段内直接调用 格式:CALL DST;(SP)(SP)-2, (SP)+1,(SP)(IP) ; (IP) (IP)+D16 DST给出转向地址(子程序的入口地址)。 D16机器指令中的位移量(转向地址和返回地址之差)。 位移量为D16范围-32768+32
16、767H,占有两个字节,工作过程如下: 例: NEAR 类型过程 code SEGMENT ;code段 CALL subp ;调用 指令 YYY入栈 ,D16 =subp-yyy XXX:YYY subp PROC NEAR ;过程定义 RET ;返回 subp ENDP code ENDS,例:两个数据变量X与Y相乘 子程序和调用程序在同一个程序模块中,子程序可以直接访问模块中的变量。 DATASG SEGMENT X DW 100 Y DW 10 DATASG ENDS CODESG SEGMENT MAIN PROC FAR ASSUME CS:CODESG, DS:DATA SG S
17、TART: CALL subp RET MAIN ENDP,subp PROC NEAR MOV AX,X MOV BX,Y MUL BX RET subp END CODESG ENDS END START,段内间接调用: 格式: CALL DST; WORD PTR OPR OPR 为16位寄存器, 或存储器(除立即数以外的任何一种寻址方式) 执行操作: (SP)(SP)-2 (SP)+1,(SP)(IP) (IP)(EA) EA由DST寻址方式所确定的有效地址,段间直接调用: 格式:CALL FAR PTR DST; 执行操作 : (SP)(SP)-2 (SP)+1,(SP)(CS) (
18、SP)(SP)-2 (SP)+1,(SP)(IP) (IP)DST偏移地址(指令中第2,3字节 ) (CS)DST段地址(指令中第4,5字节,例 : CSEG1 SEGMENT CALL FAR PTR subp;处的CS:IP入栈转subp : CSEG1 ENDS CSEG2 SEGMENT subp PROC RET subp ENDP CSEG2 ENDS,段间间接调用: 格式: CALL DWORD PTR DST 执行操作: (SP)(SP)-2 (SP)+1,(SP)(CS) (SP)(SP)-2 (SP)+1,(SP)(IP) (IP)(EA) (CS)(EA)+2 转子程序入
19、口 EA由DST的寻址方式确定的有效地址,2)、 RET( Reture from procedure)返回 RET返回指令 放在子程序的末尾 使子程序在功能完成后返回调用程序继续执行。 *为能准确返回 ,返回指令类型与调用指令类型相对应。 RET返回指令有4种: 段内返回段间返回 段内带立即数返回段间带立即数返回 在子程序调用时,返回地址入栈 返回时:将返回地址出栈 (IP)(段内或段间)。 (CS)(段间,段内返回: 格式: RET; 机器码: C3H或者C2H 执行操作:(IP)(SP)+1,(SP) (SP)(SP)+2 段间返回: 格式: RET; 机器码: CBH或CAH 执行操作: (IP)(SP)+1,(SP) (SP)(SP)+2 (CS)(SP)+1,(SP) (SP)(SP)+2,段内带立即数返回 格式:RET EXP; 执行操作: (IP)(SP)+1,(SP) (SP)(SP)+2 (SP)(SP)+D16 EXP
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 煤矿工程商业计划书
- 机械清除危岩体边坡治理方案
- 人力资源面试题库与评估表
- 建筑工程现场仓储周转方案
- 建筑防腐喷涂施工方案
- 建设工程施工现场临建设施标准化搭设施工方案
- 绩效考核管理标准化手册
- 太仓市2026年四年级数学第一学期期末联考模拟试题含解析
- 息烽县2026年三年级数学第一学期期末教学质量检测模拟试题含解析
- 2027届张家界市永定区数学三年级第一学期期末达标检测试题含解析
- 企业内部控制制度检查表模板
- 设备振动基础知识培训课件
- 2025年新版《医疗器械经营质量管理规范》培训试题(附答案)
- 化工厂巡检基础知识培训课件
- 四升五数学40天(暑假作业人教版)
- 2025年国投招聘笔试参考题库附带答案详解
- 烘焙营业员服务培训
- QGDW10384-2023输电线路钢管塔加工技术规程
- 2025至2030中国数字金融行业市场调研分析及竞争形势与投资发展报告
- 中考总复习《专题训练•夯实基础》英语专题01 20天搞定中考必背1600词
- T/CATS 009-2024研学旅游(中小学)课程设计指南
评论
0/150
提交评论