版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第四章匯編語言程序設(shè)計
4.1編程的步驟
匯編語言程序設(shè)計,要求設(shè)計者對計算機(jī)的硬件結(jié)構(gòu)(包括微機(jī)CPU、存貯器結(jié)構(gòu)、接口電路、外部設(shè)備特性等)有詳細(xì)了解,此外應(yīng)熟悉CPU的指令系統(tǒng)和編程的基本技巧。一.分析問題:任務(wù)是什么?工作過程(順序)?現(xiàn)有條件(硬件結(jié)構(gòu))、已知數(shù)據(jù)、運(yùn)算精度、處理速度等。二.確定算法:將實(shí)際問題轉(zhuǎn)化為程序處理模塊。三.畫程序流程圖: 橢圓(或桶型):程序的開始、結(jié)束。 矩形框:要進(jìn)行的工作。 菱形框:判斷,框內(nèi)為判斷內(nèi)容。 圓圈:程序連接點(diǎn)。 指向線:程序流向。 子程框:框內(nèi)為子程名。
畫流程圖時,按程序處理的順序,由上至下逐步繪制。對于復(fù)雜的系統(tǒng),可先畫總體流程圖(主程序框圖),再畫各模塊的局部框圖。四.編制程序
為便于理解程序,可以在程序中添加注釋。在一行語句中,分號“;”后面的內(nèi)容為注釋。注釋部分經(jīng)匯編后不會生成任何機(jī)器指令碼。若“*”在一行語句的第一列,則表示該行為注釋。注意:匯編指令中的冒號(:)、逗號(,)、分號(;)、星號(*)等標(biāo)點(diǎn)符號要在英文狀態(tài)下輸入才合法,如果在中文狀態(tài)下輸入,編譯器會認(rèn)作非法字符,在編寫匯編代碼時應(yīng)該注意把輸入法的狀態(tài)切換到英文輸入狀態(tài)。5.4HCS08CPU與HC08CPU的比較4.208匯編語言基礎(chǔ)4.2.108匯編源程序格式
把匯編語言寫成的源程序“翻譯”成機(jī)器語言的工具叫匯編程序或編譯器(Assembler),以下統(tǒng)一稱作編譯器。匯編語言源程序可以用通用的文本編輯軟件書寫編輯,以ASCII碼形式存盤。具體的編譯器對匯編語言源程序的格式有一定的要求,同時,編譯器除了識別單片機(jī)的指令系統(tǒng)外,為了能夠正確地產(chǎn)生目標(biāo)代碼以及方便匯編語言的編寫,編譯器還提供了一些在匯編時使用的命令、操作符號,在編寫匯編程序時,也必須正確使用它們。由于編譯器提供的指令僅是為了更好地做好“翻譯”工作,并不產(chǎn)生具體的機(jī)器指令,因此這些指令被稱為偽指令(PseudoInstruction)。匯編語言源程序以行為單位進(jìn)行設(shè)計,每一行最多可以包含以下四個部分:《嵌入式應(yīng)用技術(shù)基礎(chǔ)教程》課件標(biāo)號操作碼操作數(shù)注釋5.4HCS08CPU與HC08CPU的比較(1)標(biāo)號(Labels)對于標(biāo)號有下列要求及說明:如果一個語句有標(biāo)號,則標(biāo)號必須從第一列開始書寫??梢越M成標(biāo)號的字符有:字母A~Z、數(shù)字0~9、下劃線“_”、美元符號“$”,但開頭的第一個符號不能為數(shù)字和$。08編譯器不區(qū)分標(biāo)號中字母的大小寫。標(biāo)號應(yīng)小于16個字符。標(biāo)號后可以帶冒號“:”,也可以不帶冒號。一個標(biāo)號在一個程序中只能定義一次。若一行中第一個字符是星號“*”,這是標(biāo)號,表明該行為注釋。一行語句若只有標(biāo)號,編譯器將把當(dāng)前程序計數(shù)器的值賦給該標(biāo)號。若希望更多的編譯器能夠識別,建議標(biāo)號長度小于8個字符?!?”表示立即數(shù)。
操作碼不能從第一列開始,否則會被當(dāng)成標(biāo)號.《嵌入式應(yīng)用技術(shù)基礎(chǔ)教程》課件(2)操作碼(Opcodes)
操作碼包括指令碼以及后面即將介紹的08編譯器可以識別的偽指令碼。對于有標(biāo)號的行,必須用至少一個空格或制表符(TAB)將標(biāo)號與操作碼隔開。對于沒有標(biāo)號的行,不能從第一列開始寫指令碼,應(yīng)以空格或制表符(TAB)開頭。08編譯器不區(qū)分操作碼中字母的大小寫。
(3)操作數(shù)(Operands)
操作數(shù)可以是地址、標(biāo)號或指令碼定義的常數(shù),也可以是由偽運(yùn)算符構(gòu)成的表達(dá)式。08編譯器識別下列偽運(yùn)算符:加(+)、減(-)、乘(*)、除(/)、特殊除(\,允許被除數(shù)為0,此時認(rèn)為結(jié)果也為0)、左移(<)、右移(>)、取余數(shù)(%)、與(&)、或(|)、異或(^)。如果超過一種運(yùn)算或中間有插入空格應(yīng)使用{}把它們包含在內(nèi)。(4)注釋(Comments)注釋即是說明文字,若是處于指令之后,則用空格和分號“;”與指令分開,若整行為注釋文字,則在第一列寫上“;”或“*”?!肚度胧綉?yīng)用技術(shù)基礎(chǔ)教程》課件HCS08偽指令4.2.2偽指令(Pseudo):
在匯編程序中定義的各種匯編命令。用以指定程序的實(shí)際存放地址、定義各種文字符號的數(shù)值等。這些命令并不產(chǎn)生機(jī)器碼,僅起到匯編時的輔助作用。以下為HCS08匯編程序中定義的一些常用偽指令。
㈠.匯編起始命令:格式:ORG16位地址功能:定義此指令后面源程序的匯編地址(目標(biāo)程序存放的首地址)例:ORG2000HSTART:LDA#64H……
則規(guī)定LDA#64H從2000H單元開始存放,同時將標(biāo)號START定義為2000H。
*ORG指令可多次使用。㈡.匯編結(jié)束命令:
格式:END
功能:通知匯編程序結(jié)束匯編。
*END指令僅用于整個源程序的結(jié)束。
4.3匯編語言程序的基本結(jié)構(gòu)
一.順序程序:無分支、循環(huán),程序按順序逐條執(zhí)行用CODEWARRIOR編1+1;二.分支程序:按不同的條件執(zhí)行不同的程序分枝。程序?qū)嵗海ㄗ⒁鈼l件轉(zhuǎn)移語句在分支產(chǎn)生中的作用。)
例1:若$70單元中的8位2進(jìn)制有符號數(shù)為正(或0),則將其除以3,為負(fù)則求其絕對值,結(jié)果存人$71單元。ORG$E000
LDA $70 BLT ABS ;為負(fù)轉(zhuǎn)絕對值處理BMI行嗎?BLO呢? LDX #3 ;正數(shù),除以3 CLRH DIV BRA DONEABS: NEGA ;數(shù)值取反(按位取反后+1),不同于COM(按位取反)DONE:STA $71 BRA $END例2:按下式計算函數(shù)的值,結(jié)果存入FUN單元
FUN=X1-3 (若X1≧10)
=X1×8+9(若X1﹤10);X1為8位2進(jìn)制無符號數(shù)。
X1: EQU $70 FUN: EQU $80 ORG$E000 LDA X1
CMP #10
BLO LESS ;BCS LESSifc=1;BMIifN=1
SUB #3 BRA DONE LESS:LDX #8 MUL ADD#9 DONE:STA FUN BRA $END
習(xí)題一
1.若($70)=$24,將其傳送到$80單元,否則傳送到$81單元。講評:1.$24是立即數(shù)2.注意第一步結(jié)束要用BRA指令跳轉(zhuǎn).3.不能Y:EQU#$24.4.第1列只能用來寫標(biāo)號2.若X1(8位無符號數(shù))為奇數(shù),將其加1;為偶數(shù)將其除以2,結(jié)果送Y。
講評:1.怎么判斷奇偶。2.別忘用偽指令定義X1和Y。3.怎么實(shí)現(xiàn)處以23.按下式計算函數(shù)的值,結(jié)果存入RESULT單元
RESULT=(X1+5)×10(若X1≦20)
=X1÷6+18(若X1>20);X1為8位2進(jìn)制無符號數(shù)。
講評:1.怎么判斷≦。2.別忘用偽指令定義X1和RESULT。3.怎么實(shí)現(xiàn)處以6三.循環(huán)程序:
自動重復(fù)執(zhí)行某段程序。一般包括以下幾部分
㈠.置循環(huán)初值:設(shè)循環(huán)計數(shù)器初值、設(shè)數(shù)據(jù)地址指針、某些寄存器清零或設(shè)定常數(shù)等。㈡.循環(huán)體(循環(huán)工作部分):重復(fù)執(zhí)行的程序段。㈢.循環(huán)控制:保證循環(huán)正確進(jìn)行。⑴.修改控制變量:如數(shù)據(jù)指針,循環(huán)計數(shù)器等⑵.循環(huán)結(jié)果控制:判斷是否結(jié)果循環(huán)。
㈣.典型循環(huán)結(jié)構(gòu):
例1.無符號數(shù)求最大值內(nèi)部RAM,首址$60的30字節(jié)數(shù)據(jù)塊,求最大值,存于$80單元中。
MAX: EQU $80BLOCK: EQU $60 NUMB: EQU 30COUNT: EQU $81
ORG$E000 LDHX#$260 ;initializethestackpointer TXS CLI ;enableinterruptsSTART:LDX #BLOCK ;設(shè)數(shù)據(jù)指針 CLRH MOV #NUMB﹣1,COUNT ;比較次數(shù)→COUNT,比較NUMB-1次
LDA ,X ;取第一個數(shù)LOOP: INCX ;修改指針 CMP ,X ;A的數(shù)與指針處的數(shù)比較大小
BCC L1 ;A的數(shù)大,去L1ifc==0 LDA ,X ;A的數(shù)小就將指針處的數(shù)給AL1: DBNZ COUNT,LOOP ;比較的次數(shù)是否夠,先判斷再減1 STA MAX BRA $ END例2:統(tǒng)計以$60為首址的50字節(jié)有符號數(shù)中負(fù)數(shù)個數(shù),存入$A0單元。
DATA1: EQU $60MINUS: EQU $A0NUMB: EQU 50 ORG$E000 CLRH LDX #DATA1 LDA #NUMB PSHA ;采用DBNZ
1,SP,REL
MOV #0,MINUS;LOOP: LDA ,X
BPL NEXT;ifN==0;BMIifN==1 INC
MINUSNEXT: INCX
DBNZ 1,SP,LOOP AIS #1;?????? BRA $ END例3.試編寫程序,查找在內(nèi)RAM的$60—$80單元中是否有$AA這一數(shù)據(jù),若有,則將$81單元置為1,否則將其置為00。程序: ORG $E000 CLRH LDX #$60 MOV #0,$81 LDA #$AA ;要比較的字符LOOP: CBEQ ,X+,DONE ;相等跳轉(zhuǎn)
CPX #$81 ;查詢指針是否到 BNE LOOP BRA OVERDONE: MOV #1,$81OVER: NOP BRA $END* 注意此循環(huán)有兩種結(jié)束方式。
例4.軟件定時子程序
TIME1: EQU 100 TIME2: EQU 50 C1: EQU $60 C2: EQU $61TIME: MOV #TIME1,C1LOOP2: MOV #TIME2,C2LOOP1: NOP NOP DBNZ C2,LOOP1 DBNZ C1,LOOP2 RTS四.子程序結(jié)構(gòu)
㈠.基本結(jié)構(gòu):主程序用“調(diào)用”指令進(jìn)入子程,子程結(jié)束用“返回”指令回到主程斷點(diǎn)繼續(xù)執(zhí)行。*子程嵌套:在子程中調(diào)用其它子程。㈡.現(xiàn)場信息保護(hù):在主程和子程“爭用”某些寄存器時,應(yīng)將其內(nèi)容“保護(hù)”起來。(壓入堆棧)*在利用堆棧保護(hù)現(xiàn)場時,須注意保持堆棧平衡。㈢.工作參數(shù)的傳遞入口參數(shù):調(diào)用子程時,主程為子程設(shè)置的參數(shù)。主程將入口參數(shù)
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年國際汽車銷售代理合同
- 2024年度保險代理協(xié)議
- 2024年害蟲防治定期服務(wù)協(xié)議
- 2024區(qū)塊鏈技術(shù)應(yīng)用與合作合同
- 2024年專業(yè)同聲傳譯合作協(xié)議
- 2024版蔬菜采購合同書文書
- 2024區(qū)塊鏈技術(shù)研發(fā)公司與金融機(jī)構(gòu)之間的數(shù)字貨幣發(fā)行與交易合同
- 2024民間私人貸款合同范本個人民間貸款合同范本
- 2024年個性化金融服務(wù)系統(tǒng)建設(shè)合同
- 2024年度裝飾工程grc材料采購合同
- 青驕第二課堂2021年禁毒知識答題期末考試答案(初中組)
- 《中華人民共和國監(jiān)察法》知識測試題庫
- 《城市軌道交通橋梁養(yǎng)護(hù)技術(shù)規(guī)范》
- 《水土保持技術(shù)》課件-項(xiàng)目八 攔渣措施
- 機(jī)動車檢測站違規(guī)檢驗(yàn)整改報告
- 2024年建筑電工復(fù)審考試題庫附答案
- 2024年4月自考04737C++程序設(shè)計試題及答案含評分參考
- 睡眠醫(yī)學(xué)智慧樹知到期末考試答案章節(jié)答案2024年廣州醫(yī)科大學(xué)
- GB/T 17259-2024機(jī)動車用液化石油氣鋼瓶
- 國開(河北)2024年《中外政治思想史》形成性考核1-4答案
- 床邊護(hù)理帶教體會
評論
0/150
提交評論