版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第十四章51匯編語言及程序設(shè)計(jì)
偽指令不是真正的指令,在匯編時(shí)不產(chǎn)生機(jī)器代碼。偽指令的功能主要是用來對(duì)匯編過程進(jìn)行某種控制。采用機(jī)器匯編的方法時(shí),源程序必須通過匯編程序的處理,才能轉(zhuǎn)換為計(jì)算機(jī)識(shí)別和執(zhí)行的機(jī)器語言。為此,在源程序中應(yīng)有向匯編程序發(fā)出的指示信息,告訴匯編程序如何完成匯編工作。如用偽指令給程序分配一定的存儲(chǔ)區(qū)、定義符號(hào)、指定暫存數(shù)據(jù)的RAM區(qū)等?!?.1偽指令一般用于確定匯編語言源程序或某數(shù)據(jù)塊在內(nèi)存存儲(chǔ)的首地址ORG2000HSTART:MOVA,#10H┇END在一個(gè)源程序中,可以多次使用ORG規(guī)定不同程序段的起始地址,但定義的地址順序應(yīng)該是從小到大,不允許交叉、重疊。1.ORG(起始匯編)偽指令ORG2000H┇ORG2500H┇ORG3000H┇ORG2500H┇ORG2000H┇ORG3000H┇
END是匯編語言源程序的結(jié)束標(biāo)志,常用于匯編語言源程序末尾,表示匯編結(jié)束。一個(gè)源程序只能有一個(gè)END命令,且置于程序的最后。在END以后所寫的指令,匯編程序都不予處理。2.END(結(jié)束匯編)偽指令字符名EQU數(shù)據(jù)或匯編符
ORG2000HKAEQUR1M1EQU20HSTRTEQU2500H MOVR0,#M1MOVKA,A┇ACALLSTRT┇END3.EQU(賦值)偽指令
①“字符名”不是標(biāo)號(hào),故它與EQU之間不能用“:”隔開;②“字符名”必須先賦值后使用,只能賦值一次;K1EQU30HMOVA,K1+1③在有些MCS-51匯編程序中,EQU定義的“字符名”不能在表達(dá)式中運(yùn)算。如下面語句就是錯(cuò)誤的。字符名DATA表達(dá)式①表達(dá)式允許是一個(gè)數(shù)據(jù)或地址,也可以是包含被定義的“字符名”在內(nèi)的表達(dá)式,但不能是匯編符號(hào),如R0~R7等
②DATA偽指令可放在程序的任何位置,比EQU偽指令靈活
4.DATA(賦值)偽指令
ORG2000HMDATA20HDELAYXDATA08AFHMOVA,M┇LCALLDELAY┇END
③DATA偽指令一般用于定義程序中所用的8位或16位的數(shù)據(jù)或地址,但在有些匯編程序中,只允許DATA語句定義8位數(shù)據(jù)或地址,定義16位的數(shù)據(jù)或地址時(shí),需使用XDATA語句
DB偽指令可用來為匯編語言源程序在內(nèi)存的某區(qū)域中定義一個(gè)或一串字節(jié)。[標(biāo)號(hào):]DB項(xiàng)或項(xiàng)表ORG2000HTAB1:DB30H,8AH,7FH,73DB'5','A','BCD'5.DB(定義字節(jié))偽指令(2000H)=30H(2001H)=8AH(2002H)=7FH(2003H)=49H;十進(jìn)制數(shù)73以十六進(jìn)制數(shù)存放(2004H)=35H;35H是數(shù)字5的ASCII碼(2005H)=41H;41H是字母A的ASCII碼(2006H)=42H;42H是字符串'BCD'中B的ASCII碼(2007H)=43H;43H是字符串'BCD'中C的ASCII碼(2008H)=44H;44H是字符串'BCD'中D的ASCII碼
DW偽指令稱為定義字偽指令,用于為源程序在內(nèi)存某個(gè)區(qū)域定義一個(gè)字或一串字。其格式為:
[標(biāo)號(hào):]DW項(xiàng)或項(xiàng)表
ORG1500HTAB2:DW1234H,80H(1500H)=12H,(1501H)=34H,(1502H)=00H,(1503H)=80H6.DW(定義字)偽指令
DS偽指令稱為定義存儲(chǔ)空間偽指令。
[標(biāo)號(hào):]DS表達(dá)式
ORG1000HDS20HDB30H,8FH匯編后從1000H開始,預(yù)留32(20H)個(gè)字節(jié)的內(nèi)存單元,然后從1020H開始,按照下一條DB指令賦值,即(1020H)=30H,(1021H)=8FH。7.DS(定義存儲(chǔ)空間)偽指令
BIT偽指令稱為位地址賦值偽指令,用于給以符號(hào)形式的位地址賦值。字符名BIT位地址ORG0500HK1BIT20HK2BIT30HYBITP1.0BG:MOVC,K1ANLC,K2MOVY,C┇END8.BIT(位地址賦值)偽指令§4.2匯編語言的程序設(shè)計(jì)
順序結(jié)構(gòu)分支結(jié)構(gòu)循環(huán)結(jié)構(gòu)查表結(jié)構(gòu)子程序結(jié)構(gòu)順序結(jié)構(gòu)程序是最簡單的程序結(jié)構(gòu),也稱為直線結(jié)構(gòu)程序。這種程序中既無分支、循環(huán),也不調(diào)用子程序,程序按順序一條一條地執(zhí)行指令。
【例】拆字程序。將30H單元內(nèi)的兩位BCD碼拆開并轉(zhuǎn)換成ASCII碼,將轉(zhuǎn)換后的ASCII碼放在31H和32H單元,并讓低位ASCII碼放在32H單元。1.順序結(jié)構(gòu)程序設(shè)計(jì)
ORG 2000HMOV A,30H ANLA,#0FH ADD A,#30H MOV 32H,A MOV A,30H SWAPA ANL A,#0FH ADD A,#30H MOV 31H,ASJMP$END例.將60H單元中的8位無符號(hào)數(shù)轉(zhuǎn)換成三位BCD碼,并存放在BAI(百位)、SHI(十位)和GE(個(gè)位)三個(gè)單元中。ORG2000HBAIWDATA40HSHIWDATA 41HGEWDATA 42HMOV A,60H MOVB,#100 DIV AB MOVBAIW,A
MOVA,B MOVB,#10 DIVABMOVSHIW,A MOVGEW,B SJMP$END例.將兩個(gè)三字節(jié)無符號(hào)數(shù)相加,其中一個(gè)加數(shù)在內(nèi)部RAM的32H、31H和30H單元;另一個(gè)加數(shù)在內(nèi)部RAM的35H、34H和33H單元,要求相加后的和存入32H、31H和30H單元,進(jìn)位存入位尋址區(qū)的20H單元中。ORG2000HMOV R0,#30H MOV R1,#33H MOV A,@R0 ADD A,@R1 MOV @R0,A INC R0 INC R1MOV A,@R0 ADDCA,@R1MOV @R0,A INC R0 INC R1MOV A,@R0 ADDCA, @R1 MOV @R0,A MOV 20H,C END例.16位數(shù)求補(bǔ)。已知16位二進(jìn)制數(shù)在R1、R0中,將此16位二進(jìn)制數(shù)求補(bǔ),求補(bǔ)結(jié)果存入內(nèi)部RAM31H、30H單元。ORG2000HMOVA,R0 CPLA ADDA, #01HMOV30H,A MOVA,R1 CPL A ADDCA,#00H MOV31H,A END分支結(jié)構(gòu)程序的特點(diǎn)就是程序中含有轉(zhuǎn)移指令分支程序的設(shè)計(jì)要點(diǎn)如下:(1)先建立可供條件轉(zhuǎn)移指令測試的條件;(2)選用合適的條件轉(zhuǎn)移指令;(3)在轉(zhuǎn)移的目的地址處設(shè)定標(biāo)號(hào)。在MCS-51指令系統(tǒng)中,通過條件判斷,實(shí)現(xiàn)單分支程序轉(zhuǎn)移的指令有JZ,JNZ,CJNE和DJNZ等。此外還有以位狀態(tài)作為條件進(jìn)行程序分支的指令,如JC,JNC,JB,JNB和JBC等。使用這些指令可以完成以0、1、正、負(fù),以及相等、不相等作為各種條件判斷依據(jù)的程序轉(zhuǎn)移。2.分支結(jié)構(gòu)程序設(shè)計(jì)例求單字節(jié)有符號(hào)二進(jìn)制數(shù)的補(bǔ)碼
ORG2000HJNBACC.7,NEGMOVC,ACC.7MOV00H,CCPLAADDA,#1MOVC,00HMOVACC.7,CNEG:SJMP$END例.已知VAR單元中有一自變量X,請(qǐng)按如下條件編出求函數(shù)值Z并將它存入FUN單元的程序。
ORG2000HVARDATA40HFUNDATA41HSTART:MOVA,VAR JZSAVE JNBACC.7,ZHENMOVA,#0FFHSJMP SAVEZHEN:MOVA,#01HSAVE:MOVFUN,ASJMP $END
ORG2000HVARDATA40HFUNDATA41HSTART:MOVA,VAR CJNE A,#0,NEQ SJMPSAVE NEQ:JNBACC.7,ZHEN;
MOVA,#0FFH SJMP SAVEZHEN:MOVA,#01HSAVE:MOVFUN,ASJMP $END
ORG2000HVARDATA40HFUNDATA41HSTART:MOVA,VAR JZSAVE MOVR1,#0FFH JBACC.7,NEGMOVR1,#01H SJMP SAVENEG:MOVA,R1SAVE:MOVFUN,A SJMP $END例.兩個(gè)帶符號(hào)數(shù)分別存于ONE和TWO單元,試編程比較大小,并將大的數(shù)存入MAX單元。若X-Y為正,則
OV=0,X>YOV=1,X<Y若X-Y為負(fù),則
OV=0,X<YOV=1,X>YORG2000HONEDATA30HTWODATA31HMAXDATA32HCLRC MOVA,ONESUBBA,TWOJZXMAX JBACC.7,NEGJBOV,YMAXSJMPXMAX NEG:JBOV,XMAX YMAX:MOVA,TWO SJMPSAVEXMAX:MOVA,ONE SAVE:MOVMAX,A SJMP$END3.循環(huán)結(jié)構(gòu)程序設(shè)計(jì)(1)循環(huán)初始化:
循環(huán)初始化程序段一般位于循環(huán)程序的開頭,位于循環(huán)體外,用于設(shè)置循環(huán)過程工作單元的初始值。例如,設(shè)置循環(huán)次數(shù)計(jì)數(shù)器、地址指針初值等(2)循環(huán)處理:循環(huán)處理程序段位于循環(huán)體內(nèi),是需要重復(fù)執(zhí)行的程序段部分。(4)循環(huán)結(jié)束:循環(huán)結(jié)束程序段用于處理循環(huán)程序的最終結(jié)果以及恢復(fù)各工作單元的初始值。在循環(huán)次數(shù)已知的情況下,用計(jì)數(shù)方法控制循環(huán)的終止。循環(huán)次數(shù)未知的情況下,可根據(jù)某種條件判斷決定是否終止循環(huán)。(3)循環(huán)控制:循環(huán)控制程序段也位于循環(huán)體內(nèi),用于判斷循環(huán)條件是否滿足,不滿足則轉(zhuǎn)去執(zhí)行循環(huán)處理程序部分,否則,退出循環(huán)。一般采用DJNZ指令來自動(dòng)修改控制變量并結(jié)束循環(huán)。例.將內(nèi)部數(shù)據(jù)存儲(chǔ)器30H~7FH單元中的內(nèi)容送到外部數(shù)據(jù)存儲(chǔ)器以1000H開始的連續(xù)單元中去。LOOP:MOVA,@R0MOVX@DPTR,A INCR0 INCDPTRDJNZR7,LOOPSJMP$
ENDORG2000HTAB1EQU1000HMOVR0,#30HMOVDPTR,#TAB1 MOVR7,#50H例.已知內(nèi)部RAM的ADDR1單元開始有一無符號(hào)數(shù)據(jù)塊,塊長在LEN單元,請(qǐng)編出求數(shù)據(jù)塊中各數(shù)累加和并存數(shù)外部RAM的SUM1單元的程序。LOOP:ADDA,@R1 INCR1CHECK:DJNZR2,LOOP MOVX@DPTR,A SJMP$ ENDORG2000HADDR1EQU30HLENEQU20HSUM1EQU2000HMOVDPTR,#SUM1CLRA MOVR2,LEN MOVR1,#ADDR1 INCR2 SJMPCHECK
NEXT:ADDA,@R1 INCR1 DJNZR2,NEXT MOVX@DPTR,A SJMP$ ENDORG2000HADDR1EQU30HLENEQU20HSUM1EQU2000HMOVDPTR,#SUM1CLRA MOVR2,LEN MOVR1,#ADDR1NEXT1:JCNEXT MOVMAX,A NEXT:INCR1 DJNZLEN,LOOPSJMP$ END例.已知內(nèi)部RAMADDR1為起始地址的數(shù)據(jù)塊內(nèi)部數(shù)據(jù)是無符號(hào)數(shù),塊長在LEN單元內(nèi),請(qǐng)編程求出數(shù)據(jù)塊中的最大值并存入MAX單元。ORG2000HADDR1DATA50HLENDATA30HMAXDATA32HMOVMAX,#00H MOVR1,#ADDR1LOOP:MOVA,@R1 CJNEA,MAX,NEXT14.查表結(jié)構(gòu)程序設(shè)計(jì)所謂查表就是根據(jù)存放在ROM中的數(shù)據(jù)表格的項(xiàng)數(shù)來查找和它對(duì)應(yīng)的表中值。即:把事先計(jì)算或?qū)嶒?yàn)數(shù)據(jù)按一定順序編成表格,存于ROM中,然后根據(jù)輸入?yún)?shù)值,從表中取出結(jié)果。例.求函數(shù)Y=X!(X=0,…,7)的值。設(shè)自變量存放在ADDR1單元,表頭的地址為TAB1,表中每個(gè)數(shù)據(jù)占兩個(gè)字節(jié),Y值為雙字節(jié),存放在寄存器R2R3中,R3存放Y值低字節(jié),請(qǐng)編出查表程序。ORG2000HADDR1EQU20HSTART:MOVA,ADDR1 ADDA,ADDR1 MOVR3,A ADDA,#07H MOVCA,@A+PC XCHA,R3 ADDA,#04H MOVCA,@A+PC MOVR2,ASJMP$TAB1:DB01,00,01,00,02,00,06,00DB24H,00,20H,01,20H,07,40H,50HEND例.已知R0低四位有一個(gè)十六進(jìn)制數(shù)(0~F中的一個(gè)),請(qǐng)編出能把它轉(zhuǎn)換成相應(yīng)ASCII碼并送入R0的程序。ORG2000HMOVA,R0 ANLA,#0FH CJNEA,#10,NEXT1 NEXT1:JNCNEXT2 ADDA,#30H SJMPSAVE NEXT2:ADDA,#37H SAVE:MOVR0,A SJMP$ ENDORG2000H MOVA,R0 ANLA,#0FH ADDA,#90H DAA ADDCA,#40H DAA MOVR0,A SJMP$ ENDORG2000H MOVA,R0 ANLA,#0FH ADDA,#03H MOVCA,@A+PC MOVR0,A SJMP$ TAB: DB‘0’,’1’,’2’,’3’,’4’ DB‘5’,’6’,’7’,’8’,’9’ DB‘A’,’B’,’C’,’D’,’E’,’F’END5.子程序結(jié)構(gòu)程序設(shè)計(jì)子程序在結(jié)構(gòu)上應(yīng)具有通用性、獨(dú)立性和可調(diào)用性①子程序的第一條指令地址稱為子程序的始地址或入口地址。該指令前必須有標(biāo)號(hào),標(biāo)號(hào)應(yīng)以子程序任務(wù)定名。例如求和子程序常以ADD1為標(biāo)號(hào)。②主程序調(diào)用子程序是通過安排在主程序中的調(diào)用指令實(shí)現(xiàn)的,在子程序末尾放置RET子程序返回指令。③子程序調(diào)用和返回指令能自動(dòng)保護(hù)和恢復(fù)斷點(diǎn)地址,但對(duì)需要保護(hù)的工作寄存器、特殊寄存器和內(nèi)存單元中的內(nèi)容,就必須在子程序開始和末尾(RET指令前)安排保護(hù)和恢復(fù)的指令。⑤子程序參數(shù)可以分為入口參數(shù)和出口參數(shù)兩類:入口參數(shù)是指子程序需要的原
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2019-2025年中國羊毛紗行業(yè)市場調(diào)研分析及投資戰(zhàn)略咨詢報(bào)告
- 高一學(xué)生學(xué)習(xí)計(jì)劃15篇
- 一年級(jí)語文拼音教案
- 我的學(xué)習(xí)計(jì)劃15篇
- 《童年》讀后感(匯編15篇)
- 小班戶外活動(dòng)親子踩墊子游戲教案
- 初一政治教學(xué)計(jì)劃范文集錦六篇
- 公司年會(huì)活動(dòng)方案模板錦集六篇
- 乒乓球比賽作文300字集合10篇
- 冀教版四年級(jí)科學(xué)上冊(cè)第一單元《物體的運(yùn)動(dòng)》教案
- GB/T 45016-2024發(fā)動(dòng)機(jī)附件帶傳動(dòng)系統(tǒng)機(jī)械式自動(dòng)張緊輪試驗(yàn)方法
- 南寧市三好學(xué)生主要事跡(8篇)
- 2024版玻璃幕墻工程材料采購合同2篇
- 2025年婦產(chǎn)科工作計(jì)劃
- 《寒假安全教育班會(huì)》課件模板四套
- (T8聯(lián)考)2025屆高三部分重點(diǎn)中學(xué)12月第一次聯(lián)考 生物試卷(含答案詳解)
- JGJ46-2024 建筑與市政工程施工現(xiàn)場臨時(shí)用電安全技術(shù)標(biāo)準(zhǔn)
- 報(bào)關(guān)稅費(fèi)代繳服務(wù)合同
- 僅銷售預(yù)包裝食品經(jīng)營者備案信息采集表
- 信息化工程建設(shè)項(xiàng)目可行性研究報(bào)告編制要求
- 2024湖南株洲攸縣城關(guān)國家糧食儲(chǔ)備庫員工招聘2人歷年高頻難、易錯(cuò)點(diǎn)500題模擬試題附帶答案詳解
評(píng)論
0/150
提交評(píng)論