彙編語言(Assembly language)實驗環境搭建詳解

彙編語言(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的命令提示符“-”出現後開始調試。

 

編寫運行彙編語言程序

有了前面準備工作,現在可以編寫運行彙編語言程序了。

  1. 編寫彙編語言程序

打開“記事本“輸入如下代碼:

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中,參見下圖:

 

  1. 輸入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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章