8、实验八

首先将程序编译连接,然后debug调试跟踪。

查看一下寄存器内容

发现IP的初始值为5,说明代码段前面还有其他内容(start前面的两条程序结束指令)。然后查看一下各个指令所占的内存空间

结合这个结果,对两个offset进行分析(不实际计算offset的值也不影响分析这个程序的结果)

其中 mov ax,cs:[si] 指令将 s2 标记处的第一条指令 jmp short s1 复制到 AX 中,并通过下一条指令 mov cs:[di],ax 将 AX 中内容即 s2 标记处的第一条指令 jmp short s1 复制到 s 标记处的前两个字节中,即覆盖了原有的两个 nop 指令。

可以暂时简单理解为程序代码发生了如下变化(实际有些区别,后面再说):

接下来逐步执行

两个占位指令 nop,起到占位作用。继续执行

从这里也能看到,两条 offset 指令以及随后的两条 mov 指令的目的是将后面 s2 标记处的指令复制到标记 s 处。继续执行。

可见执行完 jmp short s 后,下一条指令按照前面的分析来说,应该是执行 jmp short s1,可为什么程序显示的下一条指令为 jmp 0000,不是跳转到 s1 标记的地址处执行呢?

根据我们前面学习的知识,我们知道像 jmp short、jmp near ptr、jcxz、loop 等短转移指令,它们在执行时对 IP 的修改是根据转移目的地址和转移起始地址之间的位移来进行的。所以本程序中在 s2 标志处的 jmp 指令,它的作用就是把 IP 往回修改 8 个单位(-8,因为 s1 和 s2 之间的位移是 8)以便可以跳转到 s1 执行。所以将这条指令对应的机器码复制到 s 标记处时,执行时仍是将 IP 往回修改 8 个单位(-8),这样就会跳转到代码段最开始定义的两条程序结束语句,然后结束程序。

汇编语言实验八-《汇编语言-王爽老师》相关推荐

  1. 汇编语言实验八核心考点

    汇编语言实验八核心考点 建议先自己思考问题的答案,不懂则返回看书 分析程序,在运行前思考:这个程序是否能够正确返回? 运行之后再思考:为什么是这种结果? 解析: 核心考点, CPU在执行jmp指令的时 ...

  2. 读书笔记:汇编语言 第三版 王爽 清华出版社 前言 章一 章二 章三 章四 章五

    汇编语言 第三版 王爽 清华出版社文档记录创建 2020年8月9日15:21:11初稿完成 2020年9月5日15:38:22前言汇编语言,CPU提供的机器指令的助记符的集合不同处理器,机器指令可能不 ...

  3. 汇编语言 第3版 王爽 检测点习题部分—答案及详细解析

    第一章 基础知识 检测点1.1 (1)1个CPU的寻址能力为8KB,那么它的地址总线的宽度为()位. (2)1KB的存储器有() 个存储单元,存储单元的编号从()到() . (3)1KB的存储器可以存 ...

  4. 汇编语言 (第2版) 王爽 中文高清PDF版下载

    汇编语言 (第2版) 王爽 中文高清PDF版下载 转载于:https://www.cnblogs.com/gavinhughhu/archive/2009/12/10/1620783.html

  5. 王爽老师的汇编语言 实验8 jmp是如何实现跳转的

    jmp short 标号 jmp near ptr 标号 jcxz 标号 loop 标号 书中给出的几种汇编指令,它们对I的修改是根据转移目的地址和转移起始地址之间的位移来进行的. 在它们对应的机器码 ...

  6. 汇编语言学习:使用王爽写的《汇编语言》第三版(编程环境配置)

    汇编语言学习 参考书:使用王爽写的<汇编语言>第三版 学习工具(win7 x64): DOSBox 0.74.masm.exe.link.exe.debug.exe. 另外需要一款编辑器, ...

  7. <微机原理>[汇编语言]-[实验八]矩阵键盘应用实验

    实验八 矩阵键盘应用实验 实验八 矩阵键盘应用实验.doc 一.实验目的 掌握矩阵式键盘识别技术 进一步掌握数码管显示原理 二.实验主要仪器和环境 Keil5 普中A2开发板 stc-isp 三.实验 ...

  8. 汇编语言实验二 汇编语言程序设计(顺序、多分支、循环)

    **实验二 汇编语言程序设计(顺序.多分支.循环)** 一. 实验目的 1.掌握顺序和循环程序结构和设计方法: 2.熟悉在PC机上建立.汇编.连接.调试和运行8086/8088汇编语言程序的过程. 二 ...

  9. 汇编语言实验十-《汇编语言-王爽老师》

    10.实验十 1.显示字符串 主要需解决的问题:字符串在显存中的地址定位 代码及注释如下: ;LAB10-1.asm assume cs:code data segmentdb 'Welcome to ...

最新文章

  1. mysql pt table sync_pt-table-sync 使用介绍
  2. centos7下的FastDFS5.09的安装与使用
  3. 手机玩游戏大作难在哪?硬件性能要加码,高能效AI同样关键
  4. python 自动化-五大自动化测试的Python框架
  5. what is the thing you fear most?
  6. .NET Core 下使用 Exceptionless 记录日志
  7. 结对编程——paperOne基于java的四则运算 功能改进
  8. 转:PHP程序里的敏感信息处理方法
  9. java 存储变量_如何在Java 8中将方法存储在变量中?
  10. python千行代码项目_p2:千行代码入门python
  11. CAD教程:CAD自定义菜单和工具栏的操作技巧
  12. 【数学】GPS经纬度坐标转换
  13. Windows 系统debug级 进程调试工具 ntsd 详解
  14. 联想服务器rd640性能,至强E5芯动力 联想RD640服务器评测
  15. DeFi 2.0的LaaS协议Elephant,重振DeFi赛道发展的关键
  16. leetcode 812. Largest Triangle Area(python)
  17. 论文阅读八:SDN 交换机转发规则 TCAM 存储优化综述
  18. Maven 自问自答
  19. 计算机程序设计在日常生活中的应用,《走进程序设计》教学设计
  20. Jackknife,Bootstraping, bagging, boosting, AdaBoosting, Rand forest 和 gradient boosting的区别

热门文章

  1. 请编写一个关于星期几的枚举WeekDay,要求: 枚举值:Mon,Tue,Wed,Thu,Fri,Sat,Sun 该枚举要有一个方法,调用该方法返回中文格式的星期。
  2. node版本更新遇到的巨坑
  3. php 会员到期提醒_电脑上怎么在桌面加一个备忘记录提醒便签软件?
  4. 世界大学计算机学排名2019,2019 计算机 大学排行_2019世界大学排名 计算机专业...
  5. AndroidStudio 安装及配置
  6. MFC消息分类及处理方式
  7. 中欧MiniMBA-建设高效团队
  8. 加速清洁能源时代到来,芯讯通助力智能电网建设
  9. java float保留1位小数_float类型数保留一位小数
  10. 无人机无线传感器网络中的节能数据采集(Matlab代码实现)