第一个程序

源程序是文本文件,编译器将源程序编译成目标文件,内容为机器码,连接器将多个目标文件以及库文件连接在一起,并将这些内容处理为可执行文件。

DOS 中加载 EXE 程序的过程:

  1. 找到一段起始地址为 SA:0000 的空闲内存空间。
  2. 在这段内存前 256 字节,创建程序段前缀(PSP)的数据区,DOS 利用 PSP 与程序通信。
  3. 在 PSP 数据区的后面,将程序装入。程序起始地址为:SA+10H:0。
  4. 存储段地址 DS = SA,初始化 CS:IP 为程序入口地址。

汇编源代码语法

汇编代码片段:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
assume cs:codesg
codesg segment
mov ax,2000H
mov ss,ax
mov sp,0
add sp,10
pop ax
pop bx
push ax
push bx
pop ax
pop bx
mov ax,4c00H
int 21H
codesg ends
end

伪指令:

伪指令不对应机器码,由编译器执行相关操作。

assume 将定义的 codesg 段与 CS 寄存器关联。

段名称 segment 开始一个段。

段名称 ends 结束一个段,segment 和 ends 成对使用,用于定义一个段。

end 代表整个汇编程序结束。

源程序是由一些段构成的,可以在这些段中存放代码、数据或将某个段作为栈使用。

程序返回

程序运行结束后,需要将 CPU 控制权交还使它得以运行的程序。应该在程序末尾添加返回的程序代码。

1
2
mov ax,4c00H
int 21H

编译、连接、运行一段汇编程序

下载汇编学习工具

然后解压缩。

下载 Dosbox 并安装。

启动 dosbox,运行下面的命令:

1
2
3
4
5
$ mount c 汇编学习工具文件夹目录
$ cd c:\
$ masm 1.asm;
$ link 1.obj;
$ 1.exe