




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第四章匯編語言程序設(shè)計提要程序設(shè)計概述匯編語言源程序的編輯和匯編匯編語言程序設(shè)計2023年12月14日2第1節(jié)程序設(shè)計概述1、程序設(shè)計語言簡介2、匯編語言程序設(shè)計初步2023年12月14日31、程序設(shè)計語言簡介常用的編程語言是匯編語言和高級語言。1.匯編語言用英文字符來代替機器語言,這些英文字符被稱為助記符匯編語言:用助記符表示的指令。匯編語言源程序:用匯編語言編寫的程序。優(yōu)點:用匯編語言編寫程序效率高,占用存儲空間小,運行速度快,能編寫出最優(yōu)化的程序。缺點:可讀性差,離不開具體的硬件,是面向“硬件”的語言通用性差。2023年12月14日41、程序設(shè)計語言簡介2.高級語言不受具體“硬件”的限制,優(yōu)點:通用性強,直觀、易懂、易學(xué),可讀性好。目前多數(shù)的51單片機用戶使用C語言(C51)來進(jìn)行程序設(shè)計,已公認(rèn)為高級語言中高效簡潔而又貼近51單片機硬件的編程語言。將C語言向單片機上移植,始于20世紀(jì)80年代的中后期。匯編語言設(shè)計步驟(1)分析題意,明確要求(2)確定算法(3)畫程序流程圖(4)分配內(nèi)存工作單元(5)編寫源程序(6)程序優(yōu)化(7)上機調(diào)試、修改和最后確定源程序4.2匯編語言源程序的編輯和匯編偽指令源程序的編輯和匯編1、偽指令(1)指令語句已在第3章介紹。每一指令語句在匯編時都產(chǎn)生一個指令代碼(機器代碼),執(zhí)行該指令代碼對應(yīng)著機器的一種操作。(2)偽指令語句是控制匯編(翻譯)過程的一些控制命令。在匯編時沒有機器代碼與之對應(yīng)。下面介紹偽指令語句。1、偽指令1.ORG(ORiGin)匯編起始地址命令 源程序的開始,用一條ORG偽指令規(guī)定程序的起始地址。如果不用ORG,則匯編得到的目標(biāo)程序?qū)?000H地址開始。例如:
ORG 2000HSTART:
MOV A,#00H
……即規(guī)定標(biāo)號START代表地址為2000H開始。在一源程序中,可多次用ORG指令,規(guī)定不同的程序段的起始地址。但是,地址必須由小到大排列,且不能交叉、重疊。例如:ORG 2000H……ORG 2500H……ORG 3000H……這種順序是正確的。若按下面順序的排列則是錯誤的,因為地址出現(xiàn)了交叉。ORG 2500H……ORG 2000H……ORG 3000H……1、偽指令2.
END(ENDofAssembly)匯編終止命令源程序結(jié)束標(biāo)志,終止源程序的匯編工作。整個源程序中只能有一條END命令,且位于程序的最后。如果END出現(xiàn)在程序中間,其后的源程序,將不進(jìn)行匯編處理。1、偽指令3.DB(DefineByte)定義數(shù)據(jù)字節(jié)命令格式:[標(biāo)號:]DB8位字節(jié)數(shù)據(jù)表用于從(標(biāo)號)指定的地址開始,在程序存儲器連續(xù)單元中定義字節(jié)數(shù)據(jù)。例如:
ORG 1000HDB -2,-4,100,30H,‘C’,‘A’1、偽指令4、DW(DefineWord)定義字?jǐn)?shù)據(jù)命令該命令用于從指定的地址開始,在程序存儲器的連續(xù)單元中定義16位的字?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個字1、偽指令5.DS(DefineStorage)定義存儲區(qū)命令從指定地址開始,保留指定數(shù)目的字節(jié)單元作為存儲區(qū),供程序運行使用。例如:
TABEL:DS 10表示從TABEL代表的地址開始,保留10個連續(xù)的地址單元。又例如:
ORG 2000H DS 10H表示從2000H地址開始,保留16個連續(xù)地址單元。2023年12月14日141、偽指令6.EQU(EQUate)標(biāo)號賦值命令用于給標(biāo)號賦值。賦值后,標(biāo)號值在整個程序有效。例如:TEST: EQU2000H
表示TEST=2000H,匯編時,凡是遇到TEST時,均以2000H來代替。2023年12月14日152、源程序的編輯和匯編1、源程序的編輯2、源程序的匯編2023年12月14日164.3匯編語言程序設(shè)計順序結(jié)構(gòu)分支結(jié)構(gòu)循環(huán)結(jié)構(gòu)子程序結(jié)構(gòu)2023年12月14日174.3.1順序結(jié)構(gòu)例:兩個無符號雙字節(jié)數(shù)相加。設(shè)被加數(shù)存放于內(nèi)部RAM的40H(高位字節(jié)),41H(低位字節(jié)),加數(shù)存放于50H(高位字節(jié)),51H(低位字節(jié)),和數(shù)存入40H和41H單元中。2023年12月14日18程序如下:START:CLRC;將Cy清零
MOVR0,#41H;將被加數(shù)地址送數(shù)據(jù)指針R0MOVR1,#51H;將加數(shù)地址送數(shù)據(jù)指針R1AD1:MOVA,@R0;被加數(shù)低字節(jié)的內(nèi)容送入AADDA,@R1;兩個低字節(jié)相加MOV@R0,A;低字節(jié)的和存入被加數(shù)低字節(jié)中
DECR0;指向被加數(shù)高位字節(jié)
DECR1;指向加數(shù)高位字節(jié)
MOVA,@R0;被加數(shù)高位字節(jié)送入AADDCA,@R1;兩個高位字節(jié)帶Cy相加
MOV@R0,A;高位字節(jié)的和送被加數(shù)高位字節(jié)2023年12月14日194.3.2分支程序設(shè)計2023年12月14日20(a)單分支流程;(b)多分支流程例設(shè)變量X存放在內(nèi)部RAM30H單元,函數(shù)值Y存入內(nèi)部RAM31H單元。試編程,按照下式的要求給Y賦值。1X>0Y=0
X=0-1X<02023年12月14日212023年12月14日22開始A←XA=0A>0A=-1A=1存結(jié)果結(jié)束YNNYORG0200HMOVA,30H
;JZ
COMPJNB
ACC.7,POSIMOV
A,#0FFHSJMP
COMPPOSI:MOV
A,#1COMP:MOV
31H,AEND2023年12月14日234.3.3循環(huán)程序設(shè)計2023年12月14日24循環(huán)的組成
循環(huán)程序一般由四個主要部分組成:(1)初始化部分:為循環(huán)程序做準(zhǔn)備,如規(guī)定循環(huán)次數(shù)、給各變量和地址指針預(yù)置初值。
(2)處理部分:為反復(fù)執(zhí)行的程序段,是循環(huán)程序的實體,也是循環(huán)程序的主體。
(3)循環(huán)控制部分:這部分的作用是修改循環(huán)變量和控制變量,并判斷循環(huán)是否結(jié)束,直到符合結(jié)束條件時,跳出循環(huán)為止。
(4)結(jié)束部分:這部分主要是對循環(huán)程序的結(jié)果進(jìn)行分析、處理和存放。2023年12月14日25例:編寫多字節(jié)無符號數(shù)加法程序設(shè)有兩個多字節(jié)無符號數(shù)分別存放在內(nèi)部RAM的DAT1和DAT2開始的區(qū)域中(低字節(jié)先存),字節(jié)個數(shù)放在R2中,求它們的和,并將結(jié)果存放在DAT1開始的區(qū)域中。2023年12月14日262023年12月14日27開始循環(huán)初始化讀取被加數(shù)兩數(shù)相加傳送部分和到目的單元指向下一個被加數(shù)和加數(shù)全部相加完畢處理高字節(jié)進(jìn)位結(jié)束NYORG0400HMOVR0,#DAT1MOVR1,#DAT2CLRCLOOP:MOVA,@R0ADDCA,@R1MOV@R0,AINCR0INCR1DJNZR2,LOOPCLRAADDCA,#0MOV@R0,AEND2023年12月14日28多重循環(huán)例5秒延時程序。延時程序與MCS-51執(zhí)行指令的時間有關(guān),如果使用12MHz晶振,一個機器周期為1μs,計算出一條指令以至一個循環(huán)所需要的執(zhí)行時間,給出相應(yīng)的循環(huán)次數(shù),便能達(dá)到延時的目的。5秒延時程序如下:2023年12月14日29DELAY:MOVR5,#50DEL0:MOVR6,#200#49901539980306DEL1:MOVR7,#248DEL2:DJNZR7,$;DEL2DJNZR6,DEL1DJNZR5,DEL0RET2023年12月14日304.3.4子程序設(shè)計子程序的概念
通常把那些基本操作功能編制為一個獨立夫人程序段,這些就是可供不同程序或同一程序反復(fù)調(diào)用的子程序。在程序中需要執(zhí)行這種操作的地方放置一條調(diào)用指令,當(dāng)程序執(zhí)行到調(diào)用指令,就轉(zhuǎn)到子程序中完成規(guī)定的操作,并返回到原來的程序繼續(xù)執(zhí)行下去。2023年12月14日31子程序結(jié)構(gòu)與設(shè)計注意事項子程序中必須有一條子程序返回指令(RET),其功能是當(dāng)子程序執(zhí)行完后能自動返回到主程序中去。注意事項:(1)子程序名(2)明確入口條件、出口條件(3)注意保護現(xiàn)場和恢復(fù)現(xiàn)場2023年12月14日32子程序的調(diào)用與返回子程序的調(diào)用調(diào)用子程序的指令有“ACALL”和“LCALL”,“LCALL”:16位入口地址
“ACALL”:11位入口地址,另5位由PC提供執(zhí)行調(diào)用指令時,先將程序地址指針PC改變(“ACALL”加2,“LCALL”加3),然后PC值壓入堆棧,用新的地址值代替。執(zhí)行返回指令時,再將PC值彈出。
2023年12月14日33子程序調(diào)用中,主程序應(yīng)先把有關(guān)的參數(shù)存入約定的位置,子程序在執(zhí)行時,可以從約定的位置取得參數(shù),當(dāng)子程序執(zhí)行完,將得到的結(jié)果再存入約定的位置,返回主程序后,主程序可以從這些約定的位置上取得需要的結(jié)果,這就是參數(shù)的傳遞。子程序的調(diào)用涉及到堆棧,在主程序中必須要正確設(shè)置堆棧指針。子程序嵌套是指在子程序執(zhí)行過程中,還可以調(diào)用另一個子程序。2023年12月14日34例4-13用程序?qū)崿F(xiàn)C=A*A+B*B。設(shè)A和B均小于10,A存在內(nèi)部RAM31H單元,B存在內(nèi)部RAM32H,把C存入內(nèi)部RAM33H單元。解:本題中包含2個求平方值,把求平方設(shè)計為子程序。子程序名稱:SQR功能:求小于10的數(shù)的平方(查表法)入口參數(shù)A,出口參數(shù)A2023年12月14日35
主程序:ORG0800HMOVSP,#60HMOVA,31HLCALLSQRMOVR1,AMOVA,32HLCALLSQRADDA,R1MOV33H,ASJMP $2023年12月14日36ORG0900HSQR:ADDA,#01HMOVCA,@A+PCRETTAB:DB0,1,4,9,16DB25,36,49,64,81END堆棧變化:畫圖說明2023年12月14日37TheEnd習(xí)題:4-6試編程將內(nèi)部RAM40H---60H單元內(nèi)容傳送到外部RAM以2000H為首地址的存儲區(qū)中4-7在外部RAM首地址為DATA的存貯器中,有10個字節(jié)的數(shù)據(jù),試編程將每個字節(jié)的最高位無條件置“1”4-8編寫程序?qū)⑼獠縍AM3000H開始的13個單元中的數(shù)據(jù)隔一個傳送到內(nèi)部RAM30H開始的區(qū)域4-9編程將外部RAM地址為1000H---1030H的數(shù)據(jù)塊全部搬遷到內(nèi)部RAM30H---60H中,并將原來數(shù)據(jù)全部清零。4-18設(shè)在外部RAM2000H---2004H單元中,存放有5個壓縮BCD碼,試編程將它們轉(zhuǎn)換成ASCII碼,存放到以2005H為首地址的外部RAM中。4-21根據(jù)圖3-10,設(shè)計燈亮移位程序,要求8個發(fā)光二極管每次亮1個,點亮40ms。順次循環(huán)右移點亮,循環(huán)不止。4-22根據(jù)圖3-10,設(shè)計亮燈程序,要求8個發(fā)光二極管間隔分成2組,每組4個,2組交叉點亮,變換時間為100ms,反復(fù)循環(huán)不止。2023年12月14日392023年12月14日40該單片機系統(tǒng)的晶振頻率為12MHz3-14已知(A)=5Bh,(R1)=40H,(40H)=C3H,(PSW)=81H,試寫出各條指令單獨執(zhí)行結(jié)果,并說明程序狀態(tài)字的狀態(tài)。
(1)XCHA,R1(2)XCH A,40H (3)XCH A,@R1 (4)XCHD A,@R1 (5)SWAP A (6)ADD A,R1 (7)ADD A,40H (8)ADD A,#40H (9)ADDC
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 酸罐區(qū)土建施工方案
- 2025年中考語文寫作素材積累:《人民日報》作文素材之人文情懷
- 2025年黑龍江幼兒師范高等??茖W(xué)校單招職業(yè)技能測試題庫及參考答案
- 2024-2025學(xué)年新教材高中數(shù)學(xué) 第五章 三角函數(shù) 5.4 三角函數(shù)的圖象與性質(zhì)(5)教學(xué)實錄 新人教A版必修第一冊
- 2024-2025學(xué)年新教材高中生物 第4章 細(xì)胞的生命歷程 第3節(jié) 細(xì)胞凋亡是編程性死亡教學(xué)實錄 浙科版必修第一冊
- 1挑戰(zhàn)第一次 第一課時 (教學(xué)設(shè)計)-部編版道德與法治二年級下冊
- 城市智慧水務(wù)建設(shè)與管理解決方案
- 6《有多少浪費本可避免 餐桌上的浪費》教學(xué)設(shè)計-2023-2024學(xué)年道德與法治四年級下冊統(tǒng)編版
- 11一塊奶酪教學(xué)設(shè)計-2024-2025學(xué)年三年級上冊語文統(tǒng)編版
- 三農(nóng)技術(shù)推廣體系構(gòu)建指南
- 統(tǒng)編版(2024)道德與法治七年級下冊第一單元 珍惜青春時光 單元測試卷(含答案)
- 2025年甘肅省張掖市民樂縣招聘專業(yè)技術(shù)人員9人(第二期)歷年高頻重點模擬試卷提升(共500題附帶答案詳解)
- 2025年湖北武漢理工大學(xué)學(xué)生輔導(dǎo)員招聘18人歷年高頻重點模擬試卷提升(共500題附帶答案詳解)
- 北京服裝學(xué)院招聘考試題庫2024
- 金融科技概論-課件 第十五章 金融科技監(jiān)管與監(jiān)管科技
- 2024年江蘇省南京市中考數(shù)學(xué)試卷真題(含答案解析)
- 物資裝卸培訓(xùn)課件
- DB5101-T 71-2020 成都市電動汽車充電設(shè)施 安全管理規(guī)范
- 2025年北京電子科技職業(yè)學(xué)院高職單招職業(yè)技能測試近5年常考版參考題庫含答案解析
- 2025年烏蘭察布醫(yī)學(xué)高等專科學(xué)校高職單招職業(yè)技能測試近5年??及鎱⒖碱}庫含答案解析
- 2024年二級建造師之二建機電工程實務(wù)考試題庫含完整答案
評論
0/150
提交評論