彙編語言被開發用來爲機器級代碼指令提供助記符或符號。彙編語言程序是由助記符組成的,因此應該翻譯成機器碼。負責此轉換的程序稱爲彙編程序。彙編語言通常被稱爲低級語言,因爲它直接與CPU的內部結構一起工作。要用彙編語言編程,程式設計師必須知道CPU的所有寄存器。
不同的程式語言如C、C++、java和各種其他語言被稱爲高級語言,因爲它們不處理CPU的內部細節。相反,彙編程序用於將彙編語言程序翻譯成機器代碼(有時也稱爲目標代碼或操作代碼)。類似地,編譯器將高級語言翻譯成機器代碼。例如,要用C語言編寫程序,必須使用C編譯器將程序翻譯成機器語言。
Structure of Assembly Language
彙編語言程序是一系列語句,它們要麼是彙編語言指令,如ADD和MOV,要麼是稱爲指令的語句。
指令告訴CPU該做什麼,而指令(也稱爲僞指令)則向彙編程序發出指令。例如,ADD和MOV指令是CPU運行的命令,而ORG和END指令是彙編程序指令。當使用ORG指令時,彙編程序將操作碼放在內存位置0,而END表示原始碼的末尾。一個程序語言指令由以下四個欄位組成;
[ label: ] mnemonics [ operands ] [;comment ]
方括號([])表示該欄位是可選的。
標籤欄位允許程序按名稱引用一行代碼。標籤欄位不能超過一定數量的字符。
助記符和操作數欄位一起執行程序的實際工作並完成任務。像ADD A,C&MOV C,#68這樣的語句,其中ADD和MOV是助記符,它們產生操作碼;「A,C」和「C,#68」是操作數。這兩個欄位可以包含指令。指令不生成機器代碼,只由彙編程序使用,而指令被轉換成機器代碼供CPU執行。
1.0000 ORG 0H ;start (origin) at location 0 2 0000 7D25 MOV R5,#25H ;load 25H into R5 3.0002 7F34 MOV R7,#34H ;load 34H into R7 4.0004 7400 MOV A,#0 ;load 0 into A 5.0006 2D ADD A,R5 ;add contents of R5 to A 6.0007 2F ADD A,R7 ;add contents of R7 to A 7.0008 2412 ADD A,#12H ;add to A value 12 H 8.000A 80FE HERE: SJMP HERE ;stay in this loop 9.000C END ;end of asm source file
注釋欄位以分號開頭,分號是注釋指示器。
注意程序中的標籤「HERE」。任何引用指令的標籤後面都應該跟一個冒號。
Assembling and Running an 8051 Program
這裡我們將討論彙編語言的基本形式。創建、組裝和運行彙編語言程序的步驟如下所示;
首先,我們使用編輯器輸入一個類似於上述程序的程序。所有Microsoft作業系統附帶的MS-DOS編輯程序等編輯器可用於創建或編輯程序。編輯器必須能夠生成一個ASCII文件。源文件的「asm」擴展名由彙編程序在下一步中使用。
「asm」源文件包含在步驟1中創建的程序代碼。它被輸入到一個8051彙編程序。然後,彙編程序將彙編語言指令轉換爲機器代碼指令,並生成一個.obj文件(對象文件)和一個.lst文件(列表文件)。它也被稱爲源文件,這就是爲什麼一些彙編程序要求此文件具有「src」擴展名。「lst」文件是可選的。它對程序非常有用,因爲它列出了所有操作碼和地址以及彙編程序檢測到的錯誤。
彙編程序需要第三個步驟,稱爲連結。連結程序接受一個或多個對象文件,並生成擴展名爲「abs」的絕對對象文件。
接下來,「abs」文件被輸入到一個名爲「OH」(object to hex converter)的程序中,該程序創建一個擴展名爲「hex」的文件,該文件可以刻錄到ROM中。
Data Type
8051微控制器包含8位的單一數據類型,並且每個寄存器也具有8位大小。程式設計師必須分解大於8位的數據(00到FFH,或者小數點到255),這樣CPU才能處理它。
DB (Define Byte)
DB指令是彙編程序中使用最廣泛的數據指令。它用於定義8位數據。它還可以用於定義十進位、二進位、十六進位或ASCII格式的數據。對於decimal,小數後面的「D」是可選的,但對於「B」(二進位)和「Hl」(十六進位)是必需的。
要表示ASCII,只需將字符放在引號中(「像這樣」)。彙編程序自動爲數字/字符生成ASCII碼。DB指令是唯一可用於定義大於兩個字符的ASCII字符串的指令;因此,它應用於所有ASCII數據定義。下面給出了DB的一些例子;
ORG 500H DATA1: DB 28 ;DECIMAL (1C in hex) DATA2: DB 00110101B ;BINARY (35 in hex) DATA3: DB 39H ;HEX ORG 510H DATA4: DB "2591" ;ASCII NUMBERS ORG 520H DATA6: DA "MY NAME IS Michael" ;ASCII CHARACTERS
可以在ASCII字符串周圍使用單引號或雙引號。DB還用於在字節大小的塊中分配內存。
Assembler Directives
8051的一些指令如下所示;
ORG(origin)−origin指令用於指示地址的開頭。它接受十六進位或十進位格式的數字。如果在數字後面提供H,則該數字被視爲十六進位,否則爲十進位。彙編程序將十進位數轉換爲十六進位數。
eq(equal)−它用於定義一個常量而不占用內存位置。EQU將一個常量值與一個數據標籤相關聯,以便該標籤出現在程序中,其常量值將替換該標籤。在執行指令「MOV R3,#COUNT」時,寄存器R3將加載值25(注意#符號)。使用eq的優點是程式設計師可以更改一次,彙編程序將更改它的所有出現;程式設計師不必搜索整個程序。
END指令−它指示源(asm)文件的結尾。END指令是程序的最後一行;彙編程序將忽略END指令之後的任何內容。
Labels in Assembly Language
彙編語言中的所有標籤必須遵循下面給出的規則;
每個標籤名稱必須唯一。彙編語言程序設計中用於標籤的名稱包括大小寫字母、數字0到9以及特殊字符,如問號(?),句點(.),按匯率@,下劃線(\u)和美元($)。
第一個字符應該是字母字符,不能是數字。
保留字不能用作程序中的標籤。例如,ADD和MOV字是保留字,因爲它們是指令助記符。