[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



