- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
王爽《汇编语言》 第10章 call和ret指令
第10章 call和ret指令 * ret和 retf 指令 call指令 ret和call指令配合完成子程序调用 mul乘法指令 模块化程序设计 一、返回指令ret和retf 格式:ret ;实现近转移,相当于pop ip 格式:retf; 实现远转移,相当于pop ip ,pop cs assume cs:code stack segment db 16 dup(0) stack ends code segment mov ax,4c00h int 21h start: mov ax,stack mov ss,ax mov sp,16 mov ax,0 push ax mov bx,0 ret code ends end start assume cs:code stack segment db 16 dup(0) stack ends code segment mov ax,4c00h int 21h start: mov ax,stack mov ss,ax mov sp,16 mov ax,0 push cs push ax mov bx,0 retf code ends end start 一、返回指令ret和retf 格式:ret ;实现近转移,相当于pop ip 格式:retf; 实现远转移,相当于pop ip ,pop cs 例10-1.补全程序,实现从内存1000:0处开始执行指令。 assume cs:code stack segment db 16 dup(0) stack ends code segment start: mov ax,stack mov ss,ax mov sp,16 mov ax, push ax mov ax, push ax retf code ends end start ret和retf指令执行时,将当前堆栈内容分别出栈给 ip 或 ip和cs,以实现指令的近或远转移。 二、call指令 执行call指令的功能相当于: 1、push ip或push cs、push ip; 2、修改当前ip或ip和cs指向目的地址。 Call指令的主要格式: 根据位移转移 转移的目的地址在指令中 转移地址在寄存器中 转移地址在内存中 1、依据位移进行转移的call指令 格式: call 标号 功能:将当前IP压栈,IP=IP+16位的位移量,转移到标号处执行。 例10-2 下面的程序执行后,AX中的数值为多少? 内存地址 机 器 码 汇编指令 1000:0 B8 00 00 MOV AX,0 1000:3 E8 01 00 CALL S 1000:6 40 INC AX 1000:7 58 S:POP AX 2、转移的目的地址在指令中的call指令 格式: call far ptr 标号 功能: 将当前CS、IP压栈,用标号所在地址修改CS和IP实现远转移。 例10-3 下面的程序执行后,AX中的数值为多少? 内存地址 机 器 码 汇编指令 1000:0 B8 00 00 MOV AX,0 1000:3 9A 09 00 00 10 CALL FAR PTR S 1000:8 40 INC AX 1000:9 58 S:POP AX ADD AX,AX POP BX ADD AX,BX 3、转移地址在寄存器中的call指令 格式: call reg(16位的寄存器) 功能: 将当前IP压栈,用寄存器中的值修改IP实现近转移。 例10-4 下面的程序执行后,AX中的数值为多少? 内存地址 机 器 码 汇编指令 1000:0 B8 06 00 MOV AX,6 1000:2 FF D0 CALL AX 1000:5 40 INC AX 1000:6 MOV BP,SP ADD AX,[BP] 4、转移地址在内存中的call指令 格式: call word (dword) ptr [内存单元] 功能: 将当前IP或IP、CS压栈,用内存单元中的字或双字修改IP或IP和CS。 mov sp , 10h mov ax , 0123h mov ds:[0] , ax mo
文档评论(0)