版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
一、匯編語言源程序的匯編
源程序(匯編指令程序)
匯編
目標(biāo)程序(機(jī)器碼指令程序)匯編指令與機(jī)器碼指令有一一對(duì)應(yīng)的關(guān)系。第四章匯編語言程序設(shè)計(jì)§4-1匯編語言源程序的匯編與偽指令匯編有兩種方法:手工匯編、機(jī)器匯編。1、手工匯編:第一次匯編:確定地址,翻譯成各條機(jī)器碼,字符標(biāo)號(hào)原樣寫出;第二次匯編:標(biāo)號(hào)代真,將字符標(biāo)號(hào)用所計(jì)算出的具體地址值或偏移量代換。
源程序
目標(biāo)程序
地址
ORG1000HSTART:MOVR0,2FHMOVR2,#00HMOVA,@R0MOVR3,AINCR3SJMPNEXT
LOOP:INCR0CJNE@R0,#44H,NEXT
INCR2NEXT:DJNZR3,LOOP
MOV2AH,R2SJMP$END
第一次匯編第二次匯編1000A82F10027A001004E61005FB10060B100780NEXT100908100AB644NEXT100D0A100EDBLOOP10108A2A101280FEA82F7A00E6FB0B800508B644010ADBF98A2A80FE2、機(jī)器匯編兩次掃描過程:第一次掃描:檢查語法錯(cuò)誤,確定符號(hào)名字;建立使用的全部符號(hào)名字表;對(duì)每條指令查一次表,將指令碼存入。第二次掃描:是在第一次掃描基礎(chǔ)上,將符號(hào)地址轉(zhuǎn)換成地址(代真);完成翻譯工作的軟件稱為“匯編程序”。注意與通常所說的“匯編語言源程序”或“匯編指令程序”的區(qū)別。偽指令是對(duì)源程序的匯編過程進(jìn)行控制的指令,但其在匯編中不產(chǎn)生機(jī)器碼。故稱為偽指令。二、偽指令
1、起始地址偽指令ORGaddr16
用于規(guī)定目標(biāo)程序段或數(shù)據(jù)塊的起始地址,設(shè)置在程序開始處。2、匯編結(jié)束偽指令END
告訴匯編程序,對(duì)源程序的匯編到此結(jié)束。一個(gè)程序中只出現(xiàn)一次,在末尾。3、賦值偽指令EQU
告訴匯編程序,將匯編語句操作數(shù)的值賦予本語句的標(biāo)號(hào)。
格式標(biāo)號(hào)名稱EQU
數(shù)值或匯編符號(hào)“標(biāo)號(hào)名稱”在源程序中可以作為數(shù)據(jù)地址、代碼地址、位地址前面加上#可當(dāng)作立即數(shù)。先定義后使用,放在程序開頭。
4、定義字節(jié)偽指令DB(definebyte)
告訴匯編程序從指定的地址單元開始,定義若干字節(jié)存儲(chǔ)單元并賦初值。
格式[標(biāo)號(hào):]
DB
字節(jié)數(shù)據(jù)或字節(jié)數(shù)據(jù)表例、ORG1000HPIOI:DW7654H,126、數(shù)據(jù)地址賦值偽指令DATA
將表達(dá)式指定的數(shù)據(jù)地址賦予規(guī)定的字符名稱格式:字符名稱DATA
表達(dá)式注:該指令與EQU 指令相似,只是,可先使用后定義,放于程序開頭、結(jié)尾均可。5、定義字偽指令DW(defineword)從指定地址開始,定義若干個(gè)16個(gè)位數(shù)據(jù),高八位存入低地址,低八位存入高地址。
(1000H)=76H,(1001H)=54H,(1002H)=00H,(1003H)=0CH7、定義空間偽指令DS(definestore)
從指定地址開始,保留由表達(dá)式指定的若干字節(jié)空間作為備用空間。格式:[標(biāo)號(hào):]DS表達(dá)式例2、ORG1000HDS0AHDB71H,11H,12H;從100AH開始存放;71H、11H、12H。
8、位地址賦值偽指令BIT將位地址賦予規(guī)定的字符名稱。格式:字符名稱BIT
位地址例3、X1BITP1.2
相當(dāng)于X1EQUP1.2
基本要求:程序編寫做到:占用存儲(chǔ)空間少;運(yùn)行時(shí)間短;程序的編制、調(diào)試及排錯(cuò)所需時(shí)間短;結(jié)構(gòu)清晰,易讀、易于移植。
常見基本結(jié)構(gòu):順序結(jié)構(gòu)分支結(jié)構(gòu)循環(huán)結(jié)構(gòu)
§4-2匯編語言源程序的
基本結(jié)構(gòu)與應(yīng)用舉例語句3語句2順序結(jié)構(gòu)
入口語句1出口分支結(jié)構(gòu)入口條件滿足否?
分支1出口YN
分支2循環(huán)結(jié)構(gòu)入口
處理
修改條件條件滿足否?Y出口N一、順序程序例1、設(shè)在外RAM的60H單元存有1個(gè)字節(jié)代碼,要求將其分解成兩個(gè)4位字段,高4位存入原單元的低4位,其低4位存入61H單元的低4位,且要求這兩個(gè)單元的高4位均為0,試編制完整程序。
分析:####
¥¥¥¥0000
####0000
¥¥¥¥開始A←(60H)B←A考慮將A中內(nèi)容用兩個(gè)寄存器存放,然后便可對(duì)A的不同部分進(jìn)行處理了。屏蔽A低四位(60H)←AA←B屏蔽A高四位(61H)←A結(jié)束解:ORL1000HMODE:MOVR0,#60HMOVXA,@R0MOVB,AANLA,#0F0HSWAPAMOVX@R0,AANLB,#0FHMOVA,BINCR0MOVX@R0,AEND
因?yàn)槭峭獠繑?shù)據(jù)傳送,所以必須使用間接尋址方式,考慮工作寄存器更為快速方便。二、分支結(jié)構(gòu)與分支程序設(shè)計(jì)分支結(jié)構(gòu)分為三種基本形式:條件為真?過程S條件為真?S1YNYNS2條件k=?S2S1…Sn001n雙向分支之一雙向分支之二多向分支這個(gè)更常用解:本題關(guān)鍵是判a是正數(shù),還是負(fù)數(shù);根據(jù)ACC.7判斷。
ORG1000HJBACC.7,ADDABSUBAB:CLRCSUBBA,BSJMPDONEADDAB:ADDA,BDONE:SJMP$END例2、設(shè)a存放在累加器A中,b存放在寄存器B中,要求按下式計(jì)算Y值,并將結(jié)果Y存于累加器A中,試編寫程序。
a-b(a≥0)a+b(a<0)
a<0?A←a+bYNA←a-bY=開始結(jié)束這種簡(jiǎn)單程序可以不用列流程,而直接編程條件k=?S2S1…Sn001n多向分支書例4.2.7某條件的多值情況可按多向分支A>0?(FUNC)←AYNA←1開始結(jié)束A←(VAR)A=0?A←-1NY也可按多次兩向分支先判斷后賦值A(chǔ)<0?(FUNC)←AYNA←R0
開始結(jié)束A←(VAR)A=0?R0←-1NYR0←1第二次分支前在此處先賦值,但不可把值賦給A,因?yàn)锳此處存儲(chǔ)輸入值,暫不能丟掉.先賦值后判斷例3、根據(jù)R3的值,控制轉(zhuǎn)發(fā)同8個(gè)分支程序R3=0,轉(zhuǎn)向SUBR0R3=1,轉(zhuǎn)向SUBR1…………R3=7,轉(zhuǎn)向SUBR7一個(gè)采用多向分支的例題擬以多向分支的形式實(shí)現(xiàn)解:擬運(yùn)用JMP@A+DPTR指令
MOVDPTR,#JMPTABMOVA,R3ADDA,R3JMP@A+DPTRJMPTAB:AJMPSUBR0;轉(zhuǎn)移指令表
AJMPSUBR1……AJMPSUBR7三、循環(huán)結(jié)構(gòu)與循環(huán)程序設(shè)計(jì)循環(huán)結(jié)構(gòu)使程序簡(jiǎn)練,大大節(jié)省存儲(chǔ)空間。循環(huán)程序包含四部分:1、初始化部分(循環(huán)計(jì)數(shù)器、變量置初值)2、循環(huán)處理部分(主體,需要重復(fù)執(zhí)行的部分)3、循環(huán)控制部分(修改地址指針、修改變量、檢測(cè)循環(huán)結(jié)束條件)4、循環(huán)結(jié)束部分(對(duì)結(jié)果分析、處理,存放結(jié)果)先處理,后判斷:
開始初始化部分處理部分修改變量循環(huán)結(jié)束?結(jié)束部分結(jié)束YN先判斷,后處理:
開始初始化部分修改變量循環(huán)結(jié)束?Y結(jié)束部分結(jié)束N處理部分常用于通過初始值進(jìn)行判斷的場(chǎng)合常用于根據(jù)處理的結(jié)果進(jìn)行判斷的場(chǎng)合循環(huán)結(jié)構(gòu)的基本形式:?jiǎn)沃匮h(huán)、多重循環(huán)循環(huán)次數(shù)已知,可用計(jì)數(shù)器控制循環(huán)次數(shù);循環(huán)次數(shù)未知,按問題條件控制循環(huán)是否結(jié)束。
(RESULT)←AYN開始結(jié)束A←0,R0←BLOCKR1←100R1=0?A←A+(R0)R1-1求和常用方式1、單循環(huán)程序(1)循環(huán)次數(shù)是已知的程序例1、設(shè)有100個(gè)單字節(jié)數(shù)據(jù),連續(xù)存放在內(nèi)部數(shù)據(jù)存儲(chǔ)器中,起始地址為BLOCK(11H)單元;數(shù)據(jù)求和結(jié)果取為單字節(jié)數(shù),存在RESULT(10H)單元。試編寫程序。解:ORG1020HBLOCKDATA11HRESULTDATA10HMOVA,#0MOVR0,#BLOCKMOVR1,#100初始化部分LOOP:ADDA,@R0INCR0DJNZR1,LOOPMOVRESULT,ALP:SJMPLP循環(huán)體結(jié)束部分循環(huán)處理部分循環(huán)控制部分是先處理后判斷,還是先判斷后處理?
循環(huán)次數(shù)已知的程序設(shè)計(jì)靠計(jì)數(shù)器是否到達(dá)控制值來退出循環(huán)書例4.2.10典型的大循環(huán)里有分支轉(zhuǎn)移課后自行消化.ORG1000HSTADADATA20HSLANGDATA1FHMOVR0,#STADA-1MOVB,#0FFHCRLOP:INCR0INCBMOVXA,@R0CJNEA,#0DH,CRLOPMOVSLANG,BSJMP$END(2)循環(huán)次數(shù)未知的程序例2、設(shè)用戶用鍵盤輸入長(zhǎng)度不超過100字節(jié)的字符串放在8031單片機(jī)外部RAM以20H為首地址的連續(xù)單元,該字符串用回車符CR(‘CR’=0DH)作為結(jié)束標(biāo)志,要求統(tǒng)計(jì)此字符串的長(zhǎng)度并存入內(nèi)部RAM的1FH單元中。解:從首單元開始取數(shù),每取一數(shù)判斷其是否為‘CR’,是則結(jié)束。
2、多重循環(huán)設(shè)計(jì)一個(gè)例子(手寫)YN開始結(jié)束R2←#199B-1≠0??jī)?nèi)循環(huán)250×2TB←#250R2-1≠0?外循環(huán):199×(2T+內(nèi)循環(huán)+2T)+1T=100297TYN四、查表程序設(shè)計(jì)所謂查表法,就是把事先計(jì)算或測(cè)得的數(shù)據(jù)按一定的順序編制成數(shù)據(jù)表,存放在計(jì)算機(jī)的程序存儲(chǔ)器中。查表程序的任務(wù),就是根據(jù)給定的條件或被測(cè)參數(shù)的值,從表中查出所需要的結(jié)果。書例4.2.15(書中題目表達(dá)有問題請(qǐng)更正)該題的思考:怎樣運(yùn)用查表方式將表中數(shù)據(jù)一一讀出?讀出的數(shù)據(jù)用什么指令與KEY單元中的關(guān)鍵字比較?涉及到的判斷分支有哪些?-----不等與相等的區(qū)別處理;始終未找到怎樣處理?4.程序中為什么要PUSHACC?先講流程,講完流程再讓學(xué)生看5分鐘,并思考問題由于程序較復(fù)雜,視情講解。非考核區(qū)域………………..MOVCA,@A+PCCJNEA,CHECK,A13個(gè)字節(jié)指令MOVR2,DPH2MOVR3,DPL2DONE:SJMPDONE2A1:POPACC2INCA1INCDPTR1DJNZR4,LOOP2MOVR2,#02MOVR3,#02AJMPDONE2TABLE:DB…………這個(gè)決定了查表地址偏移量為21不等與相等的區(qū)別處理判斷循環(huán),始終未找到的處理恢復(fù)地址偏移量通過查表指令將表中數(shù)據(jù)讀出………………..MOVCA,@A+DPTRCJNEA,CHECK,A1MOVR2,DPHMOVR3,DPLDONE:SJMPDONEA1:POPACCINCAINCDPTRDJNZR4,LOOPMOVR2,#0MOVR3,#0AJMPDONETABLE:DB…………用DPTR不用管地址偏移量五、子程序設(shè)計(jì)
經(jīng)常重復(fù)使用的程序宜設(shè)計(jì)成子程序。子程序在結(jié)構(gòu)上應(yīng)具有通用性和獨(dú)立性,編寫子程序應(yīng)注意以下幾點(diǎn):子程序應(yīng)取名,常用標(biāo)號(hào)作為其名稱,也代表子程序的入口地址。主程序調(diào)用子程序必須有LCALL等指令實(shí)現(xiàn),子程序返回必須在末尾處執(zhí)行RET等指令。調(diào)用子程序應(yīng)特別注意保護(hù)現(xiàn)場(chǎng)和恢復(fù)現(xiàn)場(chǎng)。LCALL等指令只自動(dòng)對(duì)PC指針進(jìn)行保護(hù)和恢復(fù),其它重要內(nèi)容,需要客戶自行編寫現(xiàn)場(chǎng)保護(hù)與恢復(fù)的軟件。調(diào)用子程序,要能正確傳送參數(shù),即要滿足入口條件和出口條件。該程序幾個(gè)特點(diǎn):求平方通過子程序?qū)崿F(xiàn)。子程序的平方通過查表程序?qū)崿F(xiàn)。入口參數(shù)和出口參數(shù)都通過累加器A來進(jìn)行傳送。書例4.2.17-----看5分鐘調(diào)用子程序時(shí)參數(shù)傳送的三種方式:利用寄存器或片內(nèi)存儲(chǔ)單元直接傳送參數(shù)。利用寄存器傳送參數(shù)的地址。利用堆棧傳送參數(shù)。子程序例程在HEX單元中存有兩位十六進(jìn)制數(shù),試編程分別把它們轉(zhuǎn)換成ASCII碼,并存入ASC和ASC+1單元。比如存放的是0010,0100,把它看成十六制進(jìn)數(shù)24H,就是分別找2與4的ASCII碼,然后存入目的地址單元。子程序例程(較復(fù)雜)解:核心動(dòng)作:十六制數(shù)的ASCII碼轉(zhuǎn)換可考慮采用子程序?qū)崿F(xiàn)。HEXDATA20HASCDATA21HORG0100HPUSHHEXACALLHASC
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 居民健康檔案管理培訓(xùn)
- 數(shù)控車削加工技術(shù) 課件 項(xiàng)目四 數(shù)控車削仿真加工
- 四川省成都市西藏中學(xué)2024-2025高一(1-5班)10月月考?xì)v史試卷 - 副本
- 黑龍江省綏化市海倫市第三中學(xué)2023-2024學(xué)年九年級(jí)上學(xué)期期中考試化學(xué)試卷(含解析)
- T-ZFDSA 01-2024 當(dāng)歸生姜羊肉湯制作標(biāo)準(zhǔn)
- 江蘇省泰州市姜堰區(qū)2024-2025學(xué)年七年級(jí)上學(xué)期11月期中考試數(shù)學(xué)試題(無答案)
- 算法工程師面試真題單選題100道及答案解析
- 人教版PEP(2024)三年級(jí)上冊(cè)《Unit 6 Useful numbers》Part A第2課時(shí)-教學(xué)課件
- 日常生活活動(dòng)能力訓(xùn)練版
- 圪柳溝安全生產(chǎn)責(zé)任制
- 湘文藝版八年級(jí)音樂下冊(cè)第4單元《紅旗頌》教學(xué)設(shè)計(jì)
- 軍事理論(2024年版)學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- 廣東省廣州市天河區(qū)2023-2024學(xué)年高一上學(xué)期11月期中考試化學(xué)試題
- 2024-2030年中國泳裝(泳裝)行業(yè)市場(chǎng)發(fā)展趨勢(shì)與前景展望戰(zhàn)略分析報(bào)告
- 廣東省動(dòng)物防疫條件審查場(chǎng)所選址風(fēng)險(xiǎn)評(píng)估表
- 國開2024年秋《生產(chǎn)與運(yùn)作管理》形成性考核1-4答案
- 臨床病理診斷報(bào)告管理制度
- 小學(xué)英語教師專業(yè)發(fā)展計(jì)劃6篇
- CATTI漢英詞匯手冊(cè)
- 《無人機(jī)法律法規(guī)知識(shí)》課件-第1章 民用航空法概述
- GB/Z 44306-2024顆粒質(zhì)量一致性評(píng)價(jià)指南
評(píng)論
0/150
提交評(píng)論