單片機(jī) 匯編語言程序設(shè)計(jì)知識(shí)_第1頁
單片機(jī) 匯編語言程序設(shè)計(jì)知識(shí)_第2頁
單片機(jī) 匯編語言程序設(shè)計(jì)知識(shí)_第3頁
單片機(jī) 匯編語言程序設(shè)計(jì)知識(shí)_第4頁
單片機(jī) 匯編語言程序設(shè)計(jì)知識(shí)_第5頁
已閱讀5頁,還剩14頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第4章

匯編語言程序設(shè)計(jì)知識(shí)/sundae_meng4.1匯編語言程序的匯編1.機(jī)器語言

11100101001100000010010101000000

1111010101010000

2.匯編語言

MOVA,30HADDA,40H

MOV50H,A3.高級(jí)語言

高級(jí)語言是一種面向算法和過程的語言。如:

FORTAN、BASIC、C語言/sundae_meng4.2匯編語言程序設(shè)計(jì)概述4.2.1

匯編語言語句格式〔標(biāo)號(hào):〕<操作碼助記符>[操作數(shù)][;注釋]1.標(biāo)號(hào)

標(biāo)號(hào)是語句地址的標(biāo)志符號(hào)、代表該語句指令代碼第一個(gè)字節(jié)的地址。

2.操作碼助記符

此為語句中唯一不可缸少的部分,也是語句的核心,表示該語句進(jìn)行何種操作。3.操作數(shù)

操作數(shù)是指令的操作對(duì)象。4.注釋

注釋是為方便程序的編寫、理解、交流而書寫的說明解釋性文字、符號(hào)。

/sundae_meng4.2.1偽指令

1.匯編起始地址偽指令ORG(Origin)

格式:〔標(biāo)號(hào):〕ORG<addr16>

功能:規(guī)定目標(biāo)程序段式數(shù)據(jù)塊的起始地址。說明:總放在源程序段的開頭和數(shù)據(jù)塊的開頭

2.匯編結(jié)束指令END

格式:〔標(biāo)號(hào):〕END

功能:告訴匯編程序,源程序到此結(jié)果,匯編到此截止。說明:一個(gè)程序只能有一條END命令,且位于程序的最后。匯編程序?qū)ND語句以后的語句不進(jìn)行匯編。例如:

ORG 2000HSTART:MOV A,BJNB ACC.7,DONECPL ADONE:MOV B,AEND

/sundae_meng

格式:〔標(biāo)號(hào):〕DB<字節(jié)數(shù)據(jù)>

功能:從指定的地址單元開始,存入規(guī)定好的8位數(shù)(字節(jié)數(shù)據(jù))說明:1)存貯地址單元可由前一條指令確定或由ORG命令指定;

2)當(dāng)存貯多個(gè)數(shù)時(shí),中間用“,”隔開。例如:

ORG8000HMOVA,40HTAB:DB40H,1101B,96……表示從8002H單元開始分別存放40H,0DH,43H例:

ORG1000HDB“Howareyou”則把字符串中的字符按ASCII碼連續(xù)存放在1000H~100AH11個(gè)單元中(包括兩個(gè)空格)。

注意:DB0FA2H是非法的,因0FA2H不是字節(jié)數(shù)。3.字節(jié)定義偽指令DB(DefineByte)/sundae_meng

格式:〔標(biāo)號(hào):〕DW<字?jǐn)?shù)據(jù)>

功能:從指定的地址開始,存入字十六位數(shù)據(jù)(字?jǐn)?shù)據(jù))。說明:存入數(shù)據(jù)時(shí)高位在前,低位在后,即高8位存入低地址單元,低8位存入高地址單元。例:

ORG1000HDW765AH,40H,“AB”

則1000H~1005H單元依次存放著:76H,5AH,00H,40H,

41H,42H。注意:

1)DW語句中,40H是8位數(shù),按16位數(shù)0040H存放.

2)DW“ABC”及DW“Howareyou”是非法的,而

DB“ABC”

“Howareyou”則是合法的。

4.字定義偽指令DW(DefineWord)/sundae_meng

格式:〔標(biāo)號(hào):〕DS<數(shù)或表達(dá)式>

功能:從指令的地址單元開始,保留指定數(shù)目的字節(jié)單元作為備用空間。例:

ORG1000HDS20START:MOVA,#00H則匯編后,從1000H開始,保留20個(gè)單元作它用,第三條指令的標(biāo)號(hào)START的地址應(yīng)為1014H。注意:MCS-51系列單片機(jī),DB、DW、DS偽指令只能用于程序存貯器,不能對(duì)數(shù)據(jù)存貯器使用。

5.空間定義偽指令DS(DefineStorage)/sundae_meng

格式:<字符名稱>EQU<數(shù)或表達(dá)式>

功能:將右邊的值賦給左邊用戶定義的字符。說明:1)賦值后的字符即可做為地址使用,也可以做為立即數(shù)使用;2)一經(jīng)使用EQU賦值,整個(gè)程序有效;3)所賦值可是8位(字節(jié))或16位(字);4)該偽指令一般放在程序的開始段;5)指令字符名稱構(gòu)成的規(guī)定和地址標(biāo)號(hào)一樣,但不是標(biāo)號(hào),使用時(shí)后無“:”。例如程序段:

ORG8000HAA EQU10H

;AA=10HABC EQUAA+10H;ABC=20HMOV A,ABC;A←20HBS:ADDA,#AA;A←(A)+10H

說明:程序中,AA、ABC是字符名稱,BS是標(biāo)號(hào)。6.賦值偽指令EQU(Equate)/sundae_meng

格式:<字符名稱>BIT<位地址>

功能:把位地址賦給指定的字符名稱。例:

A1BITP1.0A2BIT20H

說明:賦值命令和位定義命令僅為方便編程和閱讀理解程序使用,使用時(shí),字符名稱或位名稱一般取有意義且便于記憶的字母數(shù)字。

7.位定義偽指令BIT/sundae_meng4.2.2

匯編語言程序設(shè)計(jì)一般步驟

(1)分析問題,明確任務(wù)(2)建立數(shù)學(xué)模型,確定算法(3)繪制程序流程圖(4)編寫源程序

(5)匯編、調(diào)試/sundae_meng4.2.3

循環(huán)結(jié)構(gòu)程序設(shè)計(jì)典型循環(huán)結(jié)構(gòu)包括四部分:初始化部分循環(huán)處理部分循環(huán)控制部分循環(huán)結(jié)束部分/sundae_meng1.設(shè)置循環(huán)計(jì)數(shù)器實(shí)現(xiàn)已知循環(huán)次數(shù)的循環(huán)控制程序如下:

MOVR0,#64H;設(shè)置循環(huán)計(jì)數(shù)器

MOVDPTR,#DATA;設(shè)置地址指針

CLRALOOP:MOVX@DPTR,A;清0INCDPTRDJNZR0,LOOP;判0結(jié)束循環(huán)〔例4-7〕將首址為DATA的100個(gè)外部RAM單元清零?!步狻吃摾秊橐阎h(huán)次數(shù)的循環(huán)程序?qū)⒀h(huán)次數(shù)數(shù)存放在R0中。椐圖如4-7所示。/sundae_meng2.使用測(cè)試條件轉(zhuǎn)移指令控制未知次數(shù)的循環(huán)〔例4-8〕設(shè)某以“$”為結(jié)束標(biāo)志的字符中共不超過256個(gè),存放在內(nèi)部RAM以STA為首址的連續(xù)單元里,設(shè)統(tǒng)計(jì)此字符中長(zhǎng)度并存放到內(nèi)部RAM的LEN單元中?!步夥ㄒ弧晨驁D如圖4-8所示:程序如下:

ORG1000HMOVR2,#STA

;設(shè)地址指針

MOVB,#00H;設(shè)計(jì)數(shù)器LOOP:

MOVA,@R2CJNEA,“$”,NEXT;判斷是否結(jié)束

MOVLEN,B;存數(shù)據(jù)結(jié)果

SJMPDONENEXT:INCB;修改計(jì)數(shù)器

INCR2

;修改地址指針,準(zhǔn)備下一次循環(huán)

SJMPLOOPDONE:END/sundae_meng/sundae_meng程序如下:

ORG1000HMOVR2,#STA-1;設(shè)地址指針

MOVB,#0FFH;設(shè)計(jì)數(shù)器LOOP:INCR2

;修改地址指針,準(zhǔn)備下一次循環(huán)

INCB;修改計(jì)數(shù)器

MOVA,@R2

;取數(shù)

CJNEA,“$”,LOOP

;判斷循環(huán)是否結(jié)束

MOVLEN,B

;存數(shù)據(jù)

END說明:1)解法一為先判斷后處理形式,更符合人們的習(xí)慣思維,但使用了無條件轉(zhuǎn)移指令,程序結(jié)構(gòu)不清晰,質(zhì)量不高。2)解法二為先處理后判斷形式,我們要熟悉并掌握這種方法,同時(shí)注意解法二中對(duì)地址指針R2和計(jì)數(shù)器B的初值設(shè)置?!步夥ǘ晨驁D如圖4-9所示。/sundae_meng4.2.4子程序設(shè)計(jì)1.子程序的概念2.子程序調(diào)用

主程序調(diào)用子程序指令:LCALL、ACALL子程序執(zhí)行結(jié)束返回指令:RET/sundae_meng3.現(xiàn)場(chǎng)保護(hù)

子程序執(zhí)行時(shí)首先必須將兩段程序都用到的寄存器或存貯單元保存起來,稱現(xiàn)場(chǎng)保護(hù)。在子程序返回前,再將保存起來的內(nèi)容恢復(fù)到原處,返回后繼續(xù)執(zhí)行程序,這個(gè)過程稱恢復(fù)現(xiàn)場(chǎng)。對(duì)于PC值的現(xiàn)場(chǎng)保護(hù)和恢復(fù)是由計(jì)算機(jī)在執(zhí)行LCALL,ACALL和RET時(shí)自動(dòng)完成的。

對(duì)于其它需要保護(hù)的存貯單元,由程序員在子程序的開頭和結(jié)尾編程實(shí)現(xiàn),一般也是用棧操作指令完成的。

4.主程序與子程序的參數(shù)傳遞

主程序在調(diào)用子程序時(shí)必須將具體的數(shù)據(jù)傳遞給子程序中相應(yīng)的變量(寄存器等),這些數(shù)據(jù)稱入口參數(shù)。子程序執(zhí)行結(jié)束后也必須將運(yùn)行結(jié)果傳遞給主程序供主程序使用,這些結(jié)果數(shù)據(jù)稱出口參數(shù)。

/sundae_meng〔例4-12〕設(shè)內(nèi)部存放長(zhǎng)度為40H的ASCII字符串,首址為40H。試將該字符中每一個(gè)字符中加偶校驗(yàn)位。要求先編寫ASCII字符的偶校驗(yàn)子程序,通過子程序調(diào)用完成所給任務(wù)。

〔解〕該例中,入口參數(shù)僅有一個(gè)ASCII數(shù),出口數(shù)據(jù)也只有一個(gè)加校驗(yàn)位的ASCII字符,可只用累加器A傳送。子程序編寫如下:

ORG0120HSUB:ADDA,#00H;根據(jù)A中字符的1的個(gè)數(shù);產(chǎn)生PSW的奇偶標(biāo)志位PJNBP,DONE;判A中1個(gè)數(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. 人人文庫(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)論