汇编语言学习笔记(四):第一个程序

学习参考:汇编语言(第2版)王爽

  • 源程序

源程序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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

在汇编语言程序中,包含两种指令

  • 汇编指令:有对应的机器码的指令,可以被编译为机器指令,最终被 CPU 所执行
  • 伪指令:没有对应的机器指令,最终不被 CPU 所执行,由编译器来执行,编译器根据伪指令来进行相关的编译工作

上面代码出现了 3 种伪指令

(1)

1
2
3
4
XXX segment     ;段的开始
..
..
XXX ends ;段的结束

XXX 指段的名称

一个源程序中所有将被计算机所处理的信息:指令、数据、栈,将被划分到不同的段中

一个有意义的汇编程序中至少要有一个段,这个段用来存放代码

(2)end

end 是一个汇编程序结束的标志,编译器在编译汇编程序的过程中,如果碰到了伪指令 end,就结束对源程序的编译。所以,在我们写程序的时候,如果写完了,要在结尾处加上伪指令 end。否则,编译器在编译程序时,无法知道程序在何处结束。

注意 ends 标记一个段的结束,end 标记整个程序的结束

(3)assume

这条伪指令的含义为 “假设”。它假设某一段寄存器和程序中的某一个用 segment…ends 定义的段相关联

编写运算 2^3

1
2
3
4
5
6
7
8
9
10
11
12
assume cs:codesg
codesg segment

mov ax,2
add ax,ax
add ax,ax ;2^3

mov ax,4c00H
int 21H

codesg ends
end

Q:如何编译并运行源程序
A:
因为我们现在大部分的机子都是 64 位的了,所以我们需要借助 DOSBox 这个工具,

下载完后点开,首先输入以下指令

1
mount c: <dir>

dir 即为你程序的保存路径。我们首先用记事本编写完程序后,保存在指定目录,并且修改后缀为 .asm

比如我保存的路径为 f 盘的 assembly 这个文件夹,那么我就可以这么写

1
mount c: f:\assembly\

然后再输入

1
c:

接着就可以看到盘符变成了 C:\>

接着就可以编译了

1
masm <file>.asm;

file 即文件名。后面接了一个 ;,这个也可以不加,如果不加的话,这需要多敲几次回车就可以了。执行完该指令后,就会生成一个 <file>.obj 的文件,在保证没错误的情况,下面就是连接

1
link <file>.obj;

在保证没错误的情况,然后生成了一个 <file>.exe 文件,接着直接输入文件名即可执行程序

使用如下 debug <file>.exe 还可以对程序进行调试

Author: Inno Fang
Link: http://innofang.github.io/2017/11/20/%E6%B1%87%E7%BC%96%E8%AF%AD%E8%A8%80%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0%EF%BC%88%E5%9B%9B%EF%BC%89%EF%BC%9A%E7%AC%AC%E4%B8%80%E4%B8%AA%E7%A8%8B%E5%BA%8F/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-ND 4.0 unless stating additionally.