




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第5章 匯編語言程序設計教學目的:教學目的:熟悉80C51系列單片機的匯編語言,能夠熟練編寫匯編語言源程序。教學重點:教學重點:常用匯編語言程序設計方法。教學難點:教學難點: 分支程序、散轉程序與子程序的設計 5. 1 概述概述5.1.1 程序設計語言 1. 機器語言 2. 匯編語言3. 高級語言圖51 源程序、匯編程序、目的程序之間關系示意圖 5.1.2 5.1.2 匯編語言規范匯編語言規范1. 1. 匯編語句格式匯編語句格式 標號:標號:指令助記符指令助記符 操作數操作數;注釋;注釋 不同仿真器提供的匯編環境對標號有不同的要求。不同仿真器提供的匯編環境對標號有不同的要求。一般均應符合如下要
2、求:一般均應符合如下要求:n指令助記符、寄存器名、偽指令記憶符等不能作標號;指令助記符、寄存器名、偽指令記憶符等不能作標號;n同一標號在一個獨立程序中只能定義一次;同一標號在一個獨立程序中只能定義一次;n標號由標號由1-81-8個個ASCIIASCII字符組成,第一個字符必須是字母。字符組成,第一個字符必須是字母。2. 80C512. 80C51匯編程序設計中常用的偽指令匯編程序設計中常用的偽指令(1 1)ORG ORG 匯編起始指令匯編起始指令 規定目標程序的起始地址,格式如下:規定目標程序的起始地址,格式如下: 標號標號 操作碼操作碼 操作數操作數 ORG ORG 表達式(表達式(expe
3、xp)(2 2) EQU EQU 賦值指令賦值指令把操作數段中的地址或數據賦值給標號,格式如下:把操作數段中的地址或數據賦值給標號,格式如下: 標號標號 操作碼操作碼 操作數操作數 字符名稱字符名稱 EQU EQU 數或匯編符號數或匯編符號 例例1 AA 1 AA EQU R1 EQU R1 ;R1R1與與AAAA等值等值 則則 MOV AMOV A,AA AA 指令與指令與 MOV AMOV A,R1R1指令結果相同。指令結果相同。(3) DB定義字節指令 定義程序存儲器中存放的8位常數表,格式如下: 操作碼 操作數 DB 字節常數或ASCII字符 例 ORG 1000H DB 76H,73
4、,C,B ;括號 表示ASCII字符 DB OACH (1000H)76H (1001H)49H(1002H)43H(1003H)42H(1004H)0ACH(4) DW 定義字指令 定義程序存儲器中存放的16位常數表格式 DW 例3 ORG 2200H DW 1246H,7BH,10 則 (2200H)12H (2201H)46H (2202H)00 (2203H)7BH (2204H)00 (2205H)0AH(5) BIT 定義位地址指令 格式 BIT 例4 ABC BIT P1.0 Q4 BIT P2.2 則匯編后,位地址P1.0,P1.2分別賦給變量ABC和Q4。(6 6) END
5、END 匯編結束指令匯編結束指令 5 52 2 順序與循環程序設計順序與循環程序設計5.2.1 順序程序設計 例1:將20H單元的兩個BCD碼拆開并變成ASCII碼,存入21H、22H單元。注意ASCII碼09為30H39H。 解:采用先把20H中低4位BCD碼交換出來加以轉換、存放,然后再把高4位BCD碼交換至低4位加以轉換、存放。 地址 機器碼 周期數 源程序 ORG 0000H 0000H 02 02 00 3 LJMP MAIN MAIN: 200H 78 22 1 MOV R0,22H ;(R0)=22202H 76 00 1 MOV R0,0H ;(22)=0204H E5 20
6、1 MOV A,20H ;(A)=20206H D6 1 XCHD A, R0 ;A與(22)低 四位交換207H 43 22 30 2 ORL 22H,#30H 20AH C4 1 SWAP A20BH 44 30 1 ORL A,30H20DH F5 21 1 MOV 21H,A20FH 80 FE 2 SJMP $ END 5.2.2 循環程序設計 例3 已知:80C51單片機使用的晶振為6MHz,要求設計一個軟件延時程序,延時時間為10ms。 解:延時程序的延時時間主要與兩個因素有關,一個是所用晶振,一個是延時程序中的循環次數。一旦晶振確定之后,則主要是如何設計與計算需給定的延時循環次
7、數。在本題中已知晶振為6MHz,則可知一個機器周期為2s,可預計采用單重循環是有可能實現1ms的延時的。現根據題意編寫源程序如下:周期數 1 MOV R0,0AH ;毫秒數R0 1 DL2:MOV R1,MT ;1ms延時的預 定值MTR1 1 DL1:NOP 1 NOP 2 DJNZ R1,DL1 ;lms延時循環 2 DJNZ R0,DL2 ;毫秒數減1,不等 于0,繼續循環,等于0結束例4 從22H單元開始有一個無符號數據塊,其長度在20H單元。求出數據塊中最大值,并存入21H單元 ORG 200H CLR A ;清A作為初始最大值 MOV R2,20H ;數據個數初值 MOV R1,2
8、2H ;數據塊首地址初值LP:CLR C ;清進位 SUBB A,R1 ;最大值減隊列中數 JNC NEXT ;小于最大值繼續 MOV A, R1 ;大于最大值,則用此值代換 SJMP NEXT1NEXT:ADD A,R1 ;小于最大值,則恢復NEXT1:INC R1 ;修改地址指針 DJNZ R2,LP ;依次重復比較,直至R20 MOV 21H ,A ;最大值存入21H單元5 53 3 分支程序設計分支程序設計5.3.1 分支程序設計綜述分支程序應用要點是正確使用轉移指令,通常有如下3種指令。 1. 無條件轉移 2. 條件轉移 3. 散轉 例3 設5AH單元中有一變量X,請編寫計算下述函數
9、式的程序,結果存入5BH單元Y= 3X , X 10Y= 2X +10 , 10= X 155.3.2 5.3.2 無條件無條件/ /條件轉移程序條件轉移程序 ORG 200H MOV A,5AH ADD A,5AH ;2XA MOV R1,A MOV A,5AH ;重新把X裝入A CJNE A,#10,L1 ;與10比較,不同轉L1L1:JC L2 ;X15 CJNE A,#10H,L3 ;與16比L3:JNC L4 ;X15轉L4 MOV A,R1 ;2X送入A ADD A,#10 ;10X15,Y2X10 MOV R0,A SJMP L4L2: MOV A,R1 ADD A,5AH ;X
10、10,Y=3X MOV R0,AL4 : MOV 5BH,R0 ;存結果 SJMP $ END5.3.3 散轉程序設計 例2 根據R3的內容,轉向各個操作程序。 R30, 轉入OPR0 R31, 轉入OPR1. R3n, 轉入OPRn 解:程序清單如下。 MOV DPTR,TAB1 ;跳轉表首地址送數據指針 MOV A,R3 ;R32 A(修正變址值) ADD A,R3 JNC NOAD ;判有否進位 INC DPH ;有進位則加到高字節地址NOAD: JMP ADPTR ;轉向形成的散轉地址入口TAB1: AJMP OPR0 ;轉移到OPR0 AJMP OPR1. AJMP OPRn5 54
11、 4 查表程序設計查表程序設計5.4.1 查表程序綜述 為了實現查表功能,在80C51匯編語言中專門設置了兩條查表指令:MOVC A,A+DPTRMOVC A,A+PC 這2條指令特點不同,在應用時要注意區別。為了便于查表,要求表中的數或符號按照便于查找的次序排列,并將它存放在從指定的首地址(或稱基地址)開始的存儲單元。 例1 設計一個將16進制數轉換成ASCII碼的子程序,設16進制數存放在R0的低4位,要求將轉換后的ASCII碼送回R0。ORG 30HMOV A,R0ANL A,0FH ; 保留低4位ADD A,2 ;變址調整MOVC A,APC;查表獲取ASCII碼值MOV R0,ARE
12、TTAB:DB 30H,31H,32H,33H,34H,35HDB 36H,37H,38H,39H,41H,42H,43H,44H,45H,46H 55 子程序設計 5.5.1 5.5.1 子程序結構與設計注意事項子程序結構與設計注意事項 一種能完成某一特定任務的程序段一種能完成某一特定任務的程序段。其資源要為所有調用程序共。其資源要為所有調用程序共享。因此,子程序在結構上應具有獨立性和通用性,享。因此,子程序在結構上應具有獨立性和通用性,在編寫子程在編寫子程序時應注意以下問題:序時應注意以下問題: 1 1子程序的第一條指令的地址稱為子程序的入口地址。該指令前子程序的第一條指令的地址稱為子程序
13、的入口地址。該指令前必必須有標號須有標號。 2 2主程序調用子程序兩條子程序調用指令:主程序調用子程序兩條子程序調用指令: (1 1)絕對調用指令:)絕對調用指令:ACALL addr11ACALL addr11 (2 2)長調用指令:)長調用指令:LCALL addr16LCALL addr163 3注意設置堆棧指針和現場保護注意設置堆棧指針和現場保護4 4最后一條指令必須是最后一條指令必須是RETRET指令指令5 5子程序可以嵌套,即子程序可以調用子程序子程序可以嵌套,即子程序可以調用子程序6 6在子程序調用時,還要注意參數傳遞的問題在子程序調用時,還要注意參數傳遞的問題 二、二、 子程序
14、的基本結構子程序的基本結構 MAINMAIN: ;MAINMAIN為為主程序或調用程序標號主程序或調用程序標號 LCALL SUB LCALL SUB ;調用子程序;調用子程序SUBSUB SUBSUB:PUSH PSWPUSH PSW;現場保護;現場保護 PUSH ACCPUSH ACC; 子程序處理程序段子程序處理程序段 POP ACCPOP ACC;現場恢復;現場恢復 POP PSWPOP PSW; RETRET;最后一條指令必須為;最后一條指令必須為RETRET 5.5.2 子程序設計 例1 用程序實現c a2b2。設a、b均小于10。a存在31H單元中,b存在32H單元,把c存入33
15、H單元。 解:因本題二次用到平方值,所以在程序中采用把求平方的程序段編為子程序的方法。依題意編寫主程序和子程序如下: 地址 機器碼 源程序 ORG 200H 200 75 81 3F MOV SP,3FH ;設堆棧指針 203 E5 31 MOV A,31H ;取a值 205 12 04 00 LCALL SQR ;求a2 208 F9 MOV R1,A ;a2值暫存R1 209 E5 32 MOV A,32H ;取b值 20B 12 04 00 LCALL SQR ;求b2 20E 29 ADD A,R1 ;求a2b2 20F F5 33 MOV 33H,A ;存入33H ; 子程序子程序
16、地址地址 機器碼機器碼 源程序源程序 ORG 400H 400 04 SQR: INC A 401 83 MOVC A,APC 402 22 RET 403 1 4 9 16 TAB: DB 0403 1 4 9 16 TAB: DB 0,1 1, 4 4, 9 9,16 16 408 25 36 49 DB 25408 25 36 49 DB 25,3636,494940B 64,81 DB 6440B 64,81 DB 64,81815.6 5.6 綜合編程舉例綜合編程舉例 例1 將R0所指出單元中的ASCII碼轉換成十六進制數,并把結果仍存于原單元中。 解:對于小于、等于 9的數,ASCII代碼減去30H得一位十六進制數,對于大于9的ASCII代碼減去37H,則恰好是“0AH0FH”的結果。 編程如下: HEX: MOV A,R0 ;取操作數 CLR C SUBB A,#30H ;09的轉換 MOV R0,A ;暫存結果 SUBB A,#0AH ;結果是否大于9 JC SB2 ;小于、等于9,則返回 XCH A,R0 SUBB A,#07H ;大于9,則減37H MOV R0,A ;存結果 SB2: RET 例2
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 證券從業資格證內容分析試題及答案
- 餐廳保潔托管方案范本
- 2025年會計實務應用試題及答案
- 醫院凈化工程施工方案
- 共享農田托管方案范本
- 項目管理工具對效率提升的影響考題及答案
- 2024年項目管理專業人士資格考試全新試題及答案
- 校園車牌訂購方案范本
- 銀行從業資格實踐案例分享試題及答案
- 2024年項目管理效果評估試題及答案
- 汽輪機課件完整版本
- 《電子商務數據分析》教學大綱
- 醫療面試自我介紹
- 紅色家書課件背景
- 拆地磚砸壞地暖的合同(2篇)
- 2024員工質量意識培訓
- 《固體廢物處理與處置》大學筆記
- 醫療機構安全管理制度與實施細則
- 針刺傷預防與處理-2024中華護理學會團體標準
- 制造業生產流程手冊
- 2023年安徽公務員鄉鎮崗位面試真題及解析
評論
0/150
提交評論