window10下搭建汇编环境(软件+资料)

window10下搭建汇编环境


0x00 软件和资料

软件包含:

  • dosbox
  • debug
  • masm
  • link
  • exe2bin(这个暂时可以忽略)

资料包含:

  • 王爽老师的《汇编语言》第二版
  • 《汇编语言》第二版 中的习题答案
  • 汇编语言编程艺术(清晰版)

下载地址:

链接:https://pan.baidu.com/s/17QfCsbvYNwLnUCHIzsluDQ
提取码:i27u

0x01 环境搭建

把软件放在同一个文件夹下,
我的放在D/Debug
在这里插入图片描述

  1. 安装dosbox

选择安装目录(最好是自己选择一个目录,方便后面查找
在这里插入图片描述
我在D盘创建了一个dosbox文件夹,把它安装在D盘的dosbox下,选择好安装目录后,点击安装即可。
在这里插入图片描述
2. 修改dosbox配置文件

安装好dosbox后,
我们相当于有了一个可以运行debug,masm等(我们写的汇编程序也是用这个终端来运行)程序的终端程序(cmd,windows10自带的cmd是运行不了debug,masm。。程序的)。
在这里插入图片描述
现在有了可以运行这些程序的cmd,
现在去尝试运行一下debug,
我们要先转到debug程序所在的目录下,
(我的debug程序放在了D/Debug)
在dosbox中输入:

mount D D:/Debug

(mount命令是挂载硬盘或镜像的命令,这条指令我的的理解是:把D/Debug文件夹里的东西在D盘上创建了一个镜像)

回车之后再输入D:
然后回车,就转到了所在目录
在这里插入图片描述
再输入debug即可运行debug程序(运行其他程序同理,因为之前我们就把它们放在了同一个目录下):
在这里插入图片描述
debug常用命令(不区分大小写)有:

r: 查看,修改 cpu寄存器中的内容;
d:查看内存中的内容
e:改写内存中的内容
u:将机器指令翻译成汇编指令
t:执行下一条汇编指令
a:以汇编的格式在内存中写入一条机器指令(写汇编指令)

在这里插入图片描述
其他指令请自行尝试,大胆尝试!(这里并不会损害我们自己的电脑)

这里有一个问题:每次我们打开dosbox,都需要写命令转到需要运行的程序的文件夹然后才能运行程序,很不方便。

我想要的是直接打开dosbox,直接输入程序名即可运行

所以我们就需要修改一下dosbox的配置,
在dosbox安装目录中,找到如下图选中的这个文件
在这里插入图片描述
用记事本打开这个文件(双击会默认用记事本打开),
在文件结尾写入并保存

MOUNT D D:\Debug
D:

在这里插入图片描述
现在打开dosbox,直接输入程序名就可以运行程序了。
在这里插入图片描述
3. 其他
debug:调试程序(数据默认就是十六进制,不需要加h)

masm:编译程序

link:链接程序

dosbox:终端运行程序

对于debug和masm,link这三个程序的切换,
在运行debug的时候,输入quitq可退出运行debug,
从而可以输入其他程序名来运行其他程序.
但是对于masm和link要退出,目前我不知道有什么退出命令,
我的做法是,随便输入一个字母,按几下下回车即可。(或者关闭重新打开dosbox,再输入其他程序名)

在这里插入图片描述

0x03 写汇编程序实例

1. 小型汇编程序:

可以用debug写。
(但是一般还是用记事本或Notepad++等编辑软件写好,然后在dosbox下编译链接运行。debug一般都是用来调试的。)

下面用debug写一个简单的程序:

在这里插入图片描述
输入u可以查看汇编指令
在这里插入图片描述
输入t 即可执行一条汇编指令,然后可以观察寄存器的变化

在这里插入图片描述
在这里插入图片描述
执行完可以看到AX = 6

2. 比较大型的汇编程序:

用记事本或Notepad++写好,然后在dosbox下编译链接运行.
比如写一个:计算2^8的程序:
在debug,masm,link…所在目录下(这样编译运行的时候就直接可以写文件名,而不用写具体路径)新建文件2_8.asm,
用记事本打开,写入:

	assume cs:code
	code segment
	mov ax,2
	mov cx,8
	s: add ax,ax
	   loop s
	mov ax,4c00h
	int 21h
	code ends
	end

在这里插入图片描述

保存。
然后打开dosbox。
编译,输入:

masm 2_8.ASM

(这里是标准的文件,.ASM可以不加文件类型后缀,如果是txt,则需要加上文件类型后缀.txt)
如果要给编译得到的文件重命名则在Object fileName后输入文件名,
否则直接回车,一路回车。

编译后会得到一个.OBJ文件:
在这里插入图片描述
链接,输入:

link 2_8

一路回车。。
在这里插入图片描述
最终得到了一个可执行文件:2_8.EXE

直接在dosbox中输入:
2_8.EXE执行,执行完成,屏幕并不会显示什么,因为并没有写输出相关的指令(汇编输出有点麻烦,要把16进制结果进行转换,现在就是熟悉一下编程环境)。

在这里插入图片描述
现在只能使用debug来追踪程序指令的执行。
输入:

debug 2_8.EXE

输入r,可以查看当前寄存器的情况,
输入u,可以看到我们的汇编指令已经加载入了内存中。
然后就是t,单步执行指令了。
在这里插入图片描述
可以使用:g 偏移地址来一跳过我们不想追踪的部分,如下图,
0006之前的已经执行完了,即0006以前的指令看上去“一步就执行完了”.
我们继续输入t,就可以追踪循环部分。
在这里插入图片描述
在这里插入图片描述

0x04

…汇编输出真TM麻烦(不过,为了 代码了解底层实现 还是需要好好学。。)

来一个简单的“Hello world!”输出吧:

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
不解释,多看书~

猜你喜欢

转载自blog.csdn.net/tb_youth/article/details/105069623