用汇编语言输出Hello World!
https://zhuanlan.zhihu.com/p/147696502
众所周知,首先从输出“Hello World!”开始学习一门编程语言已经是惯例了,汇编语言也不例外,下面我们将从输出“Hello World!”开始学习汇编语言。
一、编写源程序
首先我们尝试用C语言来实现该功能:
#include <stdio.h>
int main() {
printf("Hello World!"); // 输出“Hello World!”
return 0;
}
可以看到,仅仅用了一行代码就实现了该功能。那么用汇编语言又该如何去实现呢?
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
下面对该汇编程序的部分代码进行说明:
string db 'Hello,World!$'
定义一个名为string的字符串,string是字符串的名称,db是定义字节说明,字符串内容需用单引号括起,其中 $ 是串的结束标志
assume cs:code,ds:data
这是一条汇编伪指令,含义是指定code段与CS寄存器关联,data段与DS寄存器关联
mov dx,offset string
获取string的偏移地址
mov ah,9
int 21h
调用9号DOS功能(显示字符串 )
mov ah,4ch
int 21h
调用程序结束功能
对比两段代码,显然同样的功能用汇编语言实现起来比用C语言实现起来更加复杂。这是因为汇编语言是低级编程语言,而C语言等是高级编程语言,汇编语言更加接近底层。程序员用汇编语言来编写程序实际上都是对CPU中的寄存器进行操作,汇编语言编程是针对寄存器来进行编程的。
二、对源程序进行编译
汇编语言程序从设计到形成可执行程序文件,在计算机上的操作过程分为三步:编辑、汇编、连接。用文本编辑程序写程序,形成.ASM
文件,用汇编程序对.ASM
文件进行汇编,形成.OBJ
文件,再用连接程序对.OBJ
文件进行连接,形成.EXE
文件。
1. 编辑
新建一个名为HELLO.ASM
的文件,用文本编辑器将源程序写入该文件中。
2. 汇编
汇编程序的作用是把汇编语言源程序翻译成为机器代码,产生二进制格式的目标文件(Object File)
在DOS中输入以下命令:
MASM HELLO.ASM
3. 连接
连接就是使用连接程序LINK把目标文件(OBJ)转换为可执行的EXE文件。
在DOS中输入以下命令:
LINK HELLO.OBJ
三、在Debug模式下调试程序
程序必须经过调试阶段,才能观测结果和发现程序中的错误。
在DOS中输入以下命令:
debug hello.exe
用Debug调入HELLO.EXE,出现-
Debug命令提示符。在-
后可键入Debug命令进行调试。
四、运行程序
在DOS中输入以下命令:
hello.exe
运行结果: