為了理解匯編語言的編輯、匯編、連接、運行的全過程,我們不使用IDE,而是分步驟來進行:
需要工具:
1. 文本編輯器(如果有Notepad++或者UltraEdit就更好了)
2. 匯編器(如MASM.exe)
3. 連接器(對應的link.exe)
為了省略盤符轉換,我在電腦的F盤中建立了myASM這個文件夾,并把Windows系統的cmd.exe復制到了該文件夾中,另外,把下載好的MASM.exe和LINK.exe都復制到該文件夾中,在myASM下建立一個文本文件1.txt, 改其名為1.asm, 在1.asm中輸入如下程序并保存
assume cs : xxx
xxx segment
mov ax, 2
add ax, ax
add ax, ax
mov ax, 4c00H
int 21H
xxx ends
end
點擊cmd.exe, 然后輸入masm, 按enter, 進入了masm的界面,然后按下圖輸入(有時需要按enter鍵):
在myASM文件夾下生成了1.obj文件盒1.exe文件(注意:由于該程序只有代碼段,沒有棧段,故有no stack segment這個提示)。
雙擊1.exe文件后,黑色的框框一閃而過,這是很正常的。用cmd.exe來運行1.exe, 也沒有發現什么結果,因為該程序并沒有輸出操作,所以自然也就沒有輸出結果了。那要怎么樣看結果呢?用debug嘛!步驟如下:
有兩點值得注意:
1. u命令表示將內存中的機器指令轉為匯編指令(至于g命令的作用,前面已經說過了)
2. 要輸入debug 1.exe. 如果輸入debug 1, 則會出錯
3. 在沒有學會輸出操作之前,以上方法是查看結果的好方法
下面,我們來對上述程序進行解釋:
1.
xxx segment
...
xxx ends
segment和ends(不是end)是一對偽指令,用來定義一個“段”,具體是什么“段”由偽指令assume來指定。比如assume cs : xxx 指定的是代碼段(code segment)
2. end偽指令是一個匯編語言結束的標記,碰到end, 則停止匯編
3.
mov ax, 4c00H
int 21H
這兩條語句的功能是程序返回
4.
mov ax, 2
add ax, ax
add ax, ax
這三條語句是“段”的主體(代碼段的主體)