汇编语言(第3版,王爽著):实验8 分析一个奇怪的程序
1. 分析下面的程序,在运行前思考:这个程序可以正确返回吗?
在程序运行前,我个人的思考结果是不会返回,好像进入了死循环(说明我在看第九章的时候不仔细(─.─||))
2. 运行后再思考:为什么是这种结果?
先说结论:运行后,程序可以正确返回
3. 代码讲解:
mov di, offset s
mov si, offset s2
mov ax, cs:[si]
mov cs:[di], ax
- 以上代码的作用就是将 “标号s2” 处的数据(即机器指令) 复制到 “标号s” 处
- 从下图可以看出,“标号s2” 处的机器指令为 EBF6,因此当上面的那几句代码执行完后,“标号s” 处的机器指令为 EBF6
- 因为“标号s2”处的汇编指令为 jmp short s,所以这是一个 “依据位移进行转移的 jmp 指令”,所对应的机器码中包含的是转移的位移,并不是转移的目的地址
- 不要因为“标号s2”处的汇编指令为 jmp short s,就想当然的认为将 jmp short s 复制到了 “标号s” 处,这种想法是错误的
- 可以看到下图是在调试的时候用 debug 去调试的,展示“机器指令”和“汇编指令”是用 U 命令去转换的,本质上计算机只能存储二进制数据,所以操作的也是二进制数据,即 CPU 操作的是二进制数据 EBF6
- CPU 在执行 EBF6 的时候,根据什么修改的 IP寄存器?使其指向目标指令呢?就是根据指令中的 F6 (提示:F6 是补码),即 CPU 执行 EBF6 时,当前的 (IP) 加上 F6,就得出了新的 (IP),也就完成了新的指向
- 6.1) 标号s2 处汇编指令的讲解
- 6.2) 标号s 处汇编指令的讲解
- 6.3) 如果对于代码还有疑问,请看 《汇编语言 (第3版)》王爽著,第 179 页,关于 CPU 执行机器指令时,是如何修改 IP 寄存器的。
分类:
汇编语言
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本