断断续续地汇编语言学到一半了,这次做课后作业可把我难坏了,赶紧记录一下。

检测点9.1

(1)程序如下。
assume cs:code
data segment?
data endscode segmentstart: mov ax, datamov ds,axmov bx,0jmp word ptr [bx+1]
code ends
end start

若要使程序中的jmp指令执行后,CS:IP指向程序的第一条指令,在data段中应该定义哪些数据?

思路:

首先把jmp word ptr的功能定义读了好几遍:从内存单元地址处开始存放着一个字,是转移的目的偏移地址。

也就是说[bx+1]指明的内存地址存放着目的偏移地址的

[bx]表示段地址存放在ds,偏移地址存放在bx中的内存单元,在本题中就是ax:0001H,也就是data段中偏移地址为1的内存单元。

CS不变,所以我们要填入的数据应使data段中偏移地址为1的内存单元(字)存放的内容为0,这样才能跳转到code的第一条语句,所以答案应该是db 2 dup(0)

(2)程序如下
assume cs:codedata segmentdd 12345678h
data endscode segmentstart: mov ax,datamov ds,axmov bx,0mov [bx],__mov [bx+2],__jmp sword ptr ds:[0]
code ends
end start

补全程序,使jmp指令执行后,CS:IP指向程序的第一条指令

思路:

这两道题思路差不多,就是实现细节上有点区别。

data段中定义了双字型数据,占内存中的2个字,4个字节。jmp sword ptr的功能是从内存单元地址处开始存放着两个字,高地址处的字是转移的目的段地址,低地址处事转移的目的偏移地址。

这段代码中,[bx]指明的内存内存地址应该是偏移地址(0),[bx+2]是段地址(cs)。我们的目的是使data段中定义的内容是cs:0

明确了这个思路之后还是踩了两个小坑,一开始直接填了0,报错了,这是因为数据不能直接放入内存单元,应该通过寄存器传送;这也就是上一行mov bx,0的作用,填入mov[bx],bx正好实现把0传送到ds:0。这是偏移地址。

第二处补上mov[bx+2],cs就可以了。

【汇编语言】习题-转移地址在内存中的jmp指令相关推荐

  1. 转移地址在内存中的jmp指令 检测点9.1

    转移地址在内存中的jmp指令有两种格式: (1)jmp word ptr 内存单元地址(段内转移) 功能:从内存单元地址处开始存放着一个字,是转移的目的偏移地址. mov ax,0123h mov d ...

  2. 转移的目的地址在指令中的jmp指令 转移地址在寄存器中的jmp指令

    机器码中并没有包含转移的目的地址,只是给了一个位移的范围,通过位移的方式,实现对ip寄存器的修改. 转移的目的地址在机器码中的jmp指令 jmp far ptr s 转移的目的地址在寄存器中的jmp指 ...

  3. C# 操作地址 从内存中读取写入数据(初级)

    本示例以植物大战僵尸为例, 实现功能为 每1秒让阳光刷新为 9999.本示例使用的游戏版本为 [植物大战僵尸2010年度版], 使用的辅助查看内存地址的工具是  CE. 由于每次启动游戏, 游戏中阳光 ...

  4. 汇编:转移目的地址在内存中

    assume cs:code, ds:data, ss:stack; 设置数据段 data segmentdb 128 dup (0) data ends; 设置栈段 stack segment st ...

  5. 王爽老师汇编语言第四版第十章CALL和RET指令——小白笔记

    目录 10.1 ret和retf (1)  ret: (2)retf: 10.2 call指令 10.3依据位移进行转移的CALL指令 10.4 转移的目的地址在指令中的CALL指令 10.5转移地址 ...

  6. 汇编语言_CS、IP和JMP指令

    看王爽的汇编语言,也听了相关的汇编课程,预计一个月学习完毕.这篇博客主要记录CS,IP和JMP的一个应用. 命令解释 **CS:**代码段寄存器 **IP:**指令指针寄存器 **JMP:**跳转指令 ...

  7. 贺利坚老师汇编课程47笔记:转移地址在寄存器或内存里

    转移地址在寄存器 JMP 16位寄存器;IP = (16位寄存器) 转移到的地址没有体现在机器码里,灵活在 跳到哪有变量定 转移地址在内存 jmp word ptr;段内转移 jmp dword pt ...

  8. Android For JNI(二)——C语言中的数据类型,输出,输入函数以及操作内存地址,内存修改器

    Android For JNI(二)--C语言中的数据类型,输出,输入函数以及操作内存地址,内存修改器 当我们把Hello World写完之后,我们就可以迈入C的大门了,今天就来讲讲基本的一些数据类型 ...

  9. 从内存中加载并启动一个exe

    从内存中加载并启动一个exe 文章作者:Idle_ (阿呆) 信息来源:[url]http://cnxhacker.net/article/show/2821.html[/url] windows似乎 ...

最新文章

  1. 免费教材丨第47期:业界大牛中文教学视频《深度学习:进阶》第21-24讲
  2. angular五大服务顺序_建议收藏 | 一篇文章告诉你工种的进场顺序
  3. 中国石油大学计算机专业论文,中国石油大学(计算科学与技术专业)毕业论文规范.doc...
  4. [Python学习笔记]h5py入门讲解
  5. Objective-C语法之static关键字的那些事儿(六)
  6. git如何merge github forked repository里的代码更新?
  7. javascript 解密_Javascript中的AES加密和Java中的解密
  8. Flutter State生命周期 Flutter Widget生命周期 Flutter 应用程序生命周期
  9. 自定义View的学习(一)
  10. Windows和Linux 服务器的访问方式
  11. PS自学教程是Ads设计必备 盘点精彩对比式Ads
  12. error: [debug/qrc_resource.cpp] Error 1
  13. 2022年湖南省中医执业医师考试第三单元医学针灸学模拟题
  14. 【Unity面试】 2022年Unity面试题分享 | 全面总结 | 建议收藏
  15. 深度学习实战8-生活照片转化漫画照片应用
  16. linux7切换图形界面,CentOS 7 DOS界面与图形界面切换
  17. 快速获取excel工作簿中所有工作表的名称
  18. 解决微软Edge浏览器和IE浏览器下载无反应的问题
  19. 锚定情境法(二):如何合理选择情境题?
  20. root精灵2020,ROOT精灵手机版

热门文章

  1. 【linux-centos7重新分配分区】
  2. 【原创】EXCEL公式经验(2)--关于count(),countif(),counta(),countifs()相关多个函数总结
  3. Java实现 蓝桥杯VIP 算法提高 洗牌
  4. u盘怎么制作linux系统盘,如何制作LinuxU盘安装盘
  5. Calico集成kubernetes的CNI网络部署全过程、启用CA自签名
  6. X264算法参数五(码控参数)
  7. http://blog.csdn.net/rambo2188/article/details/6998349
  8. supermap使用idesktop发布二三维管线地图
  9. nchar , char , nvarchar , varchar 的区别
  10. DASH 流媒体协议(Dynamic Adaptive Streaming over HTTP)概述——起源、MPD文件解析、相关项目