学校没有开设《汇编语言》这门课,但我觉得学习汇编挺重要的,对学习计组以及理解计算机原理很有帮助!
1】安装DOSBox和MASM
1)安装DOSBox
首先官网下载DOSBox传送门,网盘链接:https://pan.baidu.com/s/13H0IU9xdYUJIQnwv1eE4Ag 提取码:2g8s ,包含MASM
安装过程就不说了,建议安装在D盘,C盘也可以。我这里是安装在C盘,安装好后打开,注意有两个窗口,不要关闭
找到文件:C:\Users\用户\AppData\Local\DOSBox\dosbox-0.74-3.conf,找不到AppData查看隐藏的文件,使用记事本打开dosbox-0.74-3.conf,在末尾添加下面两行代码:
mount d d:\masm
d:
上面代码的意思就是把D盘映射为虚拟C盘,现在打开DOSBox可以看到自动映射了。
2)安装MASM
自己去下载也可以,网盘里面下载下来直接提取到D盘根目录就行了
没有提取 MASM是无法进行debug的,现在打开就可以愉快的开始使用了。
2】使用DOSBox编写汇编程序
1)编写 helloword 汇编源程序
打开 DOSBox,输入 edit 编写一个汇编源程序
代码://
data segment ;这里定义一个数据段
tab db 'hello world$' ;这里用内存存放字节数据 'hellow world!',$用来判断字符串是否输出完毕
data ends ;数据段的结束标志
code segment ;这里定义了一个代码段
assume cs:code, ds:data ;这里把程序中定义的段与对应的段寄存器关联起来
start: ;这里是一个标号,根据end后面的标号判断这里是程序的开始位置
mov ax,data
mov ds,ax ;这里把数据段的地址放到数据段寄存器ds中
lea dx,tab ;dx中放将要显示数据的偏移地址
mov ah,9h
int 21h ;调用21号中断的9号功能来显示字符串
mov ah,4ch
int 21h ;程序返回在这里插入图片描述
code ends ;代码段的结束语
end start ;定义程序从哪个标号处开始执行
编写好后点击 file ,选择 save as …,输入文件名称 hello ,后缀是 .asm ,然后点击 ok
也可使用其他编辑器编写源代码,保存到 MASM 文件夹下,修改后缀为 .ASM就行了。
打开 D:\MASM 就可以看见我们编写的源程序了。
2)编译
打开DOSBox,输入 masm ,确认后弹出的第一行输入要编译的源程序的名称:hello.asm ,也可以直接输入 MASM hello.asm ,都一样。
“[.ASM]”提示我们,默认的文件扩展名是asm,比如,要编译的源程序文件名是“p1.asm”,只要在这里输入“p1”即可。可如果源程序文件不是以asm为扩展名的话,就要输入它的全名。比如源程序文件名为“p1.txt”,就要输入全名。
在输入源程序文件名的时候一定要指明它所在的路径。如果文件就在当前路径下,只输入文件名就可以,可如果文件在其他的目录中,则要输入路径,比如,要编译的文件p1.txt在“c:\windows\desktop”下,则要输入“c:\windows\desktop\p1.txt”。这里,我们要编译的文件是C盘根目录下的1.asm,所以此处输入“c:\1.asm”。
在输入源程序文件名后,程序会继续提示我们要编译出的目标文件的名称,目标文件是我们对一个源程序编译要得到的最终结果。注意屏幕上的显示 "[ hello.OBJ ] ",因为我们已经输入了源程序文件名为 hello.asm ,则编译程序默认输出文件名为 hello.obj ,所以不必再指定文件名。直接按 ENTER ,在当前目录下生成 hello.obj 文件。
我们到MASM文件夹下可以看到多了一个 hello.obj 文件,源程序的编译最后两行如果出现警告和错误必须要改正,否则无法生成obj文件。
3)连接
接着上面的顺序,现在已经生成了一个hello.obj 文件,我们需要对目标文件进行连接,从而得到可执行文件。 输入 LINK ,弹出的第一行输入 obj 文件名称,比如 hello,也可以直接输入 LINK hello.obj
这里出现一个警告:没有栈段,我们不予理会。
连接成功后会在 MASM 目录下生成一个 hello.exe 文件,如果出现错误,则无法生成。
连接的作用:
- 当源程序很大时,可以将它分为几个源程序文件来编译,每个源程序编译成为目标文件后,再用连接程序将他们连接到一起,生成一个可执行文件;
- 程序中调用来某个库文件中的子程序,需要将这个库文件和该程序生成的目标文件连接到一起,生成一个可执行文件;
- 一个源程序编译后,得到了存有机器码的目标文件,目标文件中的有些内容还不能直接用来生成可执行文件,连接程序将这些内容处理为最终的可执行信息。所以,在只有一个源程序文件,而又不需要调用某个库中的子程序的情况下,也必须用连接程序对目标文件进行处理,生成可执行文件。
4)执行我们编译好的 .exe 文件
输入:
hello.exe
hello
都可以执行exe文件,当然前提是在 MASM 状态下。如图
至此就是编写汇编源程序以及运行的全部内容,我们还可以在此基础上进行debug,查看heelo.exe的执行情况,更多的知识请自行前往学习。