贺利坚老师汇编课程49笔记:call和ret
- call指令:调用子程序
call 标号
- 将当前IP或CS和IP压栈
- 转移到标号处执行指令
push ip; (sp) = (sp) - 2 ((ss)*16+(sp)) = (ip)
jmp near ptr 标号;(IP)=(IP)+16位位移
- 标号处地址 = CALL指令后的第一个字节的地址 + 16位位移
- 16位位移范围-32768~32767,用补码表示
- 16位位移由编译程序在编译时算出
- ret 指令:返回
- 用栈中的数据,修改IP的内容,从而实现近转移
pop ip
- retf指令
- 用栈中的数据,修改CS和IP的内容,从而实现远转移
push cs
push ip
retf
;pop ip
;pop cs
- 段间转移CALL FAR PTR 标号
;CALL FAR PTR 标号
push CS
push IP
jmp far ptr 标号
- 先把CS压栈再把IP压栈
(SP) = (SP) - 2
((SS) * 16 + (SP)) = (CS);(CS) = 标号所在的段地址
(SP) = (SP) - 2
((SS) * 16 + (SP)) = (IP);(IP) = 标号所在的偏移地址
- 转移地址在寄存器的call指令
;call 16位寄存器
mov ax,0
call ax
- 功能
push IP;(sp) = (sp) - 2 ((ss)*16+(sp)) = (ip)
jmp 16位寄存器;(IP) = 16位寄存器
- 转移地址在内存单元中call指令
;call word ptr 内存单元地址
push ip
jmp word ptr 内存单元地址
;call dword ptr 内存单元地址
push CS
PUSH IP
jmp Dword ptr 内存单元地址
assume cs:codesg
codesg segment
start: mov sp,10hmov ax,0123hmov ds:[0],ax;低地址放偏移地址MOV WORD PTR DS:[2],0;高地址放段地址call Dword ptr ds:[0]mov ax,4c00Hint 21H
codesg ends
end start
贺利坚老师汇编课程49笔记:call和ret相关推荐
- 贺利坚老师汇编课程40笔记:指令里的数据在哪里有多长
指路老师的博客 汇编中数据位置的表达 立即数 寄存器 内存:段地址SA+偏移地址EA 指令处理数据长度 字操作WORD16位 字节操作BYTE8位 用word ptr或byte ptr指明 示例 操作 ...
- 贺利坚老师汇编课程28笔记:使用附加段寄存器ES进行拷贝
指路老师的博客链接 将内存FFFF:0 ~ FFFF:B中的数据拷贝到0:200~0:20b单元中 段地址每循环一次变一次的初始方案 ;初始方案 ASSUME CS:CODE CODE SEGMENT ...
- 贺利坚老师汇编课程73笔记:键盘输入的处理过程
指路老师的博客 键盘的每一个键相当于一个开关,键盘中有一个芯片对键盘的每一个键的开关状态进行扫描 按下一个键的操作 开关接通,该芯片就产生了一个扫描码,扫描码说明按下的键在键盘的位置 扫描码被送入主板 ...
- 贺利坚老师汇编课程70笔记:端口的读写
指路老师的博客 端口对应外部设备 发声程序 assume cs:codecode segment start:mov al,08h;设置声音频率out 42h,alout 42h,alin al,61 ...
- 贺利坚老师汇编课程66笔记:自定义除法中断学习如何编制中断程序
指路老师的博客 CPU随时可能检测中断信息,所以中断程序常驻内存(一直存储在内存的某段空间中) 中断处理程序的入口地址,即中断向量,必须存储在中断向量表的表项中 (0000:0000 - 0000:0 ...
- 贺利坚老师汇编课程61笔记:操作显存数据即在屏幕上显示
指路老师的博客 屏幕上内容 = 显存数据 B8000H~BFFFFH共32K空间时80 * 25(25行80列)彩色字符模式,第0页的显示缓冲区 编程序在屏幕的中间,白底蓝字,显示"Welc ...
- 贺利坚老师汇编课程60笔记:逻辑移位指令shl和shr
指路老师的博客 逻辑左移 SHL OPR,CNT 将OPR逻辑左移CNT位 将寄存器或内存单元中的数据向左移位 将最后移出的一位写入CF 最低位用0补充 移动位数大于1时必须用CL MOV AL,01 ...
- 贺利坚老师汇编课程57笔记:CMP和JXXX配合实现条件转移指令if
指路老师的博客 实现分支程序设计 套路 CMP OPER1,OPER2;或者其他影响标志寄存器的指令 JXXX 标号 恐惧 JXXX系列指令和CMP指令配合,构造条件转移指令 不必考虑CMP指令对相关 ...
- 贺利坚老师汇编课程56笔记:CMP指令
指路老师的博客 CMP 操作对象1,操作对象2;计算操作对象1-操作对象2 CMP是比较指令,功能相当于减法指令,只是不保存结果 CMP指令执行后,将对标志寄存器产生影响 其他指令通过识别这些被影响的 ...
最新文章
- IT规划的企业应用实践(6)研究背景 之 企业信息化建设的诉求
- MVC - 17.OA项目
- iOS编程陷井2,模拟器不可靠
- 腾讯获准在中国销售Switch游戏机 任天堂股价应声飙升逾14%
- 一位做了5年Java开发的读者,跟我说面试题都不会答···
- python是什么内容
- Python生成器 yield
- HBase超级详细总结
- 《流畅的Python》读书笔记——Python使用一等函数实现设计模式
- 父类构造函数与子类构造函数的关系
- MongoDB学习(黑马教程)-2-数据库MongoDB的导入文档和查询文档的操作
- MATLAB函数或变量无法识别
- Docker安装详细安装步骤
- MS-DOS系统下的autoexec.bat
- 什么是WIN-PE?
- 在线思维导图怎么用?MindNow给你分享
- 「雕爷学编程」Arduino动手做(17)---人体感应模块
- 值得收藏!EEG/ MEG/MRI/ fNIRS公开数据库大盘点
- AD 原理图层次化画图
- 生命起源过程“消失环节”现形
热门文章
- java 从一个容器获取对象,Java 如何实现从spring容器中获取注入的bean对象
- useCallback()和useMemo()的作用
- 【二分法】计蒜客:二分答案
- Pixelmetrix :OTT Media Grinder (OTT TV 质量评价设备)
- hbase 导入到es_HBase数据同步到ElasticSearch的方案
- python无法使用物理网卡_Python 实现监控所有物理网卡状态
- 矩阵方程求解最快c语言算法,求助! C语言用矩阵求解方程组
- android mk subst功能,Android.mk(零)
- git版本回退(回退提交到本地仓库代码)
- PL/SQL生成表的数据结构关系图