匯編語(yǔ)言程序設(shè)計(jì)及編程實(shí)例_第1頁(yè)
匯編語(yǔ)言程序設(shè)計(jì)及編程實(shí)例_第2頁(yè)
匯編語(yǔ)言程序設(shè)計(jì)及編程實(shí)例_第3頁(yè)
匯編語(yǔ)言程序設(shè)計(jì)及編程實(shí)例_第4頁(yè)
匯編語(yǔ)言程序設(shè)計(jì)及編程實(shí)例_第5頁(yè)
免費(fèi)預(yù)覽已結(jié)束,剩余26頁(yè)可下載查看

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、第四章匯編語(yǔ)言程序設(shè)計(jì)及知識(shí)§ 4. 1編程的步驟、方法和技巧§42 匯編語(yǔ)言源稈序的編輯和匯編§43匯編語(yǔ)言程序的基本結(jié)構(gòu)mLL>HjaiE§ 4. 1編程的步驟、方法和技巧 §4.1.1編程的步驟§412編程的方法和技巧§4. 1. 1編程的步驟一、分析問(wèn)題 二、確定算法三、畫程序流程圖四、編寫程序一、分析問(wèn)題對(duì)需要解決的問(wèn)題進(jìn)行分析,以求對(duì)問(wèn)題由正確的 理解。如,設(shè)計(jì)一個(gè)智能垃圾桶。解決問(wèn)題的任務(wù)是什么?工作過(guò)程?現(xiàn)有的條件,已知數(shù)據(jù),對(duì)運(yùn)算的精度和速度方面 的要求?設(shè)計(jì)的硬件結(jié)構(gòu)是否方便編程?回MtE:、確定算

2、法算法是如何將實(shí)際問(wèn)題轉(zhuǎn)化成程序模塊來(lái)處理。在編程以前,先要對(duì)幾種不同的算法進(jìn)行分析、比 較,找出最適宣的算法回 aE三、畫程序流程圖程序流程圖是使用各種圖形、符號(hào)、有向線段等 來(lái)說(shuō)明程序設(shè)計(jì)過(guò)程的一種直觀的表示。流程圖步驟分得越細(xì)致,編寫程序是也越方便。畫流程圖是程序結(jié)構(gòu)設(shè)計(jì)時(shí)釆用的一種重要手段。 一個(gè)系統(tǒng)軟件有總的流程圖(主程序框圖)和局部的 流程圖。流程圖常采用的圖形和符號(hào)橢或桶:表示程序的開始或結(jié)束。矩形框菱形框指向線:表示要進(jìn)行的工作。:表示要判斷的事情,菱形框內(nèi) 的表達(dá)式表示要判斷的內(nèi)容。:表示連接點(diǎn):表示程序的流向編寫程序用89C51匯編語(yǔ)言編寫的源程序行(一條語(yǔ)句)包 括四個(gè)部

3、分,也叫四個(gè)字段:(標(biāo)號(hào):)(操作碼)(操作數(shù));注釋)每個(gè)字段之間要用分隔符分隔,而每個(gè)字段內(nèi)部不 能使用分隔符??梢杂米鞣指舴姆?hào):空格 逗號(hào)“,”、分號(hào)“;”等。例如:LOOP: MOV A, #00H;立即數(shù)00HA標(biāo)號(hào)標(biāo)號(hào)是用戶定義的符號(hào)地址。 一條指令的標(biāo)號(hào)是該條指令的符號(hào)名字,標(biāo)號(hào)的 值是匯編這條指令時(shí)指令的地址。標(biāo)號(hào)由以英文字母開始的18個(gè)字母或數(shù)字組成,以冒號(hào)“:標(biāo)號(hào)可以由賦值偽指令賦值,如果沒(méi)有賦值,匯編程序把存放該指令目標(biāo)碼第一字節(jié)的存儲(chǔ)單元的地址賦給該標(biāo)號(hào),所以,標(biāo)號(hào)又叫指令標(biāo)號(hào)。操作碼操作碼是必不可少的。-它用一組字母符號(hào)表示指令的操作 碼。在89C51中,由89C

4、51的指令 助記符組成。操作數(shù)匯編語(yǔ)言指令可能要求或不要求操作數(shù),所以這一 字段可能有也可能沒(méi)有。若有兩個(gè)操作數(shù),操作數(shù)之間用逗號(hào)“ J分開。操作數(shù)包括的內(nèi)容有:(1) 工作寄存器:由PSW.3和PSW.4規(guī)定的當(dāng)前工 作寄存器區(qū)中的R0R7。(2) 特殊功能寄存器:21個(gè)SFR的名字。操作數(shù)(3)標(biāo)號(hào)名:賦值標(biāo)號(hào)一由匯編指令EQU等賦值的標(biāo)號(hào); 指令標(biāo)號(hào)一指令標(biāo)號(hào)指示的指令的第一字節(jié)地址是該標(biāo)號(hào)的值。(4) 常數(shù):可用二進(jìn)制(B)、十進(jìn)制、十六進(jìn)制(H) 若常數(shù)以字符開頭,前面加0。(5) $:用來(lái)表示程序計(jì)數(shù)器的當(dāng)前值。(6) 表達(dá)式:匯編時(shí),計(jì)算出表達(dá)式的值填入目標(biāo)碼。3E注釋注釋部分不

5、是匯編語(yǔ)言的功能部分,只是用于增加程序的可讀性。良好的注釋是匯編語(yǔ)言程序編寫中的重要組 成部分。§ 4. 1. 2編程的方法和技巧、模塊化的程序設(shè)計(jì)方法二、編程技巧、模塊化的程序設(shè)計(jì)方法1、程序功能模塊化的優(yōu)點(diǎn)2、劃分模塊的原則仁程序功能模塊化的優(yōu)點(diǎn)單g模塊結(jié)構(gòu)的程序功能單一,易于編寫、調(diào)試和修 改。便于分工,從而可使多個(gè)程序員同時(shí)進(jìn)行程序的編寫 和調(diào)試工作,加快軟件研制進(jìn)度。程序可讀性好,便于功能擴(kuò)充和版本升級(jí)。對(duì)程序的修改可局部進(jìn)行,其它部分可以保持不變。對(duì)于使用頻繁的子程序可以建立子程序庫(kù),便于多個(gè)模塊調(diào)用。2、劃分模塊的原則每個(gè)模塊應(yīng)具有獨(dú)立的功能,能產(chǎn)生一個(gè)明確的結(jié) 果,即

6、單模塊的功能高內(nèi)聚性。模塊之間的控制耦合應(yīng)盡量簡(jiǎn)單,數(shù)據(jù)耦合應(yīng)盡量 少,即模塊間的低耦合性。控制耦合是指模塊進(jìn)入 和退出的條件及方式,數(shù)據(jù)耦合是指模塊間的信息 交換方式、交換量的多少及交換的頻繁程度。模塊長(zhǎng)度適中。20條100條的范圍較合適。編程技巧1、盡量釆用循環(huán)結(jié)構(gòu)和子程序。2、盡量少用無(wú)條件轉(zhuǎn)移指令。3、對(duì)于通用的子程序,考慮到其通用性,除了用于存放 子程序入口參數(shù)的寄存器外,子程序中用到的其他寄存 器的內(nèi)容應(yīng)壓入堆棧(返回前再?gòu)棾觯?,即保護(hù)現(xiàn)場(chǎng)。4、在中斷處理程序中,除了要保護(hù)處理程序中用到的寄 存器外,還要保護(hù)標(biāo)志寄存器。5、用累加器傳遞入口參數(shù)或返回參數(shù)比較方便,在子程 序中,一般

7、不必把累加器內(nèi)容壓入堆棧。§4.2匯編語(yǔ)言源程序的編輯和匯編§421 源程序編輯§422源程序的匯編回3E§ 4. 2. 1源程序編輯在微型計(jì)算機(jī)上,借助編輯軟件,編寫或修 改匯編語(yǔ)言源程序。如行編輯或屏幕編輯軟 件。B§ 4. 2. 2源程序的匯編.匯編:將匯編語(yǔ)言源程序轉(zhuǎn)換為機(jī)器碼表示的目標(biāo) 程序的過(guò)程。對(duì)單片機(jī)有:一、手工匯編二、機(jī)器匯編 三、反匯編回MtE、手工匯編通過(guò)手工方式査指令編碼表,逐個(gè)把助記符指令“翻譯”成機(jī)器碼,然后把得到的機(jī)器碼程序鍵入 單片機(jī),進(jìn)行調(diào)試和運(yùn)行。手工匯編的缺點(diǎn):1、偏移量的計(jì)算容易出錯(cuò);2、程序的修改會(huì)引起

8、后面指令地址的變化,轉(zhuǎn)移 指令的偏移量也要重新計(jì)算。回MtE1、機(jī)器匯編機(jī)器匯編是在計(jì)算機(jī)上使用交叉匯編程序進(jìn)行源程序的匯編。匯編工作由機(jī)器自動(dòng)完成,最后得到以機(jī)器碼表示的目標(biāo)程序?;?E三、反匯編將二進(jìn)制機(jī)器語(yǔ)言稈序翻譯成匯編語(yǔ)言稈序的過(guò)稈 稱反匯編。匯編和反匯編的過(guò)程如下圖所示。匯編(匯編程序)§4. 3匯編語(yǔ)言程序的基本結(jié)構(gòu)一、順序程序二、分支程序三、循環(huán)程序回MtE、順序程序順序程序是最簡(jiǎn)單的程序結(jié)構(gòu),即順序程序按順序一條一條地執(zhí)行指令?;豈tE一簡(jiǎn)單程序設(shè)計(jì)舉例P95頁(yè)例4-3 :拆字。將片內(nèi)RAM 20H單元的內(nèi)容拆成兩段, 每段四位。并將它們分別存入21H與22H單 元

9、中。ORG2000HMOVRO, #21HMOVA, 20HANLA, #OFHMOVR0, AINCROMOVA, 20HSWAPAANLA, #OFHMOVR0, ASTART::21HR0;(20H)-A;A"#OFH-A;(A) (RO);RO+1 RO;(20H)A;A03*A47;A%OFHA;(A)>(R0)(P93)例4-1:雙字節(jié)無(wú)符號(hào)數(shù)加法。設(shè)被加數(shù)存放在內(nèi)部RAM的51H、50H單元, 加數(shù)存放在內(nèi)部RAM的61H、60H單元,相加的 結(jié)果存放在內(nèi)部RAM的51H、50H單元,進(jìn)位存 放在位尋址區(qū)的00H位中。程序:MOV RO, #50H ;MOV R1

10、, #60H ;被加數(shù)的低字節(jié)地址;2B, 2us加數(shù)的低字節(jié)地址2B, 2usMOV A, R0 ADD A, R1MOV R0, AINC ROINC R1MOV A, R0 ADDC A, R1;取被加數(shù)低字節(jié);1B, 1us;加上加數(shù)低字節(jié);1B, 1us;保存低字節(jié)相加結(jié)果;1B, 1us;指向被加數(shù)高字節(jié);1B, 1us;指向加數(shù)高字節(jié);1B, 1us;取被加數(shù)高字節(jié);1B, 1us;加數(shù)高字節(jié)(帶進(jìn)位加)1B, 1usMOV R0, A ;存高字節(jié)相加結(jié)果;1B, 1usMOV OOH, C;保存進(jìn)位;2B, 2us例1:有一變量存放在片 內(nèi)RAM的20H單元,其取 值范圍為:0

11、0H05Ho 要求編制一段程序,根據(jù) 變量值求其平方值,并存 入片內(nèi)RAM的21H單元。程序1:MOV A, 20HMOVB, AMULABMOV 21H, AHE程序如下:ORG 1000HSTART: MOV DPTR, #2000HMOV A, 20HMOVC A, A+DPTRMOV 21H, ASJMP $ORG 2000HTABLE: DB 00, 01, 04, 09,16,ENDHE1、分支程序程序分支是通過(guò)條件轉(zhuǎn)移指令實(shí)現(xiàn)的,即根據(jù)條件 對(duì)程序的執(zhí)行進(jìn)行判斷、滿足條件則進(jìn)行程序轉(zhuǎn)移, 不滿足條件就順序執(zhí)行程序。分支程序又分為單分支和多分支結(jié)構(gòu)。多分支程序是首先把分支程序按序號(hào)

12、排列,然后按序號(hào)值進(jìn)行轉(zhuǎn)移。3E二、分支程序在MCS-51指令系統(tǒng)中,通過(guò)條件判斷實(shí)現(xiàn)單分支 程序轉(zhuǎn)移的指令有:JZ、JNZ、CJNE、DJNZ等。 此外還有以位狀態(tài)作為條件進(jìn)行程序分支的指令, 如JC、JNC、JB、JNB、JBC等。使用這些指令可 以完成0、1、正、負(fù),以及相等.不相等作為各種 條件判斷依據(jù)的程序轉(zhuǎn)移。單分支程序P97例47求雙字節(jié)補(bǔ)碼程序設(shè)在內(nèi)部RAM的addrl和addr+1單元存有一個(gè)雙 字節(jié)數(shù)(高位字節(jié)存于高地址單元)。編寫程序?qū)⑵?讀出取補(bǔ)后再存入addr2和addr2+1單一元。首先對(duì)低字節(jié)取補(bǔ),然后判其結(jié)果是否為全“0程 若 是,則高字節(jié)取補(bǔ),否則高字節(jié)取反。

13、流程圖見(jiàn)書P99圖42 程序見(jiàn)下頁(yè):MBSTART: MOVMOVMOVCPLINCMOVINCINCRO, #addr1 ;原碼低字節(jié)地址送ROR1, #addr2 ;補(bǔ)碼低字節(jié)地址送A, R0 ;原碼低字節(jié)送AA ;A內(nèi)容取補(bǔ)AR1, A ;存補(bǔ)碼低字節(jié)RO ;調(diào)整地址,指向下一單元R1MBJZ ZEROMOV A, R0CPL AMOV R1, ASJMP LOOP1 ZERO: MOV A, R0CPL |AINC A(A) =0 時(shí)轉(zhuǎn) ZERO;原碼高字節(jié)送A;高字節(jié)反碼存入addr2+1單元;高字節(jié)取補(bǔ)存入addr2+1單元MOV R1, ALOOP1: RET3E雙分支程序P99

14、例4-10 符號(hào)函數(shù)設(shè)變量x和y分別存放在片內(nèi)RAM的VAR和FUNC單元, 變量y與x的關(guān)系是:當(dāng)x大于0時(shí),y=1;當(dāng)x =0 時(shí),y =0;當(dāng)x小于0時(shí),y=-1。編制程序,根據(jù)x的 大小求y并送回原單元。流程圖見(jiàn)書100頁(yè)圖45;程序如下頁(yè):符號(hào)函數(shù)程序VAR EQU 30H FUNC DATA 31HSTART: MOV A, VARJZ COMP;為零跳轉(zhuǎn)JNB ACC-7, POSI ;判斷符號(hào)位,為正跳轉(zhuǎn) MOV A, #OFFH; y=-1,! ! !SJMP COMPPOSI: MOV A, #01HCOMP: MOV FUNC, AMtE例2設(shè)變量x以補(bǔ)碼的形式存放在片內(nèi)

15、RAM的30H單元,變量y與X的關(guān)系是:當(dāng)x大于0時(shí),y =x;當(dāng) x=0時(shí),y =20H;當(dāng)x小于0時(shí),y =x+5o編制程序,根據(jù)x的大小求y并送回原單元。 程序段如下:START:NEXT:LP:MOV A, 30HJZ NEXT ;為零轉(zhuǎn)移ANL A, #80H ;判斷符號(hào)位JZ LP :為正y=xMOV A, #05H ;為負(fù)y=x+5ADD A, 30HMOV 30H, ASJMP LPMOV 30H, #20H ;為零y=20hSJMP $HE多分支程序P97例46 128種分支轉(zhuǎn)移程序。功能:根據(jù)入口條件轉(zhuǎn)移到128個(gè)目的地址。 入口: (R3)二轉(zhuǎn)移目的地址的序號(hào)00H7FH

16、。散轉(zhuǎn)指令轉(zhuǎn)向0分支轉(zhuǎn)向1分支 轉(zhuǎn)向n-1分支轉(zhuǎn)向n分支K=n-lK=0K=1K=n圖41分支程序結(jié)構(gòu)出口:轉(zhuǎn)移到相應(yīng)子程序入口。3EJMP_128: MOV RL MOV JMPJMPTAB: AJMPAJMPA, R3ADPTR, #JMPTAB A+DPTR ROUTOO、ROUTOl、128個(gè)子程序首址AJMPROUT7F說(shuō)明:此程序要求128個(gè)轉(zhuǎn)移目的地址(ROUTOO ROUT7FH)必須駐留在與絕對(duì)轉(zhuǎn)移指令A(yù)JMP相同的一個(gè) 2KB存儲(chǔ)區(qū)內(nèi)。 RL指令對(duì)變址部分乘以2,因?yàn)槊織lAJMP指令占兩個(gè)字節(jié)。三、循環(huán)程序在程序運(yùn)行時(shí),有時(shí)需要連續(xù)重復(fù)執(zhí)行某段程序, 可以使用循環(huán)程序。其結(jié)

17、構(gòu)包括四部分:1、置循環(huán)初值2、循環(huán)體(循環(huán)工作部分)3、修改控制變量4、循環(huán)控制部分其組織方式如圖42所示。S仁置循環(huán)初值對(duì)于循環(huán)程序中所使用的工作單元,在循環(huán)開始 時(shí)應(yīng)置初值。-例如,工作寄存器設(shè)置計(jì)數(shù)初值,累加器A清0, 以及設(shè)置地址指針、長(zhǎng)度等?;豈tE2、循環(huán)體(循環(huán)工作部分)重復(fù)執(zhí)行的程序段部分,分為循環(huán)工作部分和 循環(huán)控制部分。循環(huán)控制部分每循環(huán)一次,檢查結(jié)束條件,當(dāng) 滿足條件時(shí),就停止循環(huán),往下繼續(xù)執(zhí)行其他 程序。3、修改控制變量在循環(huán)程序中,必須給出循環(huán)結(jié)束條件。常見(jiàn)的是計(jì)數(shù)循環(huán),當(dāng)循環(huán)了一定的次數(shù)后,就 停止循環(huán)。在單片機(jī)中,一般用一個(gè)工作寄存器Rn作為計(jì)數(shù) 器,對(duì)該計(jì)數(shù)器賦初值作為循環(huán)次數(shù)。每循環(huán)一 次,計(jì)數(shù)器的值減1,即修改循環(huán)控制變量,當(dāng)計(jì)數(shù)器的置件為0時(shí),就停止循環(huán)。4、循環(huán)控制部分根據(jù)循環(huán)結(jié)束條件,判斷是否結(jié)束循環(huán)。 89C51可采用DJNZ指令來(lái)自動(dòng)修改控制變量并 能結(jié)束循環(huán)?;豈tE(a)先執(zhí)行后判斷(

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 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ì)用戶上傳內(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論