彙編語言(Assembly language)實驗環境搭建詳解
彙編語言(assembly language)是特定於某個物理或虛擬計算機體系結構(與大多數高級語言相反)。彙編語言中,用助記符(Mnemonics)代替機器指令的操作碼,用地址符號(Symbol)或標號(Label)代替指令或操作數的地址。在不同的設備中,彙編語言對應着不同的機器語言指令集,通過彙編過程轉換成機器指令。
【CPU 只負責計算,本身不具備智能。你輸入一條指令(instruction),它就運行一次,然後停下來,等待下一條指令。這些指令都是二進制的,稱爲操作碼(opcode),比如加法指令就是00000011。編譯器的作用,就是將高級語言寫好的程序,翻譯成一條條操作碼。
彙編語言是二進制指令的文本形式,與指令是一一對應的關係。比如前面提到的加法指令00000011寫成彙編語言就是 ADD。只要還原成二進制,彙編語言就可以被 CPU 直接執行,所以它是最底層的低級語言。
最早的時候,編寫程序就是手寫二進制指令,然後通過各種開關輸入計算機,比如要做加法了,就按一下加法開關。後來,發明了紙帶打孔機,通過在紙帶上打孔,將二進制指令自動輸入計算機。把這些文字指令翻譯成二進制,這個步驟就稱爲 assembling(彙編過程),完成這個步驟的程序就叫做 assembler(彙編程序)。
每一種 CPU 的機器指令都是不一樣的,因此對應的彙編語言也不一樣。目前最常見的 x86 彙編語言,即 Intel 公司的 CPU 使用的那一種。
基礎知識可參見阮一峯的:
彙編語言入門教程
http://www.ruanyifeng.com/blog/2018/01/assembly-language-primer.html
】
本文重點介紹實驗環境的搭建
有很多很好的彙編程序(assembler),如:MASM (Microsoft Macro Assembler)。
MASM是微軟公司爲x86 微處理器家族開發的彙編開發環境,擁有可視化的開發界面,使開發人員不必再使用DOS環境進行彙編的開發,編譯速度快,支持80x86彙編以及Win32Asm,是Windows下開發彙編的利器。
在windows10中MASM環境的搭建:
在windows下搭建彙編語言(Assembly language)編程環境工具包,下載地址:
https://download.csdn.net/download/cnds123/12511117
1)、創建一個用於保存彙編工具(debug.exe、link.exe、masm.exe、edit.com等工具)的目錄,如:D:\ MASMdebug(根據你的情況確定)。
2)、安裝DOSBox
DOSBox是一個 DOS 模擬程序。debug.exe、link.exe、masm.exe、edit.com等工具是DOS下的工具,要想正確運行就需要DOSBox這個 DOS 模擬程序。
雙擊安裝:
直接一路Next完成安裝。
安裝完成,在開始菜單中創建文件夾:
在桌面上創建快捷方式:
3)、將1)中建立目錄D:\ MASMdebug 掛在到DOSBox的C——輸入MOUNT C D:\ MASMdebug回車(即按下Enter鍵),參見下圖:
在DOSBOX中,輸入C:回車(即按下Enter鍵)進入命令符C:\>,此時,可以運行D:\ MASMdebug中的可執行程序——debug.exe、link.exe、masm.exe等工具,參見下圖:
進入debug程序,使用r指令查看cup寄存器內容,用q指令將退出debug程序。
運行DOSBOX,在命令符C:\>下,命令的拼寫忽略大小寫,此時:
【輸入命令:EDIT 文件名.asm,啓動EDIT.EXE進入代碼編輯狀態,輸入程序代碼。可以使用記事本代替EDIT程序。】
輸入命令:MASM 文件名.asm,生成目標文件文件名.OBJ(生成過程中可以修改目標文件名,直接回車可保持默認目標文件名)
輸入命令:LINK 文件名.OBJ,鏈接生成可執行文件文件名.EXE。
輸入命令:DEBUG 文件名.EXE,在DEBUG的命令提示符“-”出現後開始調試。
編寫運行彙編語言程序
有了前面準備工作,現在可以編寫運行彙編語言程序了。
- 編寫彙編語言程序
打開“記事本“輸入如下代碼:
assume cs:code,ds:datas
datas segment
str db 'helloWorld!','$'
datas ends
code segment
mov ax,datas
mov ds,ax
lea dx,str ; 獲取str的偏移地址
mov ah,9 ; 調用9號功能輸出字符串
int 21h
mov ah,4ch
int 21h
code ends
end
保存文件名爲test1.asm ,注意擴展名爲.asm。爲了編譯方便放在目錄D:\ MASMdebug中,參見下圖:
- 輸入MASM test1.asm , 生成.obj文件,參見下圖:
上述過程的示意圖如下:
若使用更爲簡潔的(注意帶英文分號;)編譯形式:
MASM test1.asm;
參見下圖:
3)連接,輸入LINK test1.obj ,參見下圖:
上述過程的示意圖如下:
若使用更爲簡潔的(注意帶英文分號;)連接形式:
LINK test1.obj;
參見下圖:
執行exe文件,參見下圖:
特別提示,以後進入在DOSBOX中,開始時,需要掛載一下D:\ MASMdebug目錄(根據你的情況確定)。
下面再給出一例彙編語言程序代碼,你試着編譯運行之:
DATA SEGMENT
BUFFER DB "1 STYLE ONE ", 0DH, 0AH
DB "2 STYLE TWO ", 0DH, 0AH
DB "3 EXIT ", 0DH, 0AH, '$'
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START: MOV AX, DATA
MOV DS, AX
MOV DX, OFFSET BUFFER ;打印菜單
MOV AH, 09H
INT 21H
MOV AH,4CH ;退出程序
INT 21H
CODE ENDS
END START