版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第四章匯編語言程序設(shè)計
4.1編程的步驟
匯編語言程序設(shè)計,要求設(shè)計者對計算機的硬件結(jié)構(gòu)(包括微機CPU、存貯器結(jié)構(gòu)、接口電路、外部設(shè)備特性等)有詳細了解,此外應(yīng)熟悉CPU的指令系統(tǒng)和編程的基本技巧。一.分析問題:任務(wù)是什么?工作過程(順序)?現(xiàn)有條件(硬件結(jié)構(gòu))、已知數(shù)據(jù)、運算精度、處理速度等。二.確定算法:將實際問題轉(zhuǎn)化為程序處理模塊。三.畫程序流程圖: 橢圓(或桶型):程序的開始、結(jié)束。 矩形框:要進行的工作。 菱形框:判斷,框內(nèi)為判斷內(nèi)容。 圓圈:程序連接點。 指向線:程序流向。 子程框:框內(nèi)為子程名。
畫流程圖時,按程序處理的順序,由上至下逐步繪制。對于復(fù)雜的系統(tǒng),可先畫總體流程圖(主程序框圖),再畫各模塊的局部框圖。四.編制程序
為便于理解程序,可以在程序中添加注釋。在一行語句中,分號“;”后面的內(nèi)容為注釋。注釋部分經(jīng)匯編后不會生成任何機器指令碼。若“*”在一行語句的第一列,則表示該行為注釋。注意:匯編指令中的冒號(:)、逗號(,)、分號(;)、星號(*)等標點符號要在英文狀態(tài)下輸入才合法,如果在中文狀態(tài)下輸入,編譯器會認作非法字符,在編寫匯編代碼時應(yīng)該注意把輸入法的狀態(tài)切換到英文輸入狀態(tài)。5.4HCS08CPU與HC08CPU的比較4.208匯編語言基礎(chǔ)4.2.108匯編源程序格式
把匯編語言寫成的源程序“翻譯”成機器語言的工具叫匯編程序或編譯器(Assembler),以下統(tǒng)一稱作編譯器。匯編語言源程序可以用通用的文本編輯軟件書寫編輯,以ASCII碼形式存盤。具體的編譯器對匯編語言源程序的格式有一定的要求,同時,編譯器除了識別單片機的指令系統(tǒng)外,為了能夠正確地產(chǎn)生目標代碼以及方便匯編語言的編寫,編譯器還提供了一些在匯編時使用的命令、操作符號,在編寫匯編程序時,也必須正確使用它們。由于編譯器提供的指令僅是為了更好地做好“翻譯”工作,并不產(chǎn)生具體的機器指令,因此這些指令被稱為偽指令(PseudoInstruction)。匯編語言源程序以行為單位進行設(shè)計,每一行最多可以包含以下四個部分:《嵌入式應(yīng)用技術(shù)基礎(chǔ)教程》課件標號操作碼操作數(shù)注釋5.4HCS08CPU與HC08CPU的比較(1)標號(Labels)對于標號有下列要求及說明:如果一個語句有標號,則標號必須從第一列開始書寫。可以組成標號的字符有:字母A~Z、數(shù)字0~9、下劃線“_”、美元符號“$”,但開頭的第一個符號不能為數(shù)字和$。08編譯器不區(qū)分標號中字母的大小寫。標號應(yīng)小于16個字符。標號后可以帶冒號“:”,也可以不帶冒號。一個標號在一個程序中只能定義一次。若一行中第一個字符是星號“*”,這是標號,表明該行為注釋。一行語句若只有標號,編譯器將把當前程序計數(shù)器的值賦給該標號。若希望更多的編譯器能夠識別,建議標號長度小于8個字符?!?”表示立即數(shù)。
操作碼不能從第一列開始,否則會被當成標號.《嵌入式應(yīng)用技術(shù)基礎(chǔ)教程》課件(2)操作碼(Opcodes)
操作碼包括指令碼以及后面即將介紹的08編譯器可以識別的偽指令碼。對于有標號的行,必須用至少一個空格或制表符(TAB)將標號與操作碼隔開。對于沒有標號的行,不能從第一列開始寫指令碼,應(yīng)以空格或制表符(TAB)開頭。08編譯器不區(qū)分操作碼中字母的大小寫。
(3)操作數(shù)(Operands)
操作數(shù)可以是地址、標號或指令碼定義的常數(shù),也可以是由偽運算符構(gòu)成的表達式。08編譯器識別下列偽運算符:加(+)、減(-)、乘(*)、除(/)、特殊除(\,允許被除數(shù)為0,此時認為結(jié)果也為0)、左移(<)、右移(>)、取余數(shù)(%)、與(&)、或(|)、異或(^)。如果超過一種運算或中間有插入空格應(yīng)使用{}把它們包含在內(nèi)。(4)注釋(Comments)注釋即是說明文字,若是處于指令之后,則用空格和分號“;”與指令分開,若整行為注釋文字,則在第一列寫上“;”或“*”?!肚度胧綉?yīng)用技術(shù)基礎(chǔ)教程》課件HCS08偽指令4.2.2偽指令(Pseudo):
在匯編程序中定義的各種匯編命令。用以指定程序的實際存放地址、定義各種文字符號的數(shù)值等。這些命令并不產(chǎn)生機器碼,僅起到匯編時的輔助作用。以下為HCS08匯編程序中定義的一些常用偽指令。
㈠.匯編起始命令:格式:ORG16位地址功能:定義此指令后面源程序的匯編地址(目標程序存放的首地址)例:ORG2000HSTART:LDA#64H……
則規(guī)定LDA#64H從2000H單元開始存放,同時將標號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進制有符號數(shù)為正(或0),則將其除以3,為負則求其絕對值,結(jié)果存人$71單元。ORG$E000
LDA $70 BLT ABS ;為負轉(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進制無符號數(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列只能用來寫標號2.若X1(8位無符號數(shù))為奇數(shù),將其加1;為偶數(shù)將其除以2,結(jié)果送Y。
講評:1.怎么判斷奇偶。2.別忘用偽指令定義X1和Y。3.怎么實現(xiàn)處以23.按下式計算函數(shù)的值,結(jié)果存入RESULT單元
RESULT=(X1+5)×10(若X1≦20)
=X1÷6+18(若X1>20);X1為8位2進制無符號數(shù)。
講評:1.怎么判斷≦。2.別忘用偽指令定義X1和RESULT。3.怎么實現(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)正確進行。⑴.修改控制變量:如數(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ù)中負數(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)用”指令進入子程,子程結(jié)束用“返回”指令回到主程斷點繼續(xù)執(zhí)行。*子程嵌套:在子程中調(diào)用其它子程。㈡.現(xiàn)場信息保護:在主程和子程“爭用”某些寄存器時,應(yīng)將其內(nèi)容“保護”起來。(壓入堆棧)*在利用堆棧保護現(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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025教師個人工作計劃總結(jié)
- 9月份營銷工作計劃范文
- 關(guān)于每日工作計劃模板錦集
- 2025春季學(xué)期幼兒園食堂工作計劃
- 食堂后勤管理個人工作計劃
- 4科技綜治和平安建設(shè)工作計劃
- 4寧夏:某年教育民生計劃發(fā)布
- 《大孔樹脂分離技術(shù)》課件
- 《多元函數(shù)》課件
- 《型材料的研制》課件
- 機電產(chǎn)品設(shè)計奧秘探究知到章節(jié)答案智慧樹2023年青島濱海學(xué)院
- 新外研版高中英語必修第一冊Unit 6教學(xué)設(shè)計
- 2023版中國近現(xiàn)代史綱要課件:05第五專題 中國人民在精神上由被動轉(zhuǎn)為主動
- 快樂孕育孕婦學(xué)校高級教程孕產(chǎn)期心理保健
- AI時代大學(xué)生創(chuàng)新創(chuàng)業(yè)導(dǎo)航智慧樹知到答案章節(jié)測試2023年西南大學(xué)
- 臥式罐剩余體積與液位關(guān)系計算方式-excel
- 公共政策案例分析例文范文(通用9篇)
- 三年級上冊道德與法治知識點 解答題50道 部編版(含答案)
- 富士康公司組織架構(gòu)及部門職責
- 庫區(qū)倒罐作業(yè)操作規(guī)程
- 二年級下冊乘除法口算題
評論
0/150
提交評論