




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、第四章 匯編語言程序設(shè)計(jì)程序設(shè)計(jì)概述匯編語言源程序的編輯和匯編匯編語言程序設(shè)計(jì)2022年年7月月7日日1、程序設(shè)計(jì)語言簡介2、匯編語言程序設(shè)計(jì)初步2022年年7月月7日日1、常用的編程語言是常用的編程語言是匯編語言匯編語言和和高級語言高級語言。1 1匯編語言匯編語言用英文字符來代替機(jī)器語言,這些英文字符被稱為用英文字符來代替機(jī)器語言,這些英文字符被稱為助記符匯助記符匯編語言:編語言:用助記符表示的指令。用助記符表示的指令。匯編語言源程序:匯編語言源程序:用匯編語言編寫的程序。用匯編語言編寫的程序。優(yōu)點(diǎn):優(yōu)點(diǎn):用匯編語言編寫程序效率高,占用存儲空間小,運(yùn)行用匯編語言編寫程序效率高,占用存儲空間小
2、,運(yùn)行速度快,能編寫出最優(yōu)化的程序。速度快,能編寫出最優(yōu)化的程序。缺點(diǎn):缺點(diǎn):可讀性差,離不開具體的硬件,是面向可讀性差,離不開具體的硬件,是面向“硬件硬件”的語的語言通用性差。言通用性差。2022年年7月月7日日1、程序設(shè)計(jì)語言簡介2 2高級語言高級語言不受具體不受具體“硬件硬件”的限制,的限制,優(yōu)點(diǎn):優(yōu)點(diǎn):通用性強(qiáng),直觀、易通用性強(qiáng),直觀、易懂、易學(xué),可讀性好。懂、易學(xué),可讀性好。目前多數(shù)的目前多數(shù)的51單片機(jī)用戶單片機(jī)用戶使用使用C語言(語言(C51)來進(jìn)行程來進(jìn)行程序設(shè)計(jì),已公認(rèn)為高級語言中高效簡潔而又貼近序設(shè)計(jì),已公認(rèn)為高級語言中高效簡潔而又貼近51單片機(jī)單片機(jī)硬件的編程語言。硬件的
3、編程語言。將將C語言向單片機(jī)上移植,始于語言向單片機(jī)上移植,始于20世紀(jì)世紀(jì)80年代的中后年代的中后期。期。匯編語言設(shè)計(jì)步驟(1)分析題意,明確要求(2)確定算法(3)畫程序流程圖(4)分配內(nèi)存工作單元(5)編寫源程序(6)程序優(yōu)化(7)上機(jī)調(diào)試、修改和最后確定源程序4.2 匯編語言源程序的編輯和匯編偽指令源程序的編輯和匯編1、偽指令(1 1)指令語句)指令語句已在第已在第3 3章介紹。每一指令語句在匯編時都產(chǎn)生一個指令代碼(機(jī)器代碼章介紹。每一指令語句在匯編時都產(chǎn)生一個指令代碼(機(jī)器代碼),執(zhí)行該指令代碼對應(yīng)著機(jī)器的一種操作。),執(zhí)行該指令代碼對應(yīng)著機(jī)器的一種操作。(2 2)偽指令語句)偽指
4、令語句是控制匯編(翻譯)過程的一些是控制匯編(翻譯)過程的一些控制命令控制命令。在匯編時。在匯編時沒有機(jī)器代碼沒有機(jī)器代碼與之對與之對應(yīng)。應(yīng)。下面介紹偽指令語句。下面介紹偽指令語句。1、偽指令1ORG(ORiGin)匯編起始地址命令)匯編起始地址命令源程序的開始,用一條源程序的開始,用一條ORG偽指令規(guī)定偽指令規(guī)定程序的起始地程序的起始地址址。如果不用如果不用ORG,則匯編得到的目標(biāo)程序,則匯編得到的目標(biāo)程序?qū)膶?000H地址開始。例如:地址開始。例如:ORG2000HSTART:MOVA,#00H 即規(guī)定標(biāo)號即規(guī)定標(biāo)號START代表地址為代表地址為2000H開始。開始。在一源程序中,可多
5、次用在一源程序中,可多次用ORG指令,規(guī)定不同的程序段的指令,規(guī)定不同的程序段的起始地址。但是,起始地址。但是,地址必須由小到大排列,且不能交叉、地址必須由小到大排列,且不能交叉、重疊。重疊。例如:例如:ORG2000HORG2500HORG3000H這種順序是正確的。若按下面順序的排列則是錯誤的,因?yàn)榈刂烦霈F(xiàn)了交叉。ORG2500HORG2000HORG3000H1、偽指令2. 2. END(END of Assembly)END(END of Assembly)匯編終止命令匯編終止命令源程序源程序結(jié)束標(biāo)志結(jié)束標(biāo)志,終止源程序的匯編工作。終止源程序的匯編工作。整個源程序整個源程序中只能有一條
6、中只能有一條ENDEND命令,且命令,且位于程序的最后位于程序的最后。如果。如果ENDEND出現(xiàn)出現(xiàn)在程序中間,其后的源程序,將不進(jìn)行匯編處理。在程序中間,其后的源程序,將不進(jìn)行匯編處理。1、偽指令3DB(Define Byte)定義數(shù)據(jù)字節(jié)命令)定義數(shù)據(jù)字節(jié)命令格式:格式:標(biāo)號:標(biāo)號: DB 8位字節(jié)數(shù)據(jù)表位字節(jié)數(shù)據(jù)表用于從(標(biāo)號)指定的地址開始,在程序存儲器連續(xù)單用于從(標(biāo)號)指定的地址開始,在程序存儲器連續(xù)單元中定義字節(jié)數(shù)據(jù)。例如:元中定義字節(jié)數(shù)據(jù)。例如:ORG 1000HDB-2,-4,100,30H,C,A1、偽指令4、DW(Define Word)定義字?jǐn)?shù)據(jù)命令)定義字?jǐn)?shù)據(jù)命令該命
7、令用于從指定的地址開始,在程序存儲器的連該命令用于從指定的地址開始,在程序存儲器的連續(xù)單元中定義續(xù)單元中定義16位的字?jǐn)?shù)據(jù)。例如:位的字?jǐn)?shù)據(jù)。例如:ORG 2000HDATA:DW 1246H,7BH,10匯編后(2000H)=12H(2001H)=46H;第1個字(2002H)=00H(2003H)=7BH;第2個字(2004H)=00H(2005H)=0AH;第3個字5DS(Define Storage)定義存儲區(qū)命令)定義存儲區(qū)命令從指定地址開始,保留指定數(shù)目的字節(jié)單元作為存儲區(qū)從指定地址開始,保留指定數(shù)目的字節(jié)單元作為存儲區(qū),供程序運(yùn)行使用。,供程序運(yùn)行使用。例如:例如:TABEL:D
8、S10表示從表示從TABEL代表的地址開始,保留代表的地址開始,保留10個連續(xù)的地址個連續(xù)的地址單元。單元。又例如又例如:ORG2000HDS10 H表示從表示從2000H地址開始,保留地址開始,保留16個連續(xù)地址單元。個連續(xù)地址單元。2022年年7月月7日日6 6EQUEQU(EQUateEQUate)標(biāo)號賦值命令)標(biāo)號賦值命令用于用于給標(biāo)號賦值給標(biāo)號賦值。賦值后,標(biāo)號值在整個程序有效。賦值后,標(biāo)號值在整個程序有效。例如:例如:TESTTEST: EQU 2000HEQU 2000H表示表示TEST=2000HTEST=2000H,匯編時,凡是遇到,匯編時,凡是遇到TESTTEST時,均以時
9、,均以2000H2000H來代替。來代替。2022年年7月月7日日1、源程序的編輯2、源程序的匯編2022年年7月月7日日順序結(jié)構(gòu)分支結(jié)構(gòu)循環(huán)結(jié)構(gòu)子程序結(jié)構(gòu)2022年年7月月7日日例:兩個無符號雙字節(jié)數(shù)相加。 設(shè)被加數(shù)存放于內(nèi)部RAM的40H(高位字節(jié)), 41H(低位字節(jié)), 加數(shù)存放于50H(高位字節(jié)), 51H(低位字節(jié)), 和數(shù)存入 40H和41H單元中。 2022年年7月月7日日程序如下: START: CLR C ; 將Cy清零w MOV R0, 41H ; 將被加數(shù)地址送數(shù)據(jù)指針R0w MOV R1, 51H ; 將加數(shù)地址送數(shù)據(jù)指針R1 AD1: MOV A, R0 ; 被加數(shù)
10、低字節(jié)的內(nèi)容送入AwADD A,R1 ; 兩個低字節(jié)相加wMOV R0, A ; 低字節(jié)的和存入被加數(shù)低字節(jié)中w DEC R0 ; 指向被加數(shù)高位字節(jié)w DEC R1 ; 指向加數(shù)高位字節(jié)w MOV A, R0 ; 被加數(shù)高位字節(jié)送入AwADDC A, R1 ; 兩個高位字節(jié)帶Cy相加w MOV R0, A ; 高位字節(jié)的和送被加數(shù)高位字節(jié)2022年年7月月7日日2022年年7月月7日日(a) 單分支流程單分支流程; (b) 多分支流程多分支流程 例 設(shè)變量X存放在內(nèi)部RAM 30H單元,函數(shù)值Y存入內(nèi)部RAM 31單元。試編程,按照下式的要求給賦值。2022年年7月月7日日2022年年7月月
11、7日日開始開始AXA=0A0A=-1A=1存結(jié)果存結(jié)果結(jié)束結(jié)束YNNY,;,:,:,2022年年7月月7日日2022年年7月月7日日 循環(huán)程序一般由四個主要部分組成: (1) 初始化部分: 為循環(huán)程序做準(zhǔn)備, 如規(guī)定循環(huán)次數(shù)、 給各變量和地址指針預(yù)置初值。 (2) 處理部分: 為反復(fù)執(zhí)行的程序段, 是循環(huán)程序的實(shí)體, 也是循環(huán)程序的主體。 (3) 循環(huán)控制部分: 這部分的作用是修改循環(huán)變量和控制變量, 并判斷循環(huán)是否結(jié)束, 直到符合結(jié)束條件時, 跳出循環(huán)為止。 (4) 結(jié)束部分: 這部分主要是對循環(huán)程序的結(jié)果進(jìn)行分析、 處理和存放。 2022年年7月月7日日例:編寫多字節(jié)無符號數(shù)加法程序設(shè)有兩
12、個多字節(jié)無符號數(shù)分別存放在內(nèi)部RAM的DAT1和DAT2開始的區(qū)域中(低字節(jié)先存),字節(jié)個數(shù)放在R2中,求它們的和,并將結(jié)果存放在DAT1開始的區(qū)域中。2022年年7月月7日日2022年年7月月7日日開始開始循環(huán)初始化循環(huán)初始化讀取被加數(shù)讀取被加數(shù)兩數(shù)相加兩數(shù)相加傳送部分和到目的單元傳送部分和到目的單元指向下一個被加數(shù)和加數(shù)指向下一個被加數(shù)和加數(shù)全部相加完畢全部相加完畢處理高字節(jié)進(jìn)位處理高字節(jié)進(jìn)位結(jié)束結(jié)束NY ORG 0400H MOV R0,#DAT1 MOV R1,#DAT2 CLR CLOOP:MOV A,R0 ADDC A,R1 MOV R0,A INC R0 INC R1 DJNZ
13、R2,LOOP CLR A ADDC A,#0 MOV R0,A END2022年年7月月7日日例例 5 秒延時程序。 延時程序與 MCS - 51 執(zhí)行指令的時間有關(guān), 如果使用 12 MHz晶振, 一個機(jī)器周期為 1 s, 計(jì)算出一條指令以至一個循環(huán)所需要的執(zhí)行時間, 給出相應(yīng)的循環(huán)次數(shù), 便能達(dá)到延時的目的。5 秒延時程序如下:2022年年7月月7日日nDELAY: MOV R5, 50n DEL0: MOV R6, 200n#4990153 9980306n DEL1: MOV R7, 248n DEL2: DJNZ R7, $;DEL2n DJNZ R6, DEL1n DJNZ R5
14、, DEL0n RET 2022年年7月月7日日子程序的概念子程序的概念 通常把那些基本操作功能編制為一個獨(dú)立夫人程序段, 這些就是可供不同程序或同一程序反復(fù)調(diào)用的子程序。在程序中需要執(zhí)行這種操作的地方放置一條調(diào)用指令, 當(dāng)程序執(zhí)行到調(diào)用指令, 就轉(zhuǎn)到子程序中完成規(guī)定的操作, 并返回到原來的程序繼 續(xù)執(zhí)行下去。 2022年年7月月7日日子程序中必須有一條子程序返回指令(RET),其功能是當(dāng)子程序執(zhí)行完后能自動返回到主程序中去。注意事項(xiàng):n(1)子程序名n(2)明確入口條件、出口條件n(3)注意保護(hù)現(xiàn)場和恢復(fù)現(xiàn)場2022年年7月月7日日 子程序的調(diào)用子程序的調(diào)用 調(diào)用子程序的指令有“ACALL”
15、和“LCALL”, “LCALL”:16位入口地址 “ACALL”:11位入口地址,另5位由PC提供執(zhí)行調(diào)用指令時, 先將程序地址指針PC改變(“ACALL”加 2, “LCALL”加 3), 然后 PC值壓入堆棧, 用新的地址值代替。執(zhí)行返回指令時, 再將 PC值彈出。 2022年年7月月7日日子程序調(diào)用中, 主程序應(yīng)先把有關(guān)的參數(shù)存入約定的位置, 子程序在執(zhí)行時, 可以從約定的位置取得參數(shù), 當(dāng)子程序執(zhí)行完, 將得到的結(jié)果再存入約定的位置, 返回主程序后, 主程序可以從這些約定的位置上取得需要的結(jié)果, 這就是參數(shù)的傳遞。子程序的調(diào)用涉及到堆棧,在主程序中必須要正確設(shè)置堆棧指針。子程序嵌套是
16、指在子程序執(zhí)行過程中,還可以調(diào)用另一個子程序。2022年年7月月7日日例4-13 用程序?qū)崿F(xiàn)C=A*A+B*B。設(shè)A和B均小于10,A存在內(nèi)部RAM31H單元,B存在內(nèi)部RAM 32H,把C存入內(nèi)部RAM 33H單元。解:本題中包含2個求平方值,把求平方設(shè)計(jì)為子程序。子程序名稱:SQR功能:求小于10的數(shù)的平方(查表法)入口參數(shù)A,出口參數(shù)A2022年年7月月7日日 主程序: ORG 0800H MOV SP,#60H MOV A,31H LCALL SQR MOV R1,A MOV A,32H LCALL SQR ADD A,R1 MOV 33H,A SJMP$2022年年7月月7日日 OR
17、G 0900HSQR: ADD A,#01H MOVC A,A+PC RETTAB: DB 0,1,4,9,16 DB 25,36,49,64,81 END堆棧變化:畫圖說明2022年年7月月7日日4-6試編程將內(nèi)部RAM 40H-60H單元內(nèi)容傳送到外部RAM以2000H為首地址的存儲區(qū)中4-7在外部RAM首地址為DATA的存貯器中,有10個字節(jié)的數(shù)據(jù),試編程將每個字節(jié)的最高位無條件置“1”4-8 編寫程序?qū)⑼獠縍AM 3000H開始的13個單元中的數(shù)據(jù)隔一個傳送到內(nèi)部RAM30H開始的區(qū)域4-9編程將外部RAM地址為1000H-1030H的數(shù)據(jù)塊全部搬遷到內(nèi)部RAM 30H-60H中,并將
18、原來數(shù)據(jù)全部清零。4-18設(shè)在外部RAM 2000H-2004H單元中,存放有5個壓縮BCD碼,試編程將它們轉(zhuǎn)換成ASCII碼,存放到以2005H為首地址的外部RAM中。4-21 根據(jù)圖3-10,設(shè)計(jì)燈亮移位程序,要求8個發(fā)光二極管每次亮1個,點(diǎn)亮40ms。順次循環(huán)右移點(diǎn)亮,循環(huán)不止。4-22 根據(jù)圖3-10,設(shè)計(jì)亮燈程序,要求8個發(fā)光二極管間隔分成2組,每組4個,2組交叉點(diǎn)亮,變換時間為100ms,反復(fù)循環(huán)不止。2022年年7月月7日日2022年年7月月7日日該單片機(jī)系統(tǒng)的晶振頻率為該單片機(jī)系統(tǒng)的晶振頻率為12MHz3-14 已知(A)=5Bh,(R1)=40H,(40H)=C3H,(PSW)=81H,試寫出各條指令單獨(dú)執(zhí)行結(jié)果,并說明程序狀態(tài)字的狀態(tài)。 (1) XCH A,R1 (2)XCHA,40H(3) XCHA,R1
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 客運(yùn)火車站旅客服務(wù)規(guī)范考核試卷
- 供應(yīng)鏈協(xié)同案例解析考核試卷
- 低溫倉儲庫存管理與控制考核試卷
- 家用縫紉機(jī)維修實(shí)操考核試卷
- 土地利用規(guī)劃中的社區(qū)開放空間設(shè)計(jì)考核試卷
- 創(chuàng)業(yè)投資風(fēng)險防范體系建設(shè)與實(shí)施路徑考核試卷
- 政府融資合同范本模板
- 自用高爾夫轉(zhuǎn)讓合同范本
- 工地叉車租憑合同范本
- 電氣質(zhì)量安全培訓(xùn)課件
- 企業(yè)實(shí)際控制人的協(xié)議書
- 初中心理健康-4.我與我生活的環(huán)境教學(xué)課件設(shè)計(jì)
- 《城市軌道交通員工職業(yè)素養(yǎng)》課程標(biāo)準(zhǔn)
- 語文新課程課堂教學(xué)設(shè)計(jì)課件
- 金屬非金屬礦山安全規(guī)程培訓(xùn)課件(五)
- 企事業(yè)單位全面風(fēng)險清單(含內(nèi)控風(fēng)險-2023版-雷澤佳編制)
- 風(fēng)電場運(yùn)行維護(hù)招標(biāo)文件
- 水利水電工程監(jiān)理平行檢測表(部分)
- 證據(jù)目錄模板
- 魯迅《祝福》PPT完整版
- 維保收費(fèi)標(biāo)準(zhǔn)清單(房屋維修物業(yè)用表)
評論
0/150
提交評論