工作過程:輸入?yún)R編語言源程序。檢查語法的正確性,如果正確,則將源程序翻譯成等價(jià)的二進(jìn)制或浮動(dòng)二進(jìn)制的機(jī)器語言程序,并根據(jù)用戶的需要輸出源程序和目標(biāo)程序的對(duì)照清單;如果語法有錯(cuò),則輸出錯(cuò)誤信息,指明錯(cuò)誤的部位、類型和編號(hào)。最后,對(duì)已匯編出的目標(biāo)程序進(jìn)行善后處理。
由于匯編語言的指令與機(jī)器語言的指令大體上保持一一對(duì)應(yīng)的關(guān)系,匯編算法采用的基本策略是簡單的。通常采用兩遍掃描源程序的算法。第一遍掃描源程序根據(jù)符號(hào)的定義和使用,收集符號(hào)的有關(guān)信息到符號(hào)表中;第二遍利用第一遍收集的符號(hào)信息,將源程序中的符號(hào)化指令逐條翻譯為相應(yīng)的機(jī)器指令。具體的翻譯工作可歸納為如下幾項(xiàng):用機(jī)器操作碼代替符號(hào)操作;用數(shù)值地址代替符號(hào)地址;將常數(shù)翻譯為機(jī)器的內(nèi)部表示;分配指令和數(shù)據(jù)所需的存儲(chǔ)單元。除了上述的翻譯工作外,匯編程序還要考慮:處理偽指令,收集程序中提供的匯編指示信息,并執(zhí)行相應(yīng)的功能。為用戶提供信息和源程序清單。匯編的善后處理工作,隨目標(biāo)語言的類型不同而有所不同。有的直接啟動(dòng)執(zhí)行,有的先進(jìn)行連接裝配。如果具有條件匯編、宏匯編或高級(jí)匯編功能時(shí),也應(yīng)進(jìn)行相應(yīng)的翻譯處理。
假定匯編語言中規(guī)定符號(hào)的應(yīng)用一定出現(xiàn)在定義之后,則兩遍算法可容易地合并成一遍算法加以實(shí)現(xiàn)。
簡單匯編程序 又稱"裝入并執(zhí)行"式匯編程序。由于簡便而得到廣泛使用。這種匯編程序的特點(diǎn)是匯編后的機(jī)器語言程序直接放在內(nèi)存之中準(zhǔn)備執(zhí)行。目標(biāo)程序所占據(jù)的存儲(chǔ)位置是在匯編時(shí)固定的,并且以后不能改變,所以這種工作方式不能將多個(gè)獨(dú)立匯編的子程序合并為一個(gè)完整的程序,而且只能調(diào)用位置與目標(biāo)程序不沖突的程序庫中的子程序。
模塊匯編程序 為適應(yīng)模塊程序設(shè)計(jì)方法而研制的。它除了克服簡單匯編程序的缺點(diǎn)之外,還提供并行設(shè)計(jì)、編碼和調(diào)試不同程序模塊的能力,而且更改程序時(shí)只更改有關(guān)的模塊即可。每個(gè)匯編后的程序模塊稱為目標(biāo)模塊,多個(gè)目標(biāo)模塊經(jīng)連接裝配程序組合成一個(gè)完整的可執(zhí)行的程序。
條件匯編程序 主要特點(diǎn)是具有選擇匯編某些程序段的能力。它適用于編寫選擇性較大的程序或程序包,以便根據(jù)用戶的需要和設(shè)備的配置情況剪裁、編制適當(dāng)?shù)能浖_@種匯編語言通常要引入"條件轉(zhuǎn)移"、"轉(zhuǎn)移"等匯編指示,以便根據(jù)用戶指定的匯編條件有選擇地匯編某些程序段或控制匯編程序的加工路徑。
宏匯編程序 主要特點(diǎn)是在匯編程序中增加宏加工功能。它允許用戶方便地定義和使用宏指令,適用于程序中多處出現(xiàn)、具有一定格式、可以通過少數(shù)參數(shù)調(diào)節(jié)改變的程序段落的場合。采用這種方法不僅減少程序的長度,增加可讀性,而且程序段落的格式需要改變時(shí),只須改動(dòng)定義處,而不必改動(dòng)每一使用處。
高級(jí)匯編程序 采用高級(jí)程序設(shè)計(jì)語言的控制語句結(jié)構(gòu)的匯編程序。它不僅保持匯編語言表達(dá)能力強(qiáng)、程序運(yùn)行效率高的優(yōu)點(diǎn),而且能充分吸收高級(jí)語言書寫簡單和易讀的長處。這是由于高級(jí)匯編程序允許用戶使用高級(jí)程序設(shè)計(jì)語言的控制語句(如條件語句、循環(huán)語句、函數(shù)和過程)編寫程序中的控制部分,而且還允許用戶直接利用匯編語言直接控制存儲(chǔ)分配、存取寄存器硬件,描述高級(jí)語言難于表達(dá)的算法。第一個(gè)高級(jí)匯編程序是N.沃思為IBM360系統(tǒng)研制的PL/360語言匯編程序,其特點(diǎn)是程序的控制部分采用高級(jí)語言的控制語句編寫,而數(shù)據(jù)加工部分采用IBM360匯編指令編寫。自此以后,又相繼出現(xiàn)了類似ALGOL的匯編程序,類似FORTRAN的匯編程序FAT。
PLC可編程序控制器,整個(gè)工作過程分五個(gè)階段哪五個(gè)階段
PLC 五個(gè)工作過程階段如下:1、(通過輸入模塊和網(wǎng)絡(luò)接口)、接收信號(hào)(或數(shù)據(jù));2、(按工藝要求預(yù)先編制好的程序)處理數(shù)據(jù);3、(通過輸入模塊和網(wǎng)絡(luò)接口)輸出、傳送信號(hào)(或數(shù)據(jù));4、(通過內(nèi)部程序...
關(guān)閉進(jìn)水閥,但有一部分進(jìn)水仍從兩側(cè)常開的方孔流入濾池,由V型槽一側(cè)流向排水渠一側(cè),形成表面掃洗。而后開啟排水閥將池面水從排水槽中排出直至濾池水面與V型槽頂相平,反沖洗過程常采用“氣沖→氣水同時(shí)反沖→水...
起動(dòng)機(jī)的工作原理 汽車起動(dòng)機(jī)的控制裝置包括電磁開關(guān)、起動(dòng)繼電器和點(diǎn)火起動(dòng)開關(guān)燈部件,其中電磁開關(guān)于起動(dòng)機(jī)制作在一起。 一、電磁開關(guān) 1.電磁開關(guān)結(jié)構(gòu)特點(diǎn) 電磁開關(guān)主要由電磁鐵機(jī)構(gòu)和電動(dòng)機(jī)開關(guān)兩部分組成...
匯編執(zhí)行指令是機(jī)器指令的符號(hào)化表示,其操作碼用記憶符表示,地址碼直接用標(biāo)號(hào)、變量名字、常數(shù)等表示。匯編執(zhí)行指令經(jīng)匯編程序翻譯為機(jī)器指令,二者之間基本上保持一一對(duì)應(yīng)的關(guān)系。匯編偽指令又稱作匯編指示,用于向匯編程序提供用戶自定義的符號(hào)、數(shù)據(jù)的類型、數(shù)據(jù)空間的長度,以及目標(biāo)程序的格式、存放位置等提示性信息,其作用是指示匯編程序如何進(jìn)行匯編。使用匯編語言編寫的源代碼,需要通過使用相應(yīng)的匯編程序?qū)⑺鼈冝D(zhuǎn)換成可執(zhí)行的機(jī)器代碼。這一過程被稱為匯編過程。
許多匯編程序可以識(shí)別代表地址和常量的標(biāo)簽(label)和符號(hào)(symbols),這樣就可以用字符來代表操作數(shù)而無需采取寫死的方式。普遍地說,特定的匯編語言和特定的機(jī)器語言指令集是一一對(duì)應(yīng)的。
許多匯編程序?yàn)槌绦蜷_發(fā)、匯編控制、輔助調(diào)試提供了額外的支持機(jī)制。有的匯編語言編程工具經(jīng)常會(huì)提供宏,它們也被稱為宏匯編器。
匯編語言不像其他大多數(shù)的程序設(shè)計(jì)語言一樣被廣泛用于程序設(shè)計(jì);在今天的實(shí)際應(yīng)用中,它通常被應(yīng)用在底層硬件操作和高要求的程序優(yōu)化的場合。驅(qū)動(dòng)程序、嵌入式操作系統(tǒng)和實(shí)時(shí)運(yùn)行程序都需要匯編語言。
【漢語拼音】huibian chengxu
【中文詞條】匯編程序
【外文詞條】assembler
格式:pdf
大?。?span id="nt5nzn5" class="single-tag-height">367KB
頁數(shù): 6頁
評(píng)分: 4.7
1 電子科技大學(xué)中山學(xué)院學(xué)生實(shí)驗(yàn)報(bào)告 院別:電子信息學(xué)院 課程名稱:單片機(jī)綜合實(shí)驗(yàn) 實(shí)驗(yàn)名稱 匯編程序設(shè)計(jì)二 實(shí)驗(yàn)時(shí)間 成績 批改時(shí)間 報(bào) 告 內(nèi) 容 一、實(shí)驗(yàn)?zāi)康暮腿蝿?wù) 1、掌握分支、循環(huán)結(jié)構(gòu)程序以及子程序的設(shè)計(jì)方法。 2、進(jìn)一步熟悉 Keil C51 集成開發(fā)環(huán)境。 二、實(shí)驗(yàn)原理簡介 在匯編語言程序設(shè)計(jì)中,普遍采用結(jié)構(gòu)化程序設(shè)計(jì)方法。因?yàn)槿魏螐?fù)雜的程序都可由 順序結(jié)構(gòu)、分支結(jié)構(gòu)及循環(huán)結(jié)構(gòu)等構(gòu)成。每種結(jié)構(gòu)只有一個(gè)入口和出口,整個(gè)程序也只有 一個(gè)入口和出口。 結(jié)構(gòu)化程序設(shè)計(jì)的特點(diǎn)是程序的結(jié)構(gòu)清晰、 易于讀寫和驗(yàn)證、 可靠性高。 結(jié)構(gòu)化程序設(shè)計(jì)的基本方法有順序結(jié)構(gòu)、分支結(jié)構(gòu)、循環(huán)結(jié)構(gòu)、子程序。 本實(shí)驗(yàn)在實(shí)驗(yàn)一基礎(chǔ)上,要求掌握分支、循環(huán)結(jié)構(gòu)程序以及子程序的設(shè)計(jì)方法。 三、實(shí)驗(yàn)內(nèi)容和步驟 1、分支程序:是根據(jù)要求無條件或有條件地改變程序執(zhí)行流向。編寫分支程序主要在于 正確使用轉(zhuǎn)移指令。 設(shè)變量
格式:pdf
大?。?span id="vlhl55t" class="single-tag-height">367KB
頁數(shù): 未知
評(píng)分: 4.7
在\"工學(xué)結(jié)合、校企合作\"人才培養(yǎng)模式下,分析了基于工作過程的項(xiàng)目化教學(xué)的實(shí)施條件,闡述了\"數(shù)控編程與加工\"在課程內(nèi)容、教學(xué)情境、教學(xué)方法和手段等方面進(jìn)行項(xiàng)目化教學(xué)改革的實(shí)踐過程,分析了教學(xué)改革的實(shí)施效果以及校企合作在項(xiàng)目化教學(xué)改革中的作用。
1. 匯編程序;裝配器
電器電子詞匯英語翻譯A-14(英語翻譯,在...匯編程序;裝配器 assembler
2. 裝配工
建設(shè)工程專用詞匯(3)-生命經(jīng)緯assembler 裝配工
3.組譯器
計(jì)算機(jī)與網(wǎng)絡(luò)行業(yè)術(shù)語assembler 組譯器
第1章 單片機(jī)實(shí)驗(yàn)開發(fā)板及開發(fā)軟件簡介
第2章 指令系統(tǒng)實(shí)驗(yàn)
實(shí)驗(yàn)1 熟悉軟件開發(fā)流程
實(shí)驗(yàn)2 匯編程序設(shè)計(jì)實(shí)驗(yàn)一
實(shí)驗(yàn)3 匯編程序設(shè)計(jì)實(shí)驗(yàn)二
第3章 單片機(jī)應(yīng)用實(shí)驗(yàn)
實(shí)驗(yàn)4 流水燈實(shí)驗(yàn)
實(shí)驗(yàn)5 定時(shí)/計(jì)數(shù)器實(shí)驗(yàn)
實(shí)驗(yàn)6 中斷系統(tǒng)實(shí)驗(yàn)
實(shí)驗(yàn)7 串行口通信實(shí)驗(yàn)
實(shí)驗(yàn)8 學(xué)習(xí)使用C語言進(jìn)行單片機(jī)程序設(shè)計(jì)
實(shí)驗(yàn)9 鍵盤顯示程序
第4章 單片機(jī)綜合實(shí)驗(yàn)
實(shí)驗(yàn)10 編寫電子鐘程序(一)
實(shí)驗(yàn)11 編寫電子鐘程序(二)
讓我們先來看看一個(gè)最簡單的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
這就是一個(gè)能執(zhí)行的最簡單的Win32匯編程序,下面我簡單地介紹一下各部分的作用:
這條語句和Dos下匯編是一樣的,是告訴編譯器我們要用到80386的指令集,因?yàn)?2位匯編程序要用到32位的寄存器如eax,ebx等,所以這一句是必須的,當(dāng)然,你也可以用.486,.586等,當(dāng)用到特權(quán)指令時(shí),還可以用 .386p,.486p等等。
.model告訴編譯器程序的模式,編過Dos匯編的人可能知道在Dos程序的模式有tiny,small,...huge 等,它指定了程序內(nèi)存尋址模式,在huge等模式下,內(nèi)存尋址和子程序調(diào)用將用Far的格式,但在Win32匯編中,你只能使用一個(gè)模式即 flat 模式,因?yàn)閷?duì)Win32程序來說,內(nèi)存是連續(xù)的一個(gè)4GB的段,無所謂小或大的模式。而stdcall 告訴編譯器參數(shù)的傳遞方式,在調(diào)用子程序時(shí),參數(shù)是通過堆棧傳遞的,參數(shù)的傳遞方式有三種,stdcall,c 和 pascal,stdcall 指定了參數(shù)是從右到左壓入堆棧的,比如說對(duì)一個(gè)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ù)是最后一個(gè)進(jìn)堆棧的,當(dāng)然,我們不必這樣麻煩的調(diào)用一個(gè) API,因?yàn)镸asm中的一個(gè)宏語句不但幫助我們完成了所有的壓棧操作,還幫我們檢查參數(shù)的個(gè)數(shù)是否正確,那就是 invoke 語句,我們可以把上面的語句換成 invoke MessageBox,hWnd,lpText,lpCaption,uType 就行了。如本程序中代入實(shí)際參數(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語句,否則在編譯時(shí)會(huì)出現(xiàn) API 函數(shù)未定義的錯(cuò)誤。而 MessageBox 在 user32.dll 中,那么我們就要在程序中包括 include user32.inc 和 includelib user32.lib語句
指明了接下來是數(shù)據(jù)段,.data 定義了預(yù)定義的變量,.data?定義了未初始化的變量,兩者的不同之處是 .data? 定義的變量并不占用 .exe 文件的大小,而是在程序執(zhí)行時(shí)動(dòng)態(tài)分配,所以開始是不指定初始值的數(shù)據(jù)可以放在 .data? 段中,如一個(gè)1K大小的緩沖區(qū),放在 .data?中,程序?qū)⒉粫?huì)增加一個(gè)字節(jié)。
指明了接下來是代碼段,我們的所有代碼都放在這里。最后的一句 start 語句指定了程序開始執(zhí)行的語句。程序中的 ExitProcess 是一個(gè)標(biāo)準(zhǔn)的 Win32 API,對(duì)應(yīng) Dos匯編中的 int 20h 或 mov ah,4ch/int 21h,也就是程序退出。而 MessageBox 也是一個(gè)標(biāo)準(zhǔn)的 API,功能是在屏幕上顯示一個(gè)消息框,具體的參數(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下的很多游戲,它們的圖形都是按自己的格式存放的,你無法用標(biāo)準(zhǔn)的看圖軟件來看。也無法把它另存為其他格式。雖然在Win32編程中,我們?nèi)匀豢梢赃@樣做,但Win32編程給了我們一個(gè)方案 ---- 就是格式統(tǒng)一的資源文件,把字符串、圖形、對(duì)話框包括上面的按鈕,文本等定義到一個(gè)資源文件中,就可以方便的在不同的文件中使用它,最重要的是,如果我們用自己的文件格式,使用時(shí)就要涉及到這些文件的讀寫操作,比較復(fù)雜,但使用資源文件時(shí),Windows提供了一系列的API來裝入資源。非常方便?,F(xiàn)在,讓我們來看一個(gè)很簡單的資源文件的源文件,它的擴(kuò)展名是 .rc,當(dāng)它用資源編譯器編譯以后產(chǎn)生 .res 文件就可以在 link的時(shí)候連入.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 "對(duì)話框模板"
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 等窗口的風(fēng)格等等
#define DLG_MAIN 1 -- 類似于 .asm 文件的 equ 語句,和匯編源程序一樣,這些定義是為了程序的可讀性。
DLG_MAIN DIALOGEX 0,0,236,185
Windows的.rc文件可以定義 BITMAP(位圖),CURSOR(光標(biāo)),ICON(圖標(biāo)),ACCELERATORS(加速鍵),DIALOG(對(duì)話框),MENU(菜單),STRINGTABLE(字符串表),RCDATA(自定義資源)等8種資源,詳細(xì)的描述可以參考有關(guān)MFC的書籍,在Win32ASM中的資源編譯器的語法中,一般格式是這些資源的定義方法是:
位圖定義: nameID BITMAP [load-mem] filename
光標(biāo)定義: nameID CURSOR [load-mem] filename
圖標(biāo)定義: 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ù)的返回值是一個(gè)句柄,調(diào)用參數(shù)中一般至少為兩項(xiàng): hInstance 和 ResouceName,這個(gè) ResouceName(如BitmapName,MenuName)就是在資源文件中的 #define 指定的值,如果你用 #define MY_ICON 10/ MY_ICON ICON "Main.ico" 定義了一個(gè)圖標(biāo),那么在程序中要使用 Main.ico 圖標(biāo)就可以用 LoadIcon(hInstance,10) 來裝入已經(jīng)定義為10號(hào)的圖標(biāo)文件。另一個(gè)參數(shù) hInstance 是執(zhí)行文件的句柄,它對(duì)應(yīng)資源所在的文件名,你可以在程序開始執(zhí)行時(shí)用 invoke GetModuleHandle,NULL 獲得 hInstance。另外一些資源并不是顯式地裝入的,如對(duì)話框資源,它是在建立對(duì)話框的函數(shù)中由Windows自己裝入的,如下面例子中的 invoke DialogBoxParam,hInstance,DLG_MAIN,NULL,offset _ProcDlgMain,0 ,是在屏幕上顯示一個(gè)資源文件中已經(jīng)定義好了的對(duì)話框,就并不存在 LoadDialogBox 之類的API來先裝入對(duì)話框。