众所周知,首先从输出“Hello World!”开始学习一门编程语言已经是惯例了,汇编语言也不例外,下面我们将从输出“Hello World!”开始学习汇编语言。

一、编写源程序

首先我们尝试用C语言来实现该功能:

1
2
3
4
5
6
#include <stdio.h>

int main() {
printf("Hello World!"); // 输出“Hello World!”
return 0;
}

可以看到,仅仅用了一行代码就实现了该功能。那么用汇编语言又该如何去实现呢?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
data segment ;数据段
string db 'Hello,World!$'
data ends
code segment ;代码段
assume cs:code,ds:data
start:
mov ax,data ;获取段基址
mov ds,ax ;将段基址送入寄存器
mov dx,offset string
mov ah,9
int 21h
mov ah,4ch
int 21h
code ends
end start

下面对该汇编程序的部分代码进行说明:

1
string db 'Hello,World!$'

定义一个名为string的字符串,string是字符串的名称,db是定义字节说明,字符串内容需用单引号括起,其中 $ 是串的结束标志

1
assume cs:code,ds:data

这是一条汇编伪指令,含义是指定code段与CS寄存器关联,data段与DS寄存器关联

1
mov dx,offset string 

获取string的偏移地址

1
2
mov ah,9
int 21h

调用9号DOS功能(显示字符串 )

1
2
mov ah,4ch
int 21h

调用程序结束功能

对比两段代码,显然同样的功能用汇编语言实现起来比用C语言实现起来更加复杂。这是因为汇编语言是低级编程语言,而C语言等是高级编程语言,汇编语言更加接近底层。程序员用汇编语言来编写程序实际上都是对CPU中的寄存器进行操作,汇编语言编程是针对寄存器来进行编程的。

二、对源程序进行编译

汇编语言程序从设计到形成可执行程序文件,在计算机上的操作过程分为三步:编辑、汇编、连接。用文本编辑程序写程序,形成.ASM文件,用汇编程序对.ASM文件进行汇编,形成.OBJ文件,再用连接程序对.OBJ文件进行连接,形成.EXE文件。

1. 编辑

新建一个名为HELLO.ASM的文件,用文本编辑器将源程序写入该文件中。

2. 汇编

汇编程序的作用是把汇编语言源程序翻译成为机器代码,产生二进制格式的目标文件(Object File)

在DOS中输入以下命令:

1
MASM HELLO.ASM
3. 连接

连接就是使用连接程序LINK把目标文件(OBJ)转换为可执行的EXE文件

在DOS中输入以下命令:

1
LINK HELLO.OBJ

三、在Debug模式下调试程序

程序必须经过调试阶段,才能观测结果和发现程序中的错误。

在DOS中输入以下命令:

1
debug hello.exe

用Debug调入HELLO.EXE,出现-Debug命令提示符。在-后可键入Debug命令进行调试。

四、运行程序

在DOS中输入以下命令:

1
hello.exe

运行结果:

运行结果.png