guangzhou



shanghai

Recent posts:
Blog index
About
RSS

汇编的第一个程序

September 13, 2016     Assembly   682   

在上篇文章《在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

No comments yet.
To verify that you are human, please fill in "七"(required)