把匯編語言書寫的程序翻譯成與之等價的機器語言程序的翻譯程序。匯編程序輸入的是用匯編語言書寫的源程序,輸出的是用機器語言表示的目標程序。匯編語言是為特定計算機或計算機系列設(shè)計的一種面向機器的語言,由匯編執(zhí)行指令和匯編偽指令組成。采用匯編語言編寫程序雖不如高級程序設(shè)計語言簡便、直觀,但是匯編出的目標程序占用內(nèi)存較少、運行效率較高,且能直接引用計算機的各種設(shè)備資源。它通常用于編寫系統(tǒng)的核心部分程序,或編寫需要耗費大量運行時間和實時性要求較高的程序段。
中文名稱 | 匯編程序 | 外文名稱 | assembler |
---|---|---|---|
漢語拼音 | huibian chengxu | 學????科 | 計算機 |
簡單匯編程序 又稱"裝入并執(zhí)行"式匯編程序。由于簡便而得到廣泛使用。這種匯編程序的特點是匯編后的機器語言程序直接放在內(nèi)存之中準備執(zhí)行。目標程序所占據(jù)的存儲位置是在匯編時固定的,并且以后不能改變,所以這種工作方式不能將多個獨立匯編的子程序合并為一個完整的程序,而且只能調(diào)用位置與目標程序不沖突的程序庫中的子程序。
模塊匯編程序 為適應(yīng)模塊程序設(shè)計方法而研制的。它除了克服簡單匯編程序的缺點之外,還提供并行設(shè)計、編碼和調(diào)試不同程序模塊的能力,而且更改程序時只更改有關(guān)的模塊即可。每個匯編后的程序模塊稱為目標模塊,多個目標模塊經(jīng)連接裝配程序組合成一個完整的可執(zhí)行的程序。
條件匯編程序 主要特點是具有選擇匯編某些程序段的能力。它適用于編寫選擇性較大的程序或程序包,以便根據(jù)用戶的需要和設(shè)備的配置情況剪裁、編制適當?shù)能浖?。這種匯編語言通常要引入"條件轉(zhuǎn)移"、"轉(zhuǎn)移"等匯編指示,以便根據(jù)用戶指定的匯編條件有選擇地匯編某些程序段或控制匯編程序的加工路徑。
宏匯編程序 主要特點是在匯編程序中增加宏加工功能。它允許用戶方便地定義和使用宏指令,適用于程序中多處出現(xiàn)、具有一定格式、可以通過少數(shù)參數(shù)調(diào)節(jié)改變的程序段落的場合。采用這種方法不僅減少程序的長度,增加可讀性,而且程序段落的格式需要改變時,只須改動定義處,而不必改動每一使用處。
高級匯編程序 采用高級程序設(shè)計語言的控制語句結(jié)構(gòu)的匯編程序。它不僅保持匯編語言表達能力強、程序運行效率高的優(yōu)點,而且能充分吸收高級語言書寫簡單和易讀的長處。這是由于高級匯編程序允許用戶使用高級程序設(shè)計語言的控制語句(如條件語句、循環(huán)語句、函數(shù)和過程)編寫程序中的控制部分,而且還允許用戶直接利用匯編語言直接控制存儲分配、存取寄存器硬件,描述高級語言難于表達的算法。第一個高級匯編程序是N.沃思為IBM360系統(tǒng)研制的PL/360語言匯編程序,其特點是程序的控制部分采用高級語言的控制語句編寫,而數(shù)據(jù)加工部分采用IBM360匯編指令編寫。自此以后,又相繼出現(xiàn)了類似ALGOL的匯編程序,類似FORTRAN的匯編程序FAT。
由于匯編語言的指令與機器語言的指令大體上保持一一對應(yīng)的關(guān)系,匯編算法采用的基本策略是簡單的。通常采用兩遍掃描源程序的算法。第一遍掃描源程序根據(jù)符號的定義和使用,收集符號的有關(guān)信息到符號表中;第二遍利用第一遍收集的符號信息,將源程序中的符號化指令逐條翻譯為相應(yīng)的機器指令。具體的翻譯工作可歸納為如下幾項:用機器操作碼代替符號操作;用數(shù)值地址代替符號地址;將常數(shù)翻譯為機器的內(nèi)部表示;分配指令和數(shù)據(jù)所需的存儲單元。除了上述的翻譯工作外,匯編程序還要考慮:處理偽指令,收集程序中提供的匯編指示信息,并執(zhí)行相應(yīng)的功能。為用戶提供信息和源程序清單。匯編的善后處理工作,隨目標語言的類型不同而有所不同。有的直接啟動執(zhí)行,有的先進行連接裝配。如果具有條件匯編、宏匯編或高級匯編功能時,也應(yīng)進行相應(yīng)的翻譯處理。
假定匯編語言中規(guī)定符號的應(yīng)用一定出現(xiàn)在定義之后,則兩遍算法可容易地合并成一遍算法加以實現(xiàn)。
【漢語拼音】huibian chengxu
【中文詞條】匯編程序
【外文詞條】assembler
按鍵開關(guān)接單片機I/O口來控制四位數(shù)碼管動態(tài)顯示匯編程序
自己做確實比問問題來的好,建議你查一下課本,或者推薦你看郭天祥的書
一、BDS-1530便攜數(shù)控火焰/等離子切割機構(gòu)成部分:?數(shù)控系統(tǒng):??1、上海方菱數(shù)控系統(tǒng),可用于大型數(shù)控切割設(shè)備和便攜式切割設(shè)備。2、公司自主研發(fā)系統(tǒng),便攜式數(shù)控切割機專用系統(tǒng)。?兩種系統(tǒng)共性:功...
要是三軸的簡單cad做好圖存為dxf文件直接加載就可以了,5軸的麻煩點,5軸主要有刀口坡向,直接cad作圖存dxf在用水切割軟件改下程序保存程序就編好了
匯編執(zhí)行指令是機器指令的符號化表示,其操作碼用記憶符表示,地址碼直接用標號、變量名字、常數(shù)等表示。匯編執(zhí)行指令經(jīng)匯編程序翻譯為機器指令,二者之間基本上保持一一對應(yīng)的關(guān)系。匯編偽指令又稱作匯編指示,用于向匯編程序提供用戶自定義的符號、數(shù)據(jù)的類型、數(shù)據(jù)空間的長度,以及目標程序的格式、存放位置等提示性信息,其作用是指示匯編程序如何進行匯編。使用匯編語言編寫的源代碼,需要通過使用相應(yīng)的匯編程序?qū)⑺鼈冝D(zhuǎn)換成可執(zhí)行的機器代碼。這一過程被稱為匯編過程。
許多匯編程序可以識別代表地址和常量的標簽(label)和符號(symbols),這樣就可以用字符來代表操作數(shù)而無需采取寫死的方式。普遍地說,特定的匯編語言和特定的機器語言指令集是一一對應(yīng)的。
許多匯編程序為程序開發(fā)、匯編控制、輔助調(diào)試提供了額外的支持機制。有的匯編語言編程工具經(jīng)常會提供宏,它們也被稱為宏匯編器。
匯編語言不像其他大多數(shù)的程序設(shè)計語言一樣被廣泛用于程序設(shè)計;在今天的實際應(yīng)用中,它通常被應(yīng)用在底層硬件操作和高要求的程序優(yōu)化的場合。驅(qū)動程序、嵌入式操作系統(tǒng)和實時運行程序都需要匯編語言。
工作過程:輸入?yún)R編語言源程序。檢查語法的正確性,如果正確,則將源程序翻譯成等價的二進制或浮動二進制的機器語言程序,并根據(jù)用戶的需要輸出源程序和目標程序的對照清單;如果語法有錯,則輸出錯誤信息,指明錯誤的部位、類型和編號。最后,對已匯編出的目標程序進行善后處理。
格式:pdf
大?。?span id="dvhvbvb" class="single-tag-height">367KB
頁數(shù): 6頁
評分: 4.7
1 電子科技大學中山學院學生實驗報告 院別:電子信息學院 課程名稱:單片機綜合實驗 實驗名稱 匯編程序設(shè)計二 實驗時間 成績 批改時間 報 告 內(nèi) 容 一、實驗?zāi)康暮腿蝿?wù) 1、掌握分支、循環(huán)結(jié)構(gòu)程序以及子程序的設(shè)計方法。 2、進一步熟悉 Keil C51 集成開發(fā)環(huán)境。 二、實驗原理簡介 在匯編語言程序設(shè)計中,普遍采用結(jié)構(gòu)化程序設(shè)計方法。因為任何復(fù)雜的程序都可由 順序結(jié)構(gòu)、分支結(jié)構(gòu)及循環(huán)結(jié)構(gòu)等構(gòu)成。每種結(jié)構(gòu)只有一個入口和出口,整個程序也只有 一個入口和出口。 結(jié)構(gòu)化程序設(shè)計的特點是程序的結(jié)構(gòu)清晰、 易于讀寫和驗證、 可靠性高。 結(jié)構(gòu)化程序設(shè)計的基本方法有順序結(jié)構(gòu)、分支結(jié)構(gòu)、循環(huán)結(jié)構(gòu)、子程序。 本實驗在實驗一基礎(chǔ)上,要求掌握分支、循環(huán)結(jié)構(gòu)程序以及子程序的設(shè)計方法。 三、實驗內(nèi)容和步驟 1、分支程序:是根據(jù)要求無條件或有條件地改變程序執(zhí)行流向。編寫分支程序主要在于 正確使用轉(zhuǎn)移指令。 設(shè)變量
格式:pdf
大?。?span id="55zrzv5" class="single-tag-height">367KB
頁數(shù): 未知
評分: 4.7
介紹了CASIOfx-4000P可編程計算器的應(yīng)用,設(shè)計相應(yīng)坐標計算程序,提高工作效率。
1. 匯編程序;裝配器
電器電子詞匯英語翻譯A-14(英語翻譯,在...匯編程序;裝配器 assembler
2. 裝配工
建設(shè)工程專用詞匯(3)-生命經(jīng)緯assembler 裝配工
3.組譯器
計算機與網(wǎng)絡(luò)行業(yè)術(shù)語assembler 組譯器
第1章 單片機實驗開發(fā)板及開發(fā)軟件簡介
第2章 指令系統(tǒng)實驗
實驗1 熟悉軟件開發(fā)流程
實驗2 匯編程序設(shè)計實驗一
實驗3 匯編程序設(shè)計實驗二
第3章 單片機應(yīng)用實驗
實驗4 流水燈實驗
實驗5 定時/計數(shù)器實驗
實驗6 中斷系統(tǒng)實驗
實驗7 串行口通信實驗
實驗8 學習使用C語言進行單片機程序設(shè)計
實驗9 鍵盤顯示程序
第4章 單片機綜合實驗
實驗10 編寫電子鐘程序(一)
實驗11 編寫電子鐘程序(二)
讓我們先來看看一個最簡單的Win32匯編程序:
.386
.model flat, stdcall
option casemap :none ; case sensitive
include windows.inc
include kernel32.inc
includelib kernel32.lib
.data
szCaption db 'Win32匯編例子',0
szText db 'Win32匯編,Simple and powerful!',0
.code
start:
invoke MessageBox,NULL,addr szText,addr szCaption,MB_OK
invoke ExitProcess,NULL
end start
這就是一個能執(zhí)行的最簡單的Win32匯編程序,下面我簡單地介紹一下各部分的作用:
這條語句和Dos下匯編是一樣的,是告訴編譯器我們要用到80386的指令集,因為32位匯編程序要用到32位的寄存器如eax,ebx等,所以這一句是必須的,當然,你也可以用.486,.586等,當用到特權(quán)指令時,還可以用 .386p,.486p等等。
.model告訴編譯器程序的模式,編過Dos匯編的人可能知道在Dos程序的模式有tiny,small,...huge 等,它指定了程序內(nèi)存尋址模式,在huge等模式下,內(nèi)存尋址和子程序調(diào)用將用Far的格式,但在Win32匯編中,你只能使用一個模式即 flat 模式,因為對Win32程序來說,內(nèi)存是連續(xù)的一個4GB的段,無所謂小或大的模式。而stdcall 告訴編譯器參數(shù)的傳遞方式,在調(diào)用子程序時,參數(shù)是通過堆棧傳遞的,參數(shù)的傳遞方式有三種,stdcall,c 和 pascal,stdcall 指定了參數(shù)是從右到左壓入堆棧的,比如說對一個Windows API 如 MessageBox,在手冊中是如此定義的:
int MessageBox(
HWND hWnd, // handle of owner window
LPCTSTR lpText, // address of text in message box
LPCTSTR lpCaption, // address of title of message box
UINT uType // style of message box
);
那么在匯編中我們就可以這樣調(diào)用它:
push uType
push lpCaption
push lpText
push hWnd
call MessageBox
大家要注意最右面的參數(shù)是最后一個進堆棧的,當然,我們不必這樣麻煩的調(diào)用一個 API,因為Masm中的一個宏語句不但幫助我們完成了所有的壓棧操作,還幫我們檢查參數(shù)的個數(shù)是否正確,那就是 invoke 語句,我們可以把上面的語句換成 invoke MessageBox,hWnd,lpText,lpCaption,uType 就行了。如本程序中代入實際參數(shù)就成了 invoke MessageBox,NULL,addr szText,addr szCaption,MB_OK。
include 語句包含了一些系統(tǒng)的定義和API函說明,其中所有的Windows 數(shù)據(jù)結(jié)構(gòu)定義和常量定義包含在 windows.inc 中,而其他 API函數(shù)的說明包含在 xxx.inc 中, 如查 Microsoft Win32 Programmer's Reference 知道 ExitProcess包含在kernel32.dll 中,那么我們就要在程序中包括 include kernel32.inc 和 includelib kernel32.lib語句,否則在編譯時會出現(xiàn) API 函數(shù)未定義的錯誤。而 MessageBox 在 user32.dll 中,那么我們就要在程序中包括 include user32.inc 和 includelib user32.lib語句
指明了接下來是數(shù)據(jù)段,.data 定義了預(yù)定義的變量,.data?定義了未初始化的變量,兩者的不同之處是 .data? 定義的變量并不占用 .exe 文件的大小,而是在程序執(zhí)行時動態(tài)分配,所以開始是不指定初始值的數(shù)據(jù)可以放在 .data? 段中,如一個1K大小的緩沖區(qū),放在 .data?中,程序?qū)⒉粫黾右粋€字節(jié)。
指明了接下來是代碼段,我們的所有代碼都放在這里。最后的一句 start 語句指定了程序開始執(zhí)行的語句。程序中的 ExitProcess 是一個標準的 Win32 API,對應(yīng) Dos匯編中的 int 20h 或 mov ah,4ch/int 21h,也就是程序退出。而 MessageBox 也是一個標準的 API,功能是在屏幕上顯示一個消息框,具體的參數(shù)上面已經(jīng)解釋過了還有要注意的是 invoke MessageBox,NULL,addr szText,addr szCaption,MB_OK 語句中, MB_OK 和 NULL 已經(jīng)預(yù)定義在 Windows.inc 中。
不管在Dos下編程還是在Windows下編程,我們總是要用到除了可執(zhí)行文件外的很多其他數(shù)據(jù),如聲音數(shù)據(jù),圖形數(shù)據(jù),文本等等,在Dos下編程,我們可以自己定義這些文件的格式,但這樣一來就造成了很多資源共享的問題,大家可能還記的Dos下的很多游戲,它們的圖形都是按自己的格式存放的,你無法用標準的看圖軟件來看。也無法把它另存為其他格式。雖然在Win32編程中,我們?nèi)匀豢梢赃@樣做,但Win32編程給了我們一個方案 ---- 就是格式統(tǒng)一的資源文件,把字符串、圖形、對話框包括上面的按鈕,文本等定義到一個資源文件中,就可以方便的在不同的文件中使用它,最重要的是,如果我們用自己的文件格式,使用時就要涉及到這些文件的讀寫操作,比較復(fù)雜,但使用資源文件時,Windows提供了一系列的API來裝入資源。非常方便?,F(xiàn)在,讓我們來看一個很簡單的資源文件的源文件,它的擴展名是 .rc,當它用資源編譯器編譯以后產(chǎn)生 .res 文件就可以在 link的時候連入.exe 文件中:
#include <Resource.h>
#define DLG_MAIN 1
DLG_MAIN DIALOGEX 0, 0, 236, 185
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "對話框模板"
FONT 9, "宋體"
BEGIN
DEFPUSHBUTTON "退出",IDOK,177,163,50,14
CONTROL "",-1,"Static",SS_ETCHEDHORZ,7,155,222,1
END
現(xiàn)在我簡單解釋一下 .rc文件的語法:
#include <resource.h> -- resource.h文件包括資源文件的一些常量定義,如下面的 WS_POPUP,WS_VISIBLE 等窗口的風格等等
#define DLG_MAIN 1 -- 類似于 .asm 文件的 equ 語句,和匯編源程序一樣,這些定義是為了程序的可讀性。
DLG_MAIN DIALOGEX 0,0,236,185
Windows的.rc文件可以定義 BITMAP(位圖),CURSOR(光標),ICON(圖標),ACCELERATORS(加速鍵),DIALOG(對話框),MENU(菜單),STRINGTABLE(字符串表),RCDATA(自定義資源)等8種資源,詳細的描述可以參考有關(guān)MFC的書籍,在Win32ASM中的資源編譯器的語法中,一般格式是這些資源的定義方法是:
位圖定義: nameID BITMAP [load-mem] filename
光標定義: nameID CURSOR [load-mem] filename
圖標定義: nameID ICON [load-mem] filename
加速鍵定義:
acctablename ACCELERATORS [optional-statements]
BEGIN event, idvalue, [type] [options]
. . .
END
等等,具體的定義和參數(shù)可以參考 Masm32v5 中的 Rc.hlp 幫助文件。(可以在編程工具中下載),我們可以用資源編輯器來所見即所得地編輯資源,也可以在文本編輯器中用上面這些語句自己定義資源。
在程序中,要使用資源之前必須先裝如內(nèi)存,Windows定義了一系列的API來裝入資源,如 LoadMenu,LoadString,LoadBitmap 等等,如 LoadBitmap 的定義:
HBITMAP LoadBitmap(
HINSTANCE hInstance, // handle of application instance
LPCTSTR lpBitmapName // address of bitmap resource name
);
這些Load函數(shù)的返回值是一個句柄,調(diào)用參數(shù)中一般至少為兩項: hInstance 和 ResouceName,這個 ResouceName(如BitmapName,MenuName)就是在資源文件中的 #define 指定的值,如果你用 #define MY_ICON 10/ MY_ICON ICON "Main.ico" 定義了一個圖標,那么在程序中要使用 Main.ico 圖標就可以用 LoadIcon(hInstance,10) 來裝入已經(jīng)定義為10號的圖標文件。另一個參數(shù) hInstance 是執(zhí)行文件的句柄,它對應(yīng)資源所在的文件名,你可以在程序開始執(zhí)行時用 invoke GetModuleHandle,NULL 獲得 hInstance。另外一些資源并不是顯式地裝入的,如對話框資源,它是在建立對話框的函數(shù)中由Windows自己裝入的,如下面例子中的 invoke DialogBoxParam,hInstance,DLG_MAIN,NULL,offset _ProcDlgMain,0 ,是在屏幕上顯示一個資源文件中已經(jīng)定義好了的對話框,就并不存在 LoadDialogBox 之類的API來先裝入對話框。