【汇编语言】习题-转移地址在内存中的jmp指令
断断续续地汇编语言学到一半了,这次做课后作业可把我难坏了,赶紧记录一下。
检测点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指令相关推荐
- 转移地址在内存中的jmp指令 检测点9.1
转移地址在内存中的jmp指令有两种格式: (1)jmp word ptr 内存单元地址(段内转移) 功能:从内存单元地址处开始存放着一个字,是转移的目的偏移地址. mov ax,0123h mov d ...
- 转移的目的地址在指令中的jmp指令 转移地址在寄存器中的jmp指令
机器码中并没有包含转移的目的地址,只是给了一个位移的范围,通过位移的方式,实现对ip寄存器的修改. 转移的目的地址在机器码中的jmp指令 jmp far ptr s 转移的目的地址在寄存器中的jmp指 ...
- C# 操作地址 从内存中读取写入数据(初级)
本示例以植物大战僵尸为例, 实现功能为 每1秒让阳光刷新为 9999.本示例使用的游戏版本为 [植物大战僵尸2010年度版], 使用的辅助查看内存地址的工具是 CE. 由于每次启动游戏, 游戏中阳光 ...
- 汇编:转移目的地址在内存中
assume cs:code, ds:data, ss:stack; 设置数据段 data segmentdb 128 dup (0) data ends; 设置栈段 stack segment st ...
- 王爽老师汇编语言第四版第十章CALL和RET指令——小白笔记
目录 10.1 ret和retf (1) ret: (2)retf: 10.2 call指令 10.3依据位移进行转移的CALL指令 10.4 转移的目的地址在指令中的CALL指令 10.5转移地址 ...
- 汇编语言_CS、IP和JMP指令
看王爽的汇编语言,也听了相关的汇编课程,预计一个月学习完毕.这篇博客主要记录CS,IP和JMP的一个应用. 命令解释 **CS:**代码段寄存器 **IP:**指令指针寄存器 **JMP:**跳转指令 ...
- 贺利坚老师汇编课程47笔记:转移地址在寄存器或内存里
转移地址在寄存器 JMP 16位寄存器;IP = (16位寄存器) 转移到的地址没有体现在机器码里,灵活在 跳到哪有变量定 转移地址在内存 jmp word ptr;段内转移 jmp dword pt ...
- Android For JNI(二)——C语言中的数据类型,输出,输入函数以及操作内存地址,内存修改器
Android For JNI(二)--C语言中的数据类型,输出,输入函数以及操作内存地址,内存修改器 当我们把Hello World写完之后,我们就可以迈入C的大门了,今天就来讲讲基本的一些数据类型 ...
- 从内存中加载并启动一个exe
从内存中加载并启动一个exe 文章作者:Idle_ (阿呆) 信息来源:[url]http://cnxhacker.net/article/show/2821.html[/url] windows似乎 ...
最新文章
- 免费教材丨第47期:业界大牛中文教学视频《深度学习:进阶》第21-24讲
- angular五大服务顺序_建议收藏 | 一篇文章告诉你工种的进场顺序
- 中国石油大学计算机专业论文,中国石油大学(计算科学与技术专业)毕业论文规范.doc...
- [Python学习笔记]h5py入门讲解
- Objective-C语法之static关键字的那些事儿(六)
- git如何merge github forked repository里的代码更新?
- javascript 解密_Javascript中的AES加密和Java中的解密
- Flutter State生命周期 Flutter Widget生命周期 Flutter 应用程序生命周期
- 自定义View的学习(一)
- Windows和Linux 服务器的访问方式
- PS自学教程是Ads设计必备 盘点精彩对比式Ads
- error: [debug/qrc_resource.cpp] Error 1
- 2022年湖南省中医执业医师考试第三单元医学针灸学模拟题
- 【Unity面试】 2022年Unity面试题分享 | 全面总结 | 建议收藏
- 深度学习实战8-生活照片转化漫画照片应用
- linux7切换图形界面,CentOS 7 DOS界面与图形界面切换
- 快速获取excel工作簿中所有工作表的名称
- 解决微软Edge浏览器和IE浏览器下载无反应的问题
- 锚定情境法(二):如何合理选择情境题?
- root精灵2020,ROOT精灵手机版
热门文章
- 【linux-centos7重新分配分区】
- 【原创】EXCEL公式经验(2)--关于count(),countif(),counta(),countifs()相关多个函数总结
- Java实现 蓝桥杯VIP 算法提高 洗牌
- u盘怎么制作linux系统盘,如何制作LinuxU盘安装盘
- Calico集成kubernetes的CNI网络部署全过程、启用CA自签名
- X264算法参数五(码控参数)
- http://blog.csdn.net/rambo2188/article/details/6998349
- supermap使用idesktop发布二三维管线地图
- nchar , char , nvarchar , varchar 的区别
- DASH 流媒体协议(Dynamic Adaptive Streaming over HTTP)概述——起源、MPD文件解析、相关项目