[TOC]




## **编写源程序**
### **新建test.asm文件,然后编写求2^3的代码**
这个可以用记事本、sublime([**NASM x86 Assembly**](https://blog.csdn.net/qq_35572368/article/details/104984317)插件可以高亮)、editPlus或者edit.exe
这里介绍edit.exe使用方法。打开dos

看到dos的c盘已经映射到edit.exe所在的目录,dos中键入edit回车启动编辑器,然后编写汇编代码并保存为test.asm:



```
assume cs:abc
abc segment
mov ax,2
add ax,ax
add ax,bx
mov ax,4c00H
int 21H
abc ends
end
```
步骤:
### **MASM.exe编译获得目标文件:xxx.obj**

看到dos的c盘已经映射到MASM.exe所在的目录,dos中键入masm+回车启动微软的编译器MASM.exe

指定目录及文件名


**简化方式编译:必须加分号**
```
masm test;
```

### **LINK.exe连接目标文件xxx.obj以获取可执行文件xxx.exe**



**简化方式连接:必须加分号**
```
link test;
```

### **xxx.exe的执行**
看不到结果是应为没有想显示器输出结果


我们在前面讲过,在DOS中,可执行文件中的程序P1若要运行,必须有一个正在运行的程序P2,将P1从可执行文件中加载入内存,将CPU的控制权交给它, P1才能得以运行;当P1运行完毕后,应该将CPU的控制权交还给使它得以运行的程序P2.
按照上面的原理,test.exe的执行过程(思考相关的问题)。
* (1)在提示符"c:masm"后面输入可执行文件的名字"test",按Enter键。这时,有一个正在运行的程序将test.exe中的程序加载入内存,这个正在运行的程序是什么?它将程序加载入内存后,如何使程序得以运行?
* >[info] (1)在DOS中直接执行test.exe时,是正在运行的command,将1.exe中的程序加载入内存
* (2) 1.exe中的程序运行。
* >[info] (2) command设置CPU的CS:IP指向程序的第一条指令(即程序的入口),从而使程序得以运行:
* (3)运行结束,返回,再次显示提示符"c:masm" 。程序运行结束后,返回到哪里?
* >[info] (3)程序运行结束后,返回到command中, CPU继续运行command.
## **debug跟踪程序执行**
编写汇编程序并编译连接为p1-1.exe
~~~
assume cs:codesg
codesg segment
mov ax,0123H
add bx,0456H
add ax,bx
add ax,ax
mov ax,4c00H
int 21H
codesg ends
end
~~~
执行`debug p1-1.exe`
r查看 ****数据段寄存器DS**为075A、(代码)段寄存器cs** 为076A




