版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第10章call和ret指令ret和retf指令call指令ret和call指令配合完成子程序调用mul乘法指令模块化程序设计一、返回指令ret和retf格式:ret
;实现近转移,相当于popip 格式:retf;实现远转移,相当于popip,popcsassumecs:codestack segmentdb16dup(0)stack endscode segmentmovax,4c00hint21hstart:movax,stack movss,ax movsp,16 movax,0 pushax movbx,0 retcode endsend startassumecs:codestack segmentdb16dup(0)stack endscode segmentmovax,4c00hint21hstart:movax,stack movss,ax movsp,16 movax,0 pushcs pushax movbx,0 retfcode endsend start一、返回指令ret和retf格式:ret
;实现近转移,相当于popip 格式:retf;实现远转移,相当于popip,popcs例10-1.补全程序,实现从内存1000:0处开始执行指令。assume cs:codestack segment db16dup(0)stack endscode segmentstart: movax,stack movss,ax movsp,16 movax,
pushax movax,
pushax retfcode endsend startret和retf指令执行时,将当前堆栈内容分别出栈给ip或ip和cs,以实现指令的近或远转移。二、call指令执行call指令的功能相当于:1、puship或pushcs、puship;2、修改当前ip或ip和cs指向目的地址。Call指令的主要格式:根据位移转移转移的目的地址在指令中转移地址在寄存器中转移地址在内存中
1、依据位移进行转移的call指令格式:
call标号功能:将当前IP压栈,IP=IP+16位的位移量,转移到标号处执行。例10-2下面的程序执行后,AX中的数值为多少?内存地址 机器码 汇编指令1000:0 B80000 MOVAX,01000:3 E80100 CALLS1000:6 40 INCAX1000:7 58 S:POPAX2、转移的目的地址在指令中的call指令格式:
callfarptr标号功能:
将当前CS、IP压栈,用标号所在地址修改CS和IP实现远转移。例10-3下面的程序执行后,AX中的数值为多少?内存地址 机器码 汇编指令1000:0 B80000 MOVAX,01000:3 9A09000010 CALLFARPTRS1000:8 40 INCAX1000:9 58 S:POPAX ADDAX,AX POPBX ADDAX,BX3、转移地址在寄存器中的call指令格式:
callreg(16位的寄存器)功能:
将当前IP压栈,用寄存器中的值修改IP实现近转移。例10-4下面的程序执行后,AX中的数值为多少?内存地址 机器码 汇编指令1000:0 B80600 MOVAX,61000:2 FFD0 CALLAX1000:5 40 INCAX1000:6 MOVBP,SP ADDAX,[BP]4、转移地址在内存中的call指令格式:
callword(dword)ptr[内存单元]功能:
将当前IP或IP、CS压栈,用内存单元中的字或双字修改IP或IP和CS。movsp,10hmovax,0123hmovds:[0],axmovwordptrds:[2],0calldwordptrds:[0]执行后IP=?CS=?例10-5下面的程序执行后,AX中的数值为多少?Assume cs:codeStack segment dw8dup(0)Stack endsCode segmentStart:movax,stack movss,ax movsp,16 movds,ax movax,0 callwordptrds:[0eh] incax incax incaxCode endsEnd startss(ds):000:000100:000200:000300:000400:000500:000600:000700:000800:000900:000A00:000B00:000C00:000D00:000E00:000F00:0010spspIP4、转移地址在内存中的call指令格式:
callword(dword)ptr[内存单元]功能:
将当前IP或IP、CS压栈,用内存单元中的字或双字修改IP或IP和CS。例10-5下面的程序执行后,ax和bx中的数值为多少?assume cs:codestack segment dw8dup(0)stack endscode segmentstart:movax,data movss,ax movsp,16 movwordptrss:[0],offsets movss:[2],cs calldwordptrss:[0] nops: movax,offsets subax,ss:[0ch] movbx,cs subbx,ss:[0eh]code endsend startss:000:000100:000200:000300:000400:000500:000600:000700:000800:000900:000A00:000B00:000C00:000D00:000E00:000F00:0010spsp1900CSCSsp1800AX=0001hBX=0000h二、call指令执行call指令的功能相当于:1、puship或pushcs、puship;2、修改当前ip或ip和cs指向目的地址。Call指令的主要格式:根据位移转移转移的目的地址在指令中转移地址在寄存器中转移地址在内存中Call标号
Callfarptr标号
Callreg(16位)Callword(dword)ptr[内存]jmp标号jmpfarptr标号jmpregjmpword(dword)ptr[内存]三、call和ret配合使用(实现子程序调用)问题10-1下面程序返回前,BX中的值为多少?assumecs:codecode segmentstart:movax,1 movcx,3 calls movbx,ax movax,4c00h int21hs: addax,ax loops
retcode endsend start
源程序 内存中的情况(设程序从1000:0处装入)Assumecs:code Stacksegmentdb8dup(0) 1000:0000 0000000000000000db8dup(0) 1000:0008 0000000000000000Stack ends Code segmentStart: movax,stack 1001:0000 B80010 movss,ax 1001:0003 8ED0 movsp,16 1001:0005 BC1000 movax,1000 1001:0008 B8E803 calls 1001:000B E80500 movax,4c00h 1001:000E B8004C int21h 1001:0011 CD21S: addax,ax 1001:0013 03C0 ret 1001:0015 C3Code endsEnd start使用call和ret实现子程序:子程序的格式框架:具有子程序的源程序的框架:标号: 指令
retassumecs:codecode segmentstart:
calls1 movax,4c00h int21hs1:
calls2
rets2:
retCode endsEnd start四、乘法指令mul格式:mulreg mul[内存单元]功能:字节(8位)或字(16位)的无符号相乘。说明:两个相乘的数位数相同,8位乘法(乘数和被乘数都为8位数);16位乘法(乘数和被乘数都为16位。)8位乘法中,一个乘数默认在AL中,另一个由指令给出,16位的结果默认保存在AX中。16位乘法中,一个乘数默认在AX中,另一个由指令给出,32位的结果中高位保存在DX中,低位在AX中。例:计算100×10Moval,100Movbl,10Mulbl例:计算100×10000Movax,100Movbx,10000Mulbx五、模块化程序设计
用call和ret指令可实现汇编语言中的模块化设计,可使用call指令在主程序中调用子程序来解决子问题,子问题解决后用ret指令来返回主程序。一、子程序中的参数和结果例:计算N的3次方的子程序;说明:计算N的3次方;参数:(BX)=N;结果:(DX:AX)=N3Cube:movax,bx mulbx mulbx ret注:在编写程序时,应对程序有必要的注释内容。子程序的注释中应包含子程序的功能、参数和结果的说明。编程:计算data段中第一组数据的3次方,结果保存到后面的一组dword单元中。Assume cs:codeData segment dw1,2,3,4,5,6,7,8 dd0,0,0,0,0,0,0,0Data endsCode segment start: movax,data movds,ax movsi,0 movdi,16 mo
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年急性胰腺炎护理:全面解析与护理要点课件
- 运动科技:创新之路-智能产品的设计、市场及推广
- 基于学科核心素养的高中化学主题式教学模式研究
- 职场守秘义务承诺函(5篇)
- 培训部门新员工入职培训操作指南
- 材料样品规格确认函3篇范文
- 智慧建筑能耗管理系统优化手册
- 精细化医疗服务品质承诺函3篇
- 能源利用优化升级承诺书6篇
- 信息安全加强系统防护指南
- 抵制宗教向校园渗透课件
- 学术道德与学术规范的关系
- 土石坝施工-碾压土石坝施工(水利工程施工课件)
- DL/T 5457-2012 变电站建筑结构设计技术规程
- 2023储能电站系统全面解析
- 学而思教育薪酬绩效管理制度
- 大学英语四级翻译课件
- 2022年丽江文化旅游学院教师招聘考试笔试试题及答案
- 2022年锦州市三支一扶考试真题
- 山西省交口县地方国营硫铁矿资源开发利用方案和矿山环境保护与土地复垦方案
- Unit+1+Reading+The+ocean+deep课件【高效备课精研+知识精讲提升】 高中英语牛津译林版(2020)选修第一册+
评论
0/150
提交评论