8086汇编 call 指令
8086汇编 call 指令
字面意思:调用子程序
实质:流程转移指令,它们都修改IP,或同时修改CS和IP
call指令实现转移的方法和 jmp 指令的原理相似
格式:call 标号
返回指令:ret、retf
call 指令说明
CPU执行call指令,进行两步操作:
(1)将当前的 IP 或 CS和IP 压入栈中;
(2)转移到标号处执行指令。
call 标号:
- 16位位移=“标号”处的地址-call指令后的第一个字节的地址;
- 16位位移的范围为 -32768~32767,用补码表示;
- 16位位移由编译程序在编译时算出。
CPU执行“call far ptr 标号”时的操作:
(1) (sp) = (sp) – 2
((ss) ×16+(sp)) = (CS)
(sp) = (sp) – 2
((ss) ×16+(sp)) = (IP)
(2) (CS) = 标号所在的段地址
(IP) = 标号所在的偏移地址
CPU执行“call near ptr 标号”时的操作:
“call 标号”类似”jmp near ptr 标号”,对应的机器指令中为相对于当前IP的转移位移,而不是转移的目的地址,实现段内转移。指令“call far ptr 标号”实现的是段间转移!
ret、retf
使用案例
1、案例模板
说明:在程序走到call s时会直接跳转到 s: add ax, 1 这里列处理返回值ret以上指令当遇到ret后会返回到 mov ax, 4c00h 行接着往下执行。
mov ax, 0 ; 使用主程序 s call s mov ax, 4c00h int 21h ; 创建主程序s s: add ax, 1 ; 返回 ret
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?