版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第四章匯編語(yǔ)言程序設(shè)計(jì)
4.1編程的步驟
匯編語(yǔ)言程序設(shè)計(jì),要求設(shè)計(jì)者對(duì)計(jì)算機(jī)的硬件結(jié)構(gòu)(包括微機(jī)CPU、存貯器結(jié)構(gòu)、接口電路、外部設(shè)備特性等)有詳細(xì)了解,此外應(yīng)熟悉CPU的指令系統(tǒng)和編程的基本技巧。一.分析問(wèn)題:任務(wù)是什么?工作過(guò)程(順序)?現(xiàn)有條件(硬件結(jié)構(gòu))、已知數(shù)據(jù)、運(yùn)算精度、處理速度等。二.確定算法:將實(shí)際問(wèn)題轉(zhuǎn)化為程序處理模塊。三.畫(huà)程序流程圖: 橢圓(或桶型):程序的開(kāi)始、結(jié)束。 矩形框:要進(jìn)行的工作。 菱形框:判斷,框內(nèi)為判斷內(nèi)容。 圓圈:程序連接點(diǎn)。 指向線(xiàn):程序流向。 子程框:框內(nèi)為子程名。
畫(huà)流程圖時(shí),按程序處理的順序,由上至下逐步繪制。對(duì)于復(fù)雜的系統(tǒng),可先畫(huà)總體流程圖(主程序框圖),再畫(huà)各模塊的局部框圖。四.編制程序
為便于理解程序,可以在程序中添加注釋。在一行語(yǔ)句中,分號(hào)“;”后面的內(nèi)容為注釋。注釋部分經(jīng)匯編后不會(huì)生成任何機(jī)器指令碼。若“*”在一行語(yǔ)句的第一列,則表示該行為注釋。注意:匯編指令中的冒號(hào)(:)、逗號(hào)(,)、分號(hào)(;)、星號(hào)(*)等標(biāo)點(diǎn)符號(hào)要在英文狀態(tài)下輸入才合法,如果在中文狀態(tài)下輸入,編譯器會(huì)認(rèn)作非法字符,在編寫(xiě)匯編代碼時(shí)應(yīng)該注意把輸入法的狀態(tài)切換到英文輸入狀態(tài)。5.4HCS08CPU與HC08CPU的比較4.208匯編語(yǔ)言基礎(chǔ)4.2.108匯編源程序格式
把匯編語(yǔ)言寫(xiě)成的源程序“翻譯”成機(jī)器語(yǔ)言的工具叫匯編程序或編譯器(Assembler),以下統(tǒng)一稱(chēng)作編譯器。匯編語(yǔ)言源程序可以用通用的文本編輯軟件書(shū)寫(xiě)編輯,以ASCII碼形式存盤(pán)。具體的編譯器對(duì)匯編語(yǔ)言源程序的格式有一定的要求,同時(shí),編譯器除了識(shí)別單片機(jī)的指令系統(tǒng)外,為了能夠正確地產(chǎn)生目標(biāo)代碼以及方便匯編語(yǔ)言的編寫(xiě),編譯器還提供了一些在匯編時(shí)使用的命令、操作符號(hào),在編寫(xiě)匯編程序時(shí),也必須正確使用它們。由于編譯器提供的指令僅是為了更好地做好“翻譯”工作,并不產(chǎn)生具體的機(jī)器指令,因此這些指令被稱(chēng)為偽指令(PseudoInstruction)。匯編語(yǔ)言源程序以行為單位進(jìn)行設(shè)計(jì),每一行最多可以包含以下四個(gè)部分:《嵌入式應(yīng)用技術(shù)基礎(chǔ)教程》課件標(biāo)號(hào)操作碼操作數(shù)注釋5.4HCS08CPU與HC08CPU的比較(1)標(biāo)號(hào)(Labels)對(duì)于標(biāo)號(hào)有下列要求及說(shuō)明:如果一個(gè)語(yǔ)句有標(biāo)號(hào),則標(biāo)號(hào)必須從第一列開(kāi)始書(shū)寫(xiě)??梢越M成標(biāo)號(hào)的字符有:字母A~Z、數(shù)字0~9、下劃線(xiàn)“_”、美元符號(hào)“$”,但開(kāi)頭的第一個(gè)符號(hào)不能為數(shù)字和$。08編譯器不區(qū)分標(biāo)號(hào)中字母的大小寫(xiě)。標(biāo)號(hào)應(yīng)小于16個(gè)字符。標(biāo)號(hào)后可以帶冒號(hào)“:”,也可以不帶冒號(hào)。一個(gè)標(biāo)號(hào)在一個(gè)程序中只能定義一次。若一行中第一個(gè)字符是星號(hào)“*”,這是標(biāo)號(hào),表明該行為注釋。一行語(yǔ)句若只有標(biāo)號(hào),編譯器將把當(dāng)前程序計(jì)數(shù)器的值賦給該標(biāo)號(hào)。若希望更多的編譯器能夠識(shí)別,建議標(biāo)號(hào)長(zhǎng)度小于8個(gè)字符?!?”表示立即數(shù)。
操作碼不能從第一列開(kāi)始,否則會(huì)被當(dāng)成標(biāo)號(hào).《嵌入式應(yīng)用技術(shù)基礎(chǔ)教程》課件(2)操作碼(Opcodes)
操作碼包括指令碼以及后面即將介紹的08編譯器可以識(shí)別的偽指令碼。對(duì)于有標(biāo)號(hào)的行,必須用至少一個(gè)空格或制表符(TAB)將標(biāo)號(hào)與操作碼隔開(kāi)。對(duì)于沒(méi)有標(biāo)號(hào)的行,不能從第一列開(kāi)始寫(xiě)指令碼,應(yīng)以空格或制表符(TAB)開(kāi)頭。08編譯器不區(qū)分操作碼中字母的大小寫(xiě)。
(3)操作數(shù)(Operands)
操作數(shù)可以是地址、標(biāo)號(hào)或指令碼定義的常數(shù),也可以是由偽運(yùn)算符構(gòu)成的表達(dá)式。08編譯器識(shí)別下列偽運(yùn)算符:加(+)、減(-)、乘(*)、除(/)、特殊除(\,允許被除數(shù)為0,此時(shí)認(rèn)為結(jié)果也為0)、左移(<)、右移(>)、取余數(shù)(%)、與(&)、或(|)、異或(^)。如果超過(guò)一種運(yùn)算或中間有插入空格應(yīng)使用{}把它們包含在內(nèi)。(4)注釋?zhuān)–omments)注釋即是說(shuō)明文字,若是處于指令之后,則用空格和分號(hào)“;”與指令分開(kāi),若整行為注釋文字,則在第一列寫(xiě)上“;”或“*”?!肚度胧綉?yīng)用技術(shù)基礎(chǔ)教程》課件HCS08偽指令4.2.2偽指令(Pseudo):
在匯編程序中定義的各種匯編命令。用以指定程序的實(shí)際存放地址、定義各種文字符號(hào)的數(shù)值等。這些命令并不產(chǎn)生機(jī)器碼,僅起到匯編時(shí)的輔助作用。以下為HCS08匯編程序中定義的一些常用偽指令。
㈠.匯編起始命令:格式:ORG16位地址功能:定義此指令后面源程序的匯編地址(目標(biāo)程序存放的首地址)例:ORG2000HSTART:LDA#64H……
則規(guī)定LDA#64H從2000H單元開(kāi)始存放,同時(shí)將標(biāo)號(hào)START定義為2000H。
*ORG指令可多次使用。㈡.匯編結(jié)束命令:
格式:END
功能:通知匯編程序結(jié)束匯編。
*END指令僅用于整個(gè)源程序的結(jié)束。
4.3匯編語(yǔ)言程序的基本結(jié)構(gòu)
一.順序程序:無(wú)分支、循環(huán),程序按順序逐條執(zhí)行用CODEWARRIOR編1+1;二.分支程序:按不同的條件執(zhí)行不同的程序分枝。程序?qū)嵗海ㄗ⒁鈼l件轉(zhuǎn)移語(yǔ)句在分支產(chǎn)生中的作用。)
例1:若$70單元中的8位2進(jìn)制有符號(hào)數(shù)為正(或0),則將其除以3,為負(fù)則求其絕對(duì)值,結(jié)果存人$71單元。ORG$E000
LDA $70 BLT ABS ;為負(fù)轉(zhuǎn)絕對(duì)值處理BMI行嗎?BLO呢? LDX #3 ;正數(shù),除以3 CLRH DIV BRA DONEABS: NEGA ;數(shù)值取反(按位取反后+1),不同于COM(按位取反)DONE:STA $71 BRA $END例2:按下式計(jì)算函數(shù)的值,結(jié)果存入FUN單元
FUN=X1-3 (若X1≧10)
=X1×8+9(若X1﹤10);X1為8位2進(jìn)制無(wú)符號(hào)數(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單元。講評(píng):1.$24是立即數(shù)2.注意第一步結(jié)束要用BRA指令跳轉(zhuǎn).3.不能Y:EQU#$24.4.第1列只能用來(lái)寫(xiě)標(biāo)號(hào)2.若X1(8位無(wú)符號(hào)數(shù))為奇數(shù),將其加1;為偶數(shù)將其除以2,結(jié)果送Y。
講評(píng):1.怎么判斷奇偶。2.別忘用偽指令定義X1和Y。3.怎么實(shí)現(xiàn)處以23.按下式計(jì)算函數(shù)的值,結(jié)果存入RESULT單元
RESULT=(X1+5)×10(若X1≦20)
=X1÷6+18(若X1>20);X1為8位2進(jìn)制無(wú)符號(hào)數(shù)。
講評(píng):1.怎么判斷≦。2.別忘用偽指令定義X1和RESULT。3.怎么實(shí)現(xiàn)處以6三.循環(huán)程序:
自動(dòng)重復(fù)執(zhí)行某段程序。一般包括以下幾部分
㈠.置循環(huán)初值:設(shè)循環(huán)計(jì)數(shù)器初值、設(shè)數(shù)據(jù)地址指針、某些寄存器清零或設(shè)定常數(shù)等。㈡.循環(huán)體(循環(huán)工作部分):重復(fù)執(zhí)行的程序段。㈢.循環(huán)控制:保證循環(huán)正確進(jìn)行。⑴.修改控制變量:如數(shù)據(jù)指針,循環(huán)計(jì)數(shù)器等⑵.循環(huán)結(jié)果控制:判斷是否結(jié)果循環(huán)。
㈣.典型循環(huán)結(jié)構(gòu):
例1.無(wú)符號(hào)數(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 ;取第一個(gè)數(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)計(jì)以$60為首址的50字節(jié)有符號(hào)數(shù)中負(fù)數(shù)個(gè)數(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.試編寫(xiě)程序,查找在內(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 ;查詢(xún)指針是否到 BNE LOOP BRA OVERDONE: MOV #1,$81OVER: NOP BRA $END* 注意此循環(huán)有兩種結(jié)束方式。
例4.軟件定時(shí)子程序
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)場(chǎng)信息保護(hù):在主程和子程“爭(zhēng)用”某些寄存器時(shí),應(yīng)將其內(nèi)容“保護(hù)”起來(lái)。(壓入堆棧)*在利用堆棧保護(hù)現(xiàn)場(chǎng)時(shí),須注意保持堆棧平衡。㈢.工作參數(shù)的傳遞入口參數(shù):調(diào)用子程時(shí),主程為子程設(shè)置的參數(shù)。主程將入口參數(shù)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年新版承攬加工合同書(shū)范文
- 2025法人向公司借款合同
- 2025年度溫室大棚租賃與現(xiàn)代農(nóng)業(yè)技術(shù)合作合同3篇
- 2025年度農(nóng)村出租房租賃與農(nóng)村環(huán)保產(chǎn)業(yè)合作合同
- 二零二五年度電影宣傳推廣與營(yíng)銷(xiāo)合同2篇
- 二零二五年度股權(quán)代持服務(wù)協(xié)議:涉及企業(yè)并購(gòu)的綜合性協(xié)議3篇
- 二零二五年度農(nóng)村宅基地房屋租賃與農(nóng)村文化傳承合同
- 二零二五年度展臺(tái)搭建與展覽展示合同3篇
- 二零二五年度法人代表變更與股權(quán)收購(gòu)協(xié)議3篇
- 2025年度液壓設(shè)備維修保養(yǎng)及安全檢測(cè)合同3篇
- 《測(cè)土配方施肥》課件
- 人教版2024-2025學(xué)年第一學(xué)期八年級(jí)物理期末綜合復(fù)習(xí)練習(xí)卷(含答案)
- 職業(yè)健康檢查管理制度
- 電梯維保管理體系手冊(cè)
- 2024年國(guó)家電網(wǎng)招聘之通信類(lèi)題庫(kù)及參考答案(考試直接用)
- 第12課《詞四首》課件+2023-2024學(xué)年統(tǒng)編版語(yǔ)文九年級(jí)下冊(cè)
- 2024年R1快開(kāi)門(mén)式壓力容器操作證考試題庫(kù)及答案
- 《數(shù)學(xué)物理方法》期末測(cè)試卷及答案
- 《上帝擲骰子嗎:量子物理史話(huà)》導(dǎo)讀學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- 鐵路工務(wù)勞動(dòng)安全
- 滬科版九年級(jí)物理下冊(cè)教案全冊(cè)
評(píng)論
0/150
提交評(píng)論