• call指令:调用子程序
call 标号
  1. 将当前IP或CS和IP压栈
  2. 转移到标号处执行指令
push ip; (sp) = (sp) - 2 ((ss)*16+(sp)) = (ip)
jmp near ptr 标号;(IP)=(IP)+16位位移
  1. 标号处地址 = CALL指令后的第一个字节的地址 + 16位位移
  2. 16位位移范围-32768~32767,用补码表示
  3. 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相关推荐

  1. 贺利坚老师汇编课程40笔记:指令里的数据在哪里有多长

    指路老师的博客 汇编中数据位置的表达 立即数 寄存器 内存:段地址SA+偏移地址EA 指令处理数据长度 字操作WORD16位 字节操作BYTE8位 用word ptr或byte ptr指明 示例 操作 ...

  2. 贺利坚老师汇编课程28笔记:使用附加段寄存器ES进行拷贝

    指路老师的博客链接 将内存FFFF:0 ~ FFFF:B中的数据拷贝到0:200~0:20b单元中 段地址每循环一次变一次的初始方案 ;初始方案 ASSUME CS:CODE CODE SEGMENT ...

  3. 贺利坚老师汇编课程73笔记:键盘输入的处理过程

    指路老师的博客 键盘的每一个键相当于一个开关,键盘中有一个芯片对键盘的每一个键的开关状态进行扫描 按下一个键的操作 开关接通,该芯片就产生了一个扫描码,扫描码说明按下的键在键盘的位置 扫描码被送入主板 ...

  4. 贺利坚老师汇编课程70笔记:端口的读写

    指路老师的博客 端口对应外部设备 发声程序 assume cs:codecode segment start:mov al,08h;设置声音频率out 42h,alout 42h,alin al,61 ...

  5. 贺利坚老师汇编课程66笔记:自定义除法中断学习如何编制中断程序

    指路老师的博客 CPU随时可能检测中断信息,所以中断程序常驻内存(一直存储在内存的某段空间中) 中断处理程序的入口地址,即中断向量,必须存储在中断向量表的表项中 (0000:0000 - 0000:0 ...

  6. 贺利坚老师汇编课程61笔记:操作显存数据即在屏幕上显示

    指路老师的博客 屏幕上内容 = 显存数据 B8000H~BFFFFH共32K空间时80 * 25(25行80列)彩色字符模式,第0页的显示缓冲区 编程序在屏幕的中间,白底蓝字,显示"Welc ...

  7. 贺利坚老师汇编课程60笔记:逻辑移位指令shl和shr

    指路老师的博客 逻辑左移 SHL OPR,CNT 将OPR逻辑左移CNT位 将寄存器或内存单元中的数据向左移位 将最后移出的一位写入CF 最低位用0补充 移动位数大于1时必须用CL MOV AL,01 ...

  8. 贺利坚老师汇编课程57笔记:CMP和JXXX配合实现条件转移指令if

    指路老师的博客 实现分支程序设计 套路 CMP OPER1,OPER2;或者其他影响标志寄存器的指令 JXXX 标号 恐惧 JXXX系列指令和CMP指令配合,构造条件转移指令 不必考虑CMP指令对相关 ...

  9. 贺利坚老师汇编课程56笔记:CMP指令

    指路老师的博客 CMP 操作对象1,操作对象2;计算操作对象1-操作对象2 CMP是比较指令,功能相当于减法指令,只是不保存结果 CMP指令执行后,将对标志寄存器产生影响 其他指令通过识别这些被影响的 ...

最新文章

  1. IT规划的企业应用实践(6)研究背景 之 企业信息化建设的诉求
  2. MVC - 17.OA项目
  3. iOS编程陷井2,模拟器不可靠
  4. 腾讯获准在中国销售Switch游戏机 任天堂股价应声飙升逾14%
  5. 一位做了5年Java开发的读者,跟我说面试题都不会答···
  6. python是什么内容
  7. Python生成器 yield
  8. HBase超级详细总结
  9. 《流畅的Python》读书笔记——Python使用一等函数实现设计模式
  10. 父类构造函数与子类构造函数的关系
  11. MongoDB学习(黑马教程)-2-数据库MongoDB的导入文档和查询文档的操作
  12. MATLAB函数或变量无法识别
  13. Docker安装详细安装步骤
  14. MS-DOS系统下的autoexec.bat
  15. 什么是WIN-PE?
  16. 在线思维导图怎么用?MindNow给你分享
  17. 「雕爷学编程」Arduino动手做(17)---人体感应模块
  18. 值得收藏!EEG/ MEG/MRI/ fNIRS公开数据库大盘点
  19. AD 原理图层次化画图
  20. 生命起源过程“消失环节”现形

热门文章

  1. java 从一个容器获取对象,Java 如何实现从spring容器中获取注入的bean对象
  2. useCallback()和useMemo()的作用
  3. 【二分法】计蒜客:二分答案
  4. Pixelmetrix :OTT Media Grinder (OTT TV 质量评价设备)
  5. hbase 导入到es_HBase数据同步到ElasticSearch的方案
  6. python无法使用物理网卡_Python 实现监控所有物理网卡状态
  7. 矩阵方程求解最快c语言算法,求助! C语言用矩阵求解方程组
  8. android mk subst功能,Android.mk(零)
  9. git版本回退(回退提交到本地仓库代码)
  10. PL/SQL生成表的数据结构关系图