实验一

准备工作

win10环境不自带debug,需要自己配置。

软件

  1. DOSBox
  2. masm 可以直接下载由参考资料1作者提供的masm工具压缩包,里面包含必要的汇编、链接、调试工具,百度网盘下载链接:https://pan.baidu.com/s/1skL2bVJ,密码:7uv1

配置

  1. 安装软件1,任意盘都可以
  2. 运行软件1,然后输入
mount d w:/masm   //最后一个是你上面masm的解压后的地址
d:                //因为上面挂在的虚拟盘盘符规定为d,所以这里是进入到d盘
debug            //进入到debug

实验(1)

写入数据用Debug的E命令。命令如下:
![题目要求写入内存并执行,既然要执行,就要写入cs:ip指向的内存单元,才会执行,所以先看看cs:ip指向哪]#实验一
@(技术博客)[汇编语言,实验]

准备工作

win10环境不自带debug,需要自己配置。

软件

  1. DOSBox
  2. masm 可以直接下载由参考资料1作者提供的masm工具压缩包,里面包含必要的汇编、链接、调试工具,百度网盘下载链接:https://pan.baidu.com/s/1skL2bVJ,密码:7uv1

配置

  1. 安装软件1,任意盘都可以
  2. 运行软件1,然后输入
mount d w:/masm   //最后一个是你上面masm的解压后的地址,为了简单我放在了w盘根目录
d:                //因为上面挂在的虚拟盘盘符规定为d,所以这里是进入到d盘
debug            //进入到debug

实验(1)

第一种

写入数据用Debug的E命令,直接写入机器码,或者也可以写入字符串:


实验一_第1张图片
题目要求写入内存并执行,既然要执行,就要写入cs:ip指向的内存单元,才会执行,所以先看看cs:ip指向哪
实验一_第2张图片
用命令e,将地址定位当前CS:IP指向的073F:0100,然后一次输入机器码。至于为什么会是00.b8这种形式,是因为00是指输入当时的内存单元里存的数据
实验一_第3张图片
可以看到第一个t指令后,第一条汇编指令“mov ax,4e20h”已经执行了,接下来的是第二条“add ax,1416”。且ax也由0000变为4e20,IP也从0100变成0103。不再赘述

第二种

可以用A命令,直接写入汇编语言,形式如下

实验一_第4张图片
注意debug默认16进制,不需要再打h

(2)

先把指令输入到指定内存地址
实验一_第5张图片
把寄存器cs改为2000,使得CPU要执行的指令指向刚才我们写入的汇编指令
实验一_第6张图片
用命令t运行,然后多运行几次就可以看到ax为8了

(3)

实验一_第7张图片
主要是要理解为什么可以把该物理地址段改成段地址+偏移地址,这里我改的是fff0:0000——fff0:00ff,也可以改成ff00:0f00——ff00:0fff
实验一_第8张图片
不知道是不是,写着01/01/92,难道是1992年1月1号的,不管怎么样,我们记住这个内存单元地址,接下来尝试改写它

从上图可知,一个点是一个存储单元,那么第一个0的内存地址是对应的机器码是30,内存地址是FFF0:00F6

实验一_第9张图片
这里我尝试改变第一个01中的1,改成2,然而再看的时候,依旧是01而不是02。大概是因为这部分是ROM的原因。只能读不能写

(4)

实验一_第10张图片
可以看到也没有被重写,因为这也是ROM的部分。

参考资料

  1. Win8下用DOSBox编写汇编语言

你可能感兴趣的:(实验一)