学习参考:汇编语言(第2版)王爽
- 源程序
源程序
1 | assume cs:codesg |
在汇编语言程序中,包含两种指令
- 汇编指令:有对应的机器码的指令,可以被编译为机器指令,最终被 CPU 所执行
- 伪指令:没有对应的机器指令,最终不被 CPU 所执行,由编译器来执行,编译器根据伪指令来进行相关的编译工作
上面代码出现了 3 种伪指令
(1)
1 | XXX segment ;段的开始 |
XXX 指段的名称
一个源程序中所有将被计算机所处理的信息:指令、数据、栈,将被划分到不同的段中
一个有意义的汇编程序中至少要有一个段,这个段用来存放代码
(2)end
end 是一个汇编程序结束的标志,编译器在编译汇编程序的过程中,如果碰到了伪指令 end,就结束对源程序的编译。所以,在我们写程序的时候,如果写完了,要在结尾处加上伪指令 end。否则,编译器在编译程序时,无法知道程序在何处结束。
注意 ends 标记一个段的结束,end 标记整个程序的结束
(3)assume
这条伪指令的含义为 “假设”。它假设某一段寄存器和程序中的某一个用 segment…ends 定义的段相关联
编写运算 2^3
1 | assume cs:codesg |
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
还可以对程序进行调试