在上篇文章《在win7 x64下使用DOSBox搭建汇编环境》中已经搭建好了环境,现在来实践一下:
1、一个源程序从写出到执行的过程
一个汇编语言程序从写出到最终执行的简要过程:
编写–>编译–>连接–>执行
本文地址:http://wuyudong.com/2016/09/13/2726.html,转载请注明源地址。
2、编写汇编源程序
首先打开DosBox
输入debug,回车
接着输入edit,回车
进入代码编辑页面,编写源文件代码:
assume cs:codesg codesg segment mov ax,0123H mov bx,0456H add ax,bx add ax,ax mov ax,4c00H int 21H codesg ends end
将文件保存为1.asm后退出edit,结束编辑
简单解释一下上面的代码:
1、伪指令
汇编程序中包含汇编指令和伪指令
伪指令由编译器来执行,编译器根据伪指令来进行相关的编译工作
xxx segment …… xxx ends
segment和ends的作用是定义一个段
一个汇编程序是由多个段组成的,这些段被用来存放代码、数据或当作栈空间来使用
assume这条伪指令的含义为“假设”,它假设某一段寄存器和程序中的某一个segment…ends 定义的段相关联,在这个程序中,用assume cs : codesg将作用代码段的段codesg和CPU的段寄存器cs联系起来
2、标号
一个标号代表了一个地址,比如“codesg”作为一个段的名称,这个段的名称最终将被编译、连接程序处理为一个段的段地址
3、程序的结构
源程序由一些段构成。我们可以在这些段中存放代码、数据或将某个段作为栈空间
下面通过一个小程序实战一下
任务:编程运算2×3
(1)定义一个段,名称为abc
abcsegment …… abc ends
(2)在这个段中写入汇编指令
abc segment mov ax,2 add ax,ax add ax,ax abc ends
(3)abc被当作代码来用,所以将abc和cs联系起来
assume cs:abc abc segment mov ax,2 add ax,ax add ax,ax abc ends end
3、编译
进入dosbox,输入masm来运行masm.exe
提示输入源文件的路径,因为我的源文件和masm在同一个文件夹,名字为1.asm,所以我输入1
接着输入目标文件的名字,我选择默认的名字,直接enter,接下来连着2次enter,在文件夹中生成.obj 文件
最后提示警告和错误数目,如果没有错误就接着进行下一步
4、连接
之前我们已经获得.obj文件,接下来对目标文件进行连接,得到可执行文件
输入link,接着输入要连接的目标文件名:1,enter,紧接着连续三次enter即可
简化编译和连接
打开dosbox之后,直接输入masm 1;
运行后直接生成.obj文件,其它中间文件全部忽略
接着输入link 1;
生成1.exe文件,同时忽略中间文件的生成
接下来直接输入1,就可以执行
汇编程序到执行的过程:
编程 –> 1.asm –> 编译 –> 1.obj –> 连接 –> 1.exe –> 加载 –> 内存中的程序 –> 运行
(edit) (masm) (link) (command) (CPU)
Comments