




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第第3 3章章 MCS-51MCS-51單片機的指令系統(tǒng)單片機的指令系統(tǒng) 沈陽化工大學沈陽化工大學 3.4 匯編語言程序的基本形式 單片機編程語言 單片機編程語言:匯編語言匯編語言+ +高級語言高級語言。 匯編語言匯編語言 用英文字符來代替機器語言,這些英文字符被稱為助記符匯編語言;助記符匯編語言; 匯編語言源程序:匯編語言源程序:用匯編語言編寫的程序。 “匯編匯編”:匯編語言源程序需轉換(翻譯)成為二進制代碼表示的機 器語言程序,才能識別和執(zhí)行。 完成“翻譯”的程序稱為匯編程序。經(jīng)匯編程序“匯編”得到的以“0”、 “1”代碼形式表示的機器語言程序稱為目標程序。 優(yōu)點:優(yōu)點:用匯編語言編寫程序
2、效率高,占用存儲空間小,運行速度快, 能編寫出最優(yōu)化的程序, 缺點:缺點:可讀性差,是面向“硬件”的語言,通用性差。 3.4 匯編語言程序的基本形式 單片機編程語言:匯編語言 單片機編程語言:匯編語言+ +高級語言高級語言。 高級語言高級語言 C51已成為單片機的實用高級編程語言。 在對程序的空間和時間要求較高的場合,可使用C語言和匯編語言 混合編程。 在很多需要直接控制硬件且對實時性要求較高的場合,則更是非用 匯編語言不可。 掌握匯編語言并能進行程序設計,是學習和掌握單片機程序設計的 基本功之一。 優(yōu)點:通用性強,直觀、易懂、易學,可讀性好。優(yōu)點:通用性強,直觀、易懂、易學,可讀性好。 缺點
3、:程序占用空間和時間相對較多。缺點:程序占用空間和時間相對較多。 3.4.1 匯編語言程序的偽指令 基本語句 基本語句:指令語句指令語句+ +偽指令語句偽指令語句。 偽指令偽指令 在匯編語言源程序中應有向匯編程序發(fā)出的指示信息,告訴它如在匯編語言源程序中應有向匯編程序發(fā)出的指示信息,告訴它如 何完成匯編工作,這是通過偽指令來實現(xiàn)何完成匯編工作,這是通過偽指令來實現(xiàn)。 偽指令不屬于指令系統(tǒng)中的匯編語言指令,它是程序員發(fā)給匯編偽指令不屬于指令系統(tǒng)中的匯編語言指令,它是程序員發(fā)給匯編 程序的命令,也稱為匯編程序控制命令。程序的命令,也稱為匯編程序控制命令。 只有在匯編前的源程序中才有偽指令。只有在匯
4、編前的源程序中才有偽指令。 “偽偽”體現(xiàn)在匯編后,偽指體現(xiàn)在匯編后,偽指 令沒有相應的機器代碼產(chǎn)生。令沒有相應的機器代碼產(chǎn)生。 偽指令具有控制匯編程序的輸入偽指令具有控制匯編程序的輸入/輸出、定義數(shù)據(jù)和符號、條件匯輸出、定義數(shù)據(jù)和符號、條件匯 編、分配存儲空間等功能編、分配存儲空間等功能 1. ORG(ORiGin)匯編起始地址命令 格式: ORG addr16 或 標號地址。 作用:說明下面緊接的程序段或數(shù)據(jù)段存放的起始地址。 例如: ORG 1000H;規(guī)定標號START代表地址為1000H開始。 START:MOV A,#00H 若省略ORG偽指令,則該程序段從ROM中0000H單元 開
5、始存放。 在一個源程序中,可以多次使用ORG偽指令,但地址值 由小到大依序排列,不允許空間重疊。 3.4.1 匯編語言程序的偽指令 2. END匯編結束 3. EQU(EQUate)標號賦值命令 3.4.1 匯編語言程序的偽指令 格式: END 作用:結束匯編。 匯編程序遇到END偽指令后即結束匯編。 處于END之后的程序,匯編程序軟件將不處理。 格式:符號名 EQU 表達式 作用:將表達式的值或特定的某個匯編符號定義為一個指定的符號名。 【例】 SG EQU R0 ;SG與R0等值 LEN EQU10H;DE與10H等值 MOV A, SG ;(A)(R0) MOV R7, #LEN ;(R
6、7)10H 4. DB (Define Byte)定義數(shù)據(jù)字節(jié) 3.4.1 匯編語言程序的偽指令 格式: 標號: DB 字節(jié)數(shù)據(jù)表 作用:從標號指定的地址單元開始,在ROM中存放8位 的數(shù)據(jù)字節(jié)。 將字節(jié)數(shù)據(jù)根據(jù)從左到右的順序依次存放在指定的存儲 單元中,一個數(shù)據(jù)占一個存儲單元。 字節(jié)數(shù)據(jù)表可以是字符、十進制、十六進制、二進制等。 該偽指令常用于存放數(shù)據(jù)表格。 4. DB (Define Byte)定義數(shù)據(jù)字節(jié) 3.4.1 匯編語言程序的偽指令 例如: ORG 1000H SEG1: DB 53H,24 , “2” SEG2: DB DAY END 則 (1000H)=53H (1001H)=
7、18H; 十進制數(shù)24 (1002H)=32H;32H為“2”的ASCII碼 (1003H)=44H;44H為“D”的ASCII碼 (1004H)=41H;41H為“A”的ASCII碼 (1005H)=59H;59H為“Y”的ASCII碼 如果操作數(shù)為數(shù)值,其取值范圍應為00HFFH; 若為字符串,其長度應限制在80個字符內。 5. DW (Define Word )定義數(shù)據(jù)字 3.4.1 匯編語言程序的偽指令 格式: 標號: DW 字數(shù)據(jù)表 作用:從標號指定的地址單元開始,在ROM中存放 16位的數(shù)據(jù)字。 16位的二進制數(shù),高8位存放在低地址單元,低8位存 放在高地址單元。 例如: ORG2
8、000H DW1246H,7BH;匯編后 (2000H)=12H;第1個字 (2001H)=46H (2002H)=00H;第2個字 (2003H)=7BH 6. BIT 位定義命令 7. DATA數(shù)據(jù)地址賦值 3.4.1 匯編語言程序的偽指令 格式:符號名 BIT 位地址表達式 作用:將位地址賦給指定的符號名。 【例】 LEDBITP1.7 FLAGBIT02H 匯編后,位地址P1.7、02H分別賦給變量LED和FLAG。 格式:符號名 DATA 表達式 作用:將表達式的值或特定的某個匯編符號定義為一個 指定的符號名。 【例】 MAINDATA2000H 匯編后MAIN的值為2000H。 匯
9、編 手工匯編:通過查指令的機器代碼表,逐個把助記符 指令“翻譯”成機器代碼,再進行調試和運行。 機器匯編:用PC機上的軟件(匯編程序)來代替手工匯編。 用編輯軟件進行源程序編輯,然后生成一個ASCII碼文件, 擴展名為 “.ASM”。在微機上運行匯編程序,譯成機器碼。 機器碼通過串口(或并口)傳送到用戶樣機或在線仿真器, 進行程序的調試和運行。 有時,在分析某些產(chǎn)品的程序的機器代碼時,需將機器代 碼翻譯成匯編語言源程序,稱為“反匯編”。 3.4.2 匯編語言程序的編輯與匯編 源程序由主程序、子程序、中斷服務子程序組成 主框架編制案例 ;程序變量定義區(qū) 1 SDABITP1.3;定義SDA位變量
10、 2 IOEQUP0;定義I/O等值P0口 3 ByteConDATA30H ;定義字節(jié)變量ByteCon ;程序主體部分 4 ORG0000H ;程序段從0000H單元開始存放 5 LJMPMAIN;跳到主程MAIN 6 ORG0003H ;從0003H開始存放程序段 LJMPINTERUPT0 ;跳到外部中斷0處理子程序 8 ORG0030H ;從0030H開始存放程序段 9MAIN: ;主程序標號說明 10 MOVSP,#60H ;設置堆棧指針 3.4.3 匯編語言源程序的格式 11 LCALL INITIATE ;調用初始化子程 12 FCY: ;控制程序循環(huán)標號 LCALLSUB ;
11、調用功能子程序 13 LJMPFCY ;跳到FCY構成循環(huán) 14 ORGxxxx ;以下功能程序的存放地址 15 INITIATE: ;初始化子程序標號 16 RET ;子程序返回 17 SUB: ;功能子程序標號 18 RET ;子程序返回 19 INTERUPT0: ;外部中斷0功能程序 20 RETI ;中斷返回 21 TABLE: ;表的標號 22 DB 00H,01H ;表的數(shù)據(jù) END ;源程序結束,停止匯編。 3.4.3 匯編語言源程序的格式 3.5 匯編語言程序的基本結構 匯編語言源程序設計通常采用結構化設計方 法,任何復雜的程序都可分解為: u 順序結構部分 u 分支結構部分
12、 u 循環(huán)結構部分 u 子程序部分 u 程序書寫格式:4個對齊 1標號,2助記符,3第一個操作數(shù),4注釋 【功能】求變量X的平方。(單字節(jié)查單字節(jié)查表子程序) 【入口參數(shù)】X值存放在片內RAM的30H單元 【出口參數(shù)】X2值存放在片內RAM的31H單元 程序框圖如圖3.10所示。 ORG 0100H SQU: MOV DPTR,# TABLE MOV A,30H MOVC A,A+DPTR MOV 31H,A RET ORG 2000H TABLE: DB 00,01,04,09,16,25 DB 36,49,64,81,100,121 END 3.5.1 順序程序設計 3.5.2 分支程序設
13、計 分支:根據(jù)某種標志改變程序執(zhí)行的順序。 一般分為單分支、多分支。 (a) 單分支(b)多分支多分支 圖圖3.11 分支程序流程圖分支程序流程圖 3.5.2 分支程序設計 【功能】求單字節(jié)有符號數(shù)的二進制補碼 【入口參數(shù)】二進制數(shù)放在A中 【出口參數(shù)】其補碼放回到A中 CMPT: JNB Acc.7,RETURN ;(A)0,不需轉換 MOV C,Acc.7;符號位保存 CPL A;(A)求反,加1 ADD A,#1 MOV Acc.7,C;符號位存在A的最高位 RETURN: RET 1單分支選擇結構 :僅有兩個出口,兩者 選一。一般根據(jù)運算結果的狀態(tài)標志,用條 件判跳指令來選擇并轉移。
14、3.5.2 分支程序設計 2.散轉多分支程序 【功能】某菜單有10項。根據(jù)輸入數(shù)碼轉去執(zhí)行相應的子程序。即輸 入“1”,執(zhí)行子程序1;輸入“2”,執(zhí)行子程序2;依次類推。 【入口參數(shù)】 (R3)=存輸入鍵盤碼09 【出口參數(shù)】轉移到相應的子程序入口 ORG 0030H KEY_JMP:MOV DPTR, #TAB1;子程序入口首地址送DPTR MOV A, R3;把鍵盤輸入緩沖區(qū)內容送累加器(A) MOV B, #03H MUL AB ;由于長跳轉指令LJMP占用3B, ;各子程序入口地址相距3B 3.5.2 分支程序設計 2.散轉多分支程序 JMP A+DPTR ;根據(jù)輸入碼,執(zhí)行相應的子程
15、序 TAB1:LJMP NO0 LJMP NO1 LJMP NO2 LJMP NO3 LJMP NO4 LJMP NO5 LJMP NO6 LJMP NO7 LJMP NO8 LJMP NO9 END 任意任意0-n的散轉的散轉 MOV R6, A ;乘積的低8位暫存R6 MOV A,B;乘積的高8位送A ADD A ,DPH ;乘積的高8位加到 DPH中 MOV DPH, A MOV A, R6 JMP A+DPTR 3.5.3 循環(huán)程序設計 循環(huán)程序一般包含以下4部分。 (1) 設置循環(huán)初值:設置循環(huán)過程工作寄存器單元的初值。 (2) 循環(huán)體:循環(huán)程序功能部分。 (3) 循環(huán)記錄:記錄循環(huán)
16、過程,為循環(huán)判斷準備。 (4) 循環(huán)控制:判斷循環(huán)完成情況,滿足條件作相應的 處理。不滿足繼續(xù)執(zhí)行。 n程序中含有可以反復執(zhí)行的程序段 n循環(huán)程序分為先循環(huán)后判斷和先判斷后循環(huán)兩種循環(huán) 體方式 3.5.3 循環(huán)程序設計 圖3.12 循環(huán)程序流程圖 圖3.12 循環(huán)程序流程圖 【功能】 n個單字節(jié)數(shù)相加,和為雙字節(jié),存放在(R3、R4)中。 【入口參數(shù)】單字節(jié)數(shù)Xi放在從40H開始的RAM單元中,n放在R2中。 【出口參數(shù)】和存放在(R3、R4)中。(R2為控制變量,R0為變址單元 ) 【分析】計算公式為 。 公式要改寫為用程序實現(xiàn)的數(shù)值解法: y (R3、R4) Xi (R0) nR2 3.5
17、.3 循環(huán)程序設計 1 n i i yx SUM: MOV R3, #00H MOV R4, #00H MOV R2, #n MOV R0, #40H LOOP: MOV A, R4;取部分和低位 ADD A, R0;與Xi相加 MOV R4, A INC R0;地址加1 CLR A ADDC A, R3;低位字節(jié)向高位字節(jié)進位 MOV R3, A DJNZ R2, LOOP ;未加完繼續(xù)重復 RET 3.5.3 循環(huán)程序設計 【功能】設計一個延時10ms的程序。 【入口參數(shù)】 (R0)=毫秒數(shù),(R1)=1ms延時預定值。 【出口參數(shù)】定時到,退出程序。 【分析】延時主要與所用機器周期和延時
18、程序中的循環(huán)次數(shù)有關。 已知AT89C51單片機使用的晶振為12MHz,則可知1個機器周期為1s。 ORG0100H 指令機器周期數(shù) DELAY: MOV R0 , #10 ;毫秒數(shù)R0 1 DL2:MOV R1 , #250 ;1ms延時值R1 1 DL1:NOP 1 NOP; (1+1+2)1250=1000 s 1 DJNZ R1 , DL1 ;1ms延時循環(huán) 2 DJNZ R0 , DL2 ;10ms延時循環(huán) 2 RET ;精確延時時間計算式為: 2 ; (1+2) 1+(1+2)110+(1+1+2)125010=10.033ms 3.5.3 循環(huán)程序設計 內 循 環(huán) 外 循 環(huán) 3
19、.5.4 子程序設計 (1)子程序的入口地址,前必須有標號。 (2)主程序調用子程序,是通過調用指令來實現(xiàn)。 (3)子程序結構中必須用到堆棧,用來進行斷點和現(xiàn)場的保護。 (4)子程序返回主程序時,最后一條指令必須是RET或RETI指令。 (5)主程序和子程序約定好交換數(shù)據(jù)的地址單元或存儲 器,其為主、子程序共有部分。 (6)子程序可以嵌套,即子程序又可以調用另外的子程序。 n按功能分為中斷子程序和功能子程序。 3.5.4 子程序設計運算類子程序-1 【功能】多字節(jié)無符號數(shù)的加法。 【入口參數(shù)】 DATA1=被加數(shù)的低位地址。 DATA2=加數(shù)的低位地址。N字節(jié)相加。 【出口參數(shù)】 DATA2=
20、和數(shù)低位地址。 MADD: MOV R0,#DATA1;置被加數(shù)指針 MOV R1, #DATA2;置加數(shù)指針 MOV R7,#N;置字節(jié)數(shù) CLR C;清進位位 LOOP: MOV A,R0 ADDC A,R1 ;求和 MOV R1,A ;存結果 INC R0 ;修改指針 INC R1 DJNZ R7,LOOP;循環(huán)判斷 RET 3.5.4 子程序設計運算類子程序-2 【功能】多字節(jié)無符號數(shù)的減法。 【入口參數(shù)】 DATA1=被減數(shù)的低位地址。 DATA2=減數(shù)的低位地址。N字節(jié)相減。 【出口參數(shù)】 DATA2=差數(shù)低位地址。 MADD: MOV R0,#DATA1;置被差數(shù)指針 MOV R
21、1, #DATA2;置差數(shù)指針 MOV R7,#N;置字節(jié)數(shù) CLR C;清借位位 LOOP: MOV A,R0 SUBB A,R1 ;求差 MOV R1,A ;存結果 INC R0 ;修改指針 INC R1 DJNZ R7,LOOP;循環(huán)判斷 RET 3.5.4 子程序設計碼型轉換子程序-1 【功能】將1位十六進制數(shù)轉換成相應的ASCII碼。 【入口參數(shù)】 (R0)=1位十六進制數(shù)。 【出口參數(shù)】 (R2)=轉換后的ASCII碼。 【分析】轉換方法為:小于10,加上30H,否則加上37H。 HASC:MOV A,R0;取4位二進制數(shù) ANLA,#0FH;屏蔽掉高4位 PUSH ACC;4位二
22、進制數(shù)入棧 CLR C ;清進(借)位標志位 SUBB A,#0AH POP ACC;彈出原4位二進制數(shù) JC LOOP;借位位為1,跳轉至LOOP ADD A,#07H;借位位為0,該數(shù)在AF之間,加37H LOOP: ADDA,#30H;該數(shù)在09之間,加30H MOV R2,A;ASCII碼存于R2 RET 3.5.4 子程序設計碼型轉換子程序-2 【功能】將一個字節(jié)二進制數(shù)轉換成 3 位非壓縮型BCD碼。 【入口參數(shù)】二進制數(shù)在內部RAM 40H單元。 【出口參數(shù)】轉換結果放入內部 RAM 52H, 51H, 50H單元中。 【分析】轉換方法為:依次100、10整除。 HEXBCD: MOV A, 40H MOV B, 100 DIV AB;商(A)百位數(shù),余數(shù)(B) MOV 52H, A MOV A, B MOV B,10 DIV AB ;商(A)十位數(shù),余數(shù)(B)個位數(shù) MOV 51H, A MOV 50H, B RET 3.5.4 子程序設計查表子程序-1 【功能】單字節(jié)查雙字節(jié)查表子程序。 【入口參數(shù)】 1)8位A/D電壓采集數(shù)字量,VR3; 2)溫度值放在ROM表中。 【出口參數(shù)】溫度值R2R3 。 【分析】特點:自變量為自然數(shù)0,1,2 應用背景:電壓與溫度
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 文具及類似用品戰(zhàn)略市場規(guī)劃報告
- 自動絡筒機市場分析及競爭策略分析報告
- 包服務合同范本
- 企業(yè)股東股權合同范本
- 變更屬于合同范本
- 世界紅十字日紀念演講稿
- 中藥炮制工中級練習題及參考答案
- 少年兒童健康試題(附參考答案)
- 建筑制圖及識圖模擬習題及參考答案
- 《風箏》大班教案
- 2024~2025學年度八年級數(shù)學上冊第1課時 負整數(shù)指數(shù)冪教學設計
- 2024年江西省吉安市遂川縣初中教師業(yè)務素養(yǎng)檢測試卷歷史試題
- 2024至2030年中國特鋼行業(yè)“十四五”分析及發(fā)展前景預測研究分析報告
- 小兒急性腸炎查房課件
- DL∕T 2024-2019 大型調相機型式試驗導則
- 2024年蘇州市職業(yè)大學單招職業(yè)適應性測試題庫附答案
- 術后惡心嘔吐防治專家意見
- MOOC 醫(yī)學免疫學-南昌大學 中國大學慕課答案
- JB-T 8640-2014 額定電壓26-35kV及以下電力電纜附件型號編制方法
- 社會保障卡辦理委托書
- 微積分(第三版)課件:多元函數(shù)微積分
評論
0/150
提交評論