匯編語言程序設(shè)計_第1頁
匯編語言程序設(shè)計_第2頁
匯編語言程序設(shè)計_第3頁
匯編語言程序設(shè)計_第4頁
匯編語言程序設(shè)計_第5頁
已閱讀5頁,還剩45頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

匯編語言程序設(shè)計3/16/2023廣東松山職業(yè)技術(shù)學(xué)院課件制作組第一頁,共五十頁,2022年,8月28日本章主要內(nèi)容

4.1匯編語言程序設(shè)計基礎(chǔ)

4.2順序程序設(shè)計4.3分支程序設(shè)計

4.4

循環(huán)程序設(shè)計

4.5

子程序設(shè)計

4.6

算術(shù)運算和數(shù)碼轉(zhuǎn)制程序設(shè)計3/16/2023廣東松山職業(yè)技術(shù)學(xué)院課件制作組第二頁,共五十頁,2022年,8月28日4.1匯編語言程序設(shè)計基礎(chǔ)

1.機器語言4.1.1程序設(shè)計語言簡介2.匯編語言用二進制編碼表示每條指令。計算機能夠直接執(zhí)行用機器語言編出的機器碼程序。不同種類的計算機,由于其內(nèi)部結(jié)構(gòu)不完全相同,它的機器碼指令也不一定相同。符號化的機器語言。它用一些容易理解和記憶的符號代替機器碼指令,又稱為助記符語言,助記符指令與機器碼指令一一對應(yīng)。不同結(jié)構(gòu)的計算機,匯編指令不相同。3/16/2023廣東松山職業(yè)技術(shù)學(xué)院課件制作組第三頁,共五十頁,2022年,8月28日匯編語言和特點:對比機器碼,匯編語言克服了機器語言的缺點,方便了用戶記憶指令和編寫程序,但用匯編語言編寫的源程序需用匯編程序“翻譯”成機器碼后方可執(zhí)行。采用匯編語言編寫程序,可以直接訪問和操作單片機中的寄存器及存儲器單元,對數(shù)據(jù)的處理表述的非常具體。因此,在計算機實時測試和控制領(lǐng)域中得到了廣泛應(yīng)用。接近自然語言和數(shù)學(xué)語言的算法語言,具有直觀、通用等特點。不象機器語言和匯編語言編寫程序需要完全了解CPU硬件結(jié)構(gòu),且程序不能移植。

3.高級語言3/16/2023廣東松山職業(yè)技術(shù)學(xué)院課件制作組第四頁,共五十頁,2022年,8月28日4.1.2匯編語言程序設(shè)計步驟1.分析問題,確定算法

程序設(shè)計中最重要的一步。設(shè)計人員必須認真、仔細地考慮系統(tǒng)需要解決的各種問題以及將來系統(tǒng)功能的進一步擴展,明確知道程序要解決的問題和接收、處理、發(fā)送的數(shù)據(jù)范圍以及使用什么樣的算法。

2.畫流程圖

流程圖是用各種圖形、符號、有向線段來直觀地表示程序執(zhí)行的步驟和順序。它可使人們通過流程圖的基本線索,對全局有完整的了解。3/16/2023廣東松山職業(yè)技術(shù)學(xué)院課件制作組第五頁,共五十頁,2022年,8月28日4.1.2匯編語言程序設(shè)計步驟4.調(diào)試、測試程序調(diào)試是利用仿真器等開發(fā)工具,采用單步、設(shè)斷點、連續(xù)運行等方法排除程序中的錯誤,完善程序的功能。3.編寫匯編語言源程序

根據(jù)流程圖用匯編語言指令實現(xiàn)流程圖的每一個步驟,從而編寫出匯編語言的源程序。3/16/2023廣東松山職業(yè)技術(shù)學(xué)院課件制作組第六頁,共五十頁,2022年,8月28日4.1.3偽指令

1.匯編起始偽指令ORG格式:ORG

16位地址功能:規(guī)定該指令后面的源程序匯編后所產(chǎn)生的目標程序存放的起始地址。例4.1ORG2000HMAIN:MOVA,#50H2.匯編結(jié)束偽指令END格式:END功能:通知匯編程序結(jié)束匯編。匯編時遇到END指令,則結(jié)束所有匯編工作,而END之后的所有指令將不予處理。3/16/2023廣東松山職業(yè)技術(shù)學(xué)院課件制作組第七頁,共五十頁,2022年,8月28日3.賦值偽指令EQU格式:字符名稱

EQU

賦值項

功能:把該偽指令右邊的值賦項給左邊用戶定義的符號。例4-3COUNTEQU64HMOVA,COUNT;A←(64H)注意:使用EQU偽指令時,必須先賦值,后使用,故該指令通常放在程序開頭。而賦值后的“字符”,其值在整個程序中不改變,并可多次使用。3/16/2023廣東松山職業(yè)技術(shù)學(xué)院課件制作組第八頁,共五十頁,2022年,8月28日4.定義數(shù)據(jù)字節(jié)偽指令DB

格式:[標號:]DB字節(jié)數(shù)據(jù)表

功能:從指定的地址單元開始,定義若干個字節(jié)的數(shù)據(jù)或ASCII碼字符。例4-4ORG2000HTAB:DB99H,00H,01H,02H,03H,04HSTR:DB‘ABC’┆以上偽指令經(jīng)匯編后在程序儲存器中的2000H~2008H單元的內(nèi)容為:99H、00H、01H、02H、03H、04H、41H、42H、43H。3/16/2023廣東松山職業(yè)技術(shù)學(xué)院課件制作組第九頁,共五十頁,2022年,8月28日5.定義數(shù)據(jù)字節(jié)偽指令DW

格式:[標號:]DW16位數(shù)據(jù)表

功能:從指定的地址單元開始,定義若干個字數(shù)據(jù)(16位)。例4-5ORG2000HTAB:DW1234H,50H,‘CD’以上偽指令經(jīng)匯編后,程序存儲器中的2000H~2005H單元的內(nèi)容為:12H、34H、00H、50H、43H、44H。3/16/2023廣東松山職業(yè)技術(shù)學(xué)院課件制作組第十頁,共五十頁,2022年,8月28日6.數(shù)據(jù)地址值偽指令DATA格式:標號

DATA

表達式功能:把由表達式指定的數(shù)據(jù)地址或代碼地址賦予規(guī)定的標號。DATA偽指令的功能和EQU偽指令相似,但DATA偽指令所定義的符號可先使用后定義。在程序中它常用來定義數(shù)據(jù)地址。該語句一般放在程序的開頭和末尾。

3/16/2023廣東松山職業(yè)技術(shù)學(xué)院課件制作組第十一頁,共五十頁,2022年,8月28日4.1.3偽指令

7.定義存儲區(qū)偽指令DS

格式:[標號:]DS

表達式功能:從指定的地址單元開始,保留由表達式指定的若干字節(jié)空間,以備程序使用。例4-6ORG2000HDS05DB11H,22H,33H以上偽指令經(jīng)匯編后從2000H單元開始,保留5個字節(jié)的存儲單元,從2005H單元開始連續(xù)存放11H,22H,33H代碼。3/16/2023廣東松山職業(yè)技術(shù)學(xué)院課件制作組第十二頁,共五十頁,2022年,8月28日4.1.3偽指令

8.位地址賦值偽指令BIT格式:字符名稱

BIT

位地址功能:把位地址賦予規(guī)定的字符名稱,常用于定義位符號地址。例4-7AABITP1.7BBBITP1.6匯編后P1.7和P1.6(位地址)賦給變量AA和BB,在程序中就可以把AA和BB作為位地址使用。上面介紹了MCS-51單片機匯編語言中常用的偽指令。在編寫匯編語言源程序時,必須嚴格按照匯編語言的規(guī)范書寫。3/16/2023廣東松山職業(yè)技術(shù)學(xué)院課件制作組第十三頁,共五十頁,2022年,8月28日4.2順序程序設(shè)計順序程序(又稱簡單程序)是一種最簡單、最基本的程序。程序按編寫的順序從第一條指令開始執(zhí)行,直到最后一條指令為止。計算機是按指令在存儲器中存放的先后次序來順序執(zhí)行程序的。它會在PC控制下順序執(zhí)行。這種程序雖然簡單,但它是構(gòu)成復(fù)雜程序的基礎(chǔ)。3/16/2023廣東松山職業(yè)技術(shù)學(xué)院課件制作組第十四頁,共五十頁,2022年,8月28日例4-10拆字程序:將40H單元中的內(nèi)容拆開后分別送41H、42H單元中。ORG0000HMOVA,40HANLA,#0FHMOV41H,AMOVA,40HANLA,#0F0HSWAPAMOV42H,AEND4.2順序程序設(shè)計3/16/2023廣東松山職業(yè)技術(shù)學(xué)院課件制作組第十五頁,共五十頁,2022年,8月28日4.3分支程序設(shè)計分支程序條件分支無條件分支LJMP、AJMP單分支多分支JZ、JNZCJNZ、DJNZ等JNC、JB、JNB、JBC等3/16/2023廣東松山職業(yè)技術(shù)學(xué)院課件制作組第十六頁,共五十頁,2022年,8月28日4.3分支程序設(shè)計例4-11兩個無符號數(shù)比較大小設(shè)兩個連續(xù)外部RAM單元ST1和ST2中存放無符號的二進制數(shù),找出其中的大數(shù)存入ST3單元中。用減法指令SUBB來比較兩數(shù)的大小。執(zhí)行該指令前,先把進位位清零。通過借位(CY)的狀態(tài)判斷兩數(shù)的大小。設(shè)兩個數(shù)X和Y,當(dāng)X≥Y時,(CY)=0;X<Y,(CY)=1。用減法指令比較大小,會破壞累加器中的內(nèi)容,故作減法前先保存累加器中的內(nèi)容。執(zhí)行JNC指令后,形成了分支。執(zhí)行SJMP指令后,實現(xiàn)程序的轉(zhuǎn)移。3/16/2023廣東松山職業(yè)技術(shù)學(xué)院課件制作組第十七頁,共五十頁,2022年,8月28日

ORG8000H

ST1EQU8040H

START1:CLRC

MOVDPTR,#ST1MOVXA,@DPTRMOVR2,AINCDPTR

MOVXA,@DTPRSUBBA,R2JNCBIG1XCHA,R2BIG0:INCDPTRMOVX@DPTR,A4.3分支程序設(shè)計SJMP$BIG1:MOVXA,@DPTRSJMPBIG0END3/16/2023廣東松山職業(yè)技術(shù)學(xué)院課件制作組第十八頁,共五十頁,2022年,8月28日例4-12將ASCII碼表的ASCII碼轉(zhuǎn)換為十六進制數(shù),如果ASCII碼不能轉(zhuǎn)換成十六進制數(shù),用戶標志位置1。

由ASCII碼表可知,30H~39H為0~9的ASCII碼,41H~46H為A~F的ASCII碼。在這一范圍內(nèi)的ASCII碼減30H或37H就可以獲得對應(yīng)的十六進制數(shù)。設(shè)ASCII碼放在累加器A中,轉(zhuǎn)換結(jié)果放回A中。流程圖如右圖所示。4.3分支程序設(shè)計3/16/2023廣東松山職業(yè)技術(shù)學(xué)院課件制作組第十九頁,共五十頁,2022年,8月28日4.3分支程序設(shè)計

ORG0000HSTART:CLRCSUBBA,#30HJCNASCCJNEA,#0AH,MMMM:JCASCSUBBA,#07HCJNEA,#0AH,NNNN:JCNASCCJNEA,#10H,LLLL:JCASCNASC:SETBF0ASC:RETEND3/16/2023廣東松山職業(yè)技術(shù)學(xué)院課件制作組第二十頁,共五十頁,2022年,8月28日4.4循環(huán)程序設(shè)計在程序設(shè)計中,只有簡單程序和分支程序是不夠的。因為簡單程序,每條指令只執(zhí)行一次,而分支程序則根據(jù)條件的不同,會跳過一些指令,執(zhí)行另一些指令。它們的特點是,每一條指令至多執(zhí)行一次。在處理實際事務(wù)時,有時會遇到多次重復(fù)處理的問題,用循環(huán)程序的方法來解決就比較合適。循環(huán)程序中的某些指令可以反復(fù)執(zhí)行多次。采用循環(huán)程序,使程序縮短,節(jié)省存儲單元。重復(fù)次數(shù)越多,循環(huán)程序的優(yōu)越性就越明顯。但是并不節(jié)省程序的執(zhí)行時間。由于要有循環(huán)準備、結(jié)束判斷等指令,循環(huán)程序執(zhí)行速度要比簡單程序稍慢些。3/16/2023廣東松山職業(yè)技術(shù)學(xué)院課件制作組第二十一頁,共五十頁,2022年,8月28日4.4.1循環(huán)程序結(jié)構(gòu)1.循環(huán)程序的組成

初始化部分:為循環(huán)程序做準備。如設(shè)置循環(huán)次數(shù)計數(shù)器的初值,地址指針置初值,為循環(huán)變量賦初值等。處理部分:為反復(fù)執(zhí)行的程序段,是循環(huán)程序的實體。修改部分:每執(zhí)行一次循環(huán)體后,對指針做一次修改,使指針指向下一數(shù)據(jù)所在位置,為進入下一輪處理做準備。控制部分:根據(jù)循環(huán)次數(shù)計數(shù)器的狀態(tài)或循環(huán)條件,檢查循環(huán)能否繼續(xù)執(zhí)行,若循環(huán)次數(shù)已達到或循環(huán)條件不滿足,應(yīng)控制退出循環(huán),否則繼續(xù)循環(huán)。

通常處理、修改、控制部分又稱為循環(huán)體。結(jié)束部分:分析及存放執(zhí)行結(jié)果。3/16/2023廣東松山職業(yè)技術(shù)學(xué)院課件制作組第二十二頁,共五十頁,2022年,8月28日4.4.1循環(huán)程序結(jié)構(gòu)2.循環(huán)程序的結(jié)構(gòu)

先進入處理部分,再控制循環(huán)。即至少執(zhí)行一次循環(huán)體。先控制循環(huán),后進入處理部分。即先根據(jù)判斷結(jié)果,控制循環(huán)的執(zhí)行與否,有時可以不進入循環(huán)體就退出循環(huán)程序。3/16/2023廣東松山職業(yè)技術(shù)學(xué)院課件制作組第二十三頁,共五十頁,2022年,8月28日4.4.2循環(huán)程序設(shè)計1.單循環(huán)程序

循環(huán)次數(shù)已知的循環(huán)程序例4-14工作單元清零。將40H為起點的8個單元清0。注:此程序的前2~4句為設(shè)定循環(huán)初值,5~7句為循環(huán)體。

ORG0000H

CLEAR:CLRA

MOVR0,#40H

MOVR7,#08

LOOP:MOV@R0,A

INCR0

DJNZR7,LOOP

END3/16/2023廣東松山職業(yè)技術(shù)學(xué)院課件制作組第二十四頁,共五十頁,2022年,8月28日4.4.2循環(huán)程序設(shè)計1.單循環(huán)程序

循環(huán)次數(shù)已知的循環(huán)程序例4-14工作單元清零。將外部2000H開始的50個RAM單元清零。注:本例中循環(huán)次數(shù)已知,用R2作循環(huán)次數(shù)計數(shù)器,用DJNZ指令修改計數(shù)器值,并控制循環(huán)的結(jié)束與否。ORG0000H

MOVDPTR,#2000H

CLEAR:CLRA

MOVR2,#32HLOOP:MOVX@DPTR,A

INCDPTRDJNZR2,LOOPEND

3/16/2023廣東松山職業(yè)技術(shù)學(xué)院課件制作組第二十五頁,共五十頁,2022年,8月28日4.4.2循環(huán)程序設(shè)計循環(huán)次數(shù)未知的循環(huán)程序例4-17測試字符串長度設(shè)有一串字符依次存放在從50H單元開始的連續(xù)單元中,該字符串以回車符為結(jié)束標志,測得的字符串長度存入R2中。

ORG0000HCONT:MOVR2,#00HMOVR0,#50HNT:CJNE@R0,#0DH,LPRETLP:INCR0INCR2SJMPNTEND待測字符以ASCII碼形式存放在RAM中,回車符的ASCII碼為0DH,程序中用一條“CJNE@R0,#0DH,LP”指令實現(xiàn)字符比較及控制循環(huán)任務(wù)的結(jié)束。

3/16/2023廣東松山職業(yè)技術(shù)學(xué)院課件制作組第二十六頁,共五十頁,2022年,8月28日4.4.2循環(huán)程序設(shè)計2.多循環(huán)程序

例4-18試編寫10秒延時程序。

延時程序與MCS-51執(zhí)行指令的時間有關(guān),如果使用6MHz晶振,一個機器周期為2μs,計算出執(zhí)行一條指令以至一個循環(huán)所需要的時間,給出相應(yīng)的循環(huán)次數(shù),便能達到延時的目的。

DEL:MOVR5,#100

DEL0:MOVR6,#200

DEL1:MOVR7,#248NOP

DEL2:DJNZR7,DEL2;248×2+4

DJNZR6,DEL1;(248×2+4)×200+4

DJNZR5,DEL0;[(248×2+4)×200+4]×100+4

RET3/16/2023廣東松山職業(yè)技術(shù)學(xué)院課件制作組第二十七頁,共五十頁,2022年,8月28日4.4.2循環(huán)程序設(shè)計上例延時程序?qū)嶋H延時為10.000303秒。它是一個三重循環(huán)程序,利用程序嵌套的方法對時間進行延遲是程序設(shè)計中常用的方法。使用多重循環(huán)程序時,必須注意以下幾點:

(1)循環(huán)嵌套,必須層次分明,不允許產(chǎn)生內(nèi)外層循環(huán)交叉。

(2)外循環(huán)可以一層層向內(nèi)循環(huán)進入,結(jié)束時由里往外一層層退出。

(3)內(nèi)循環(huán)體可以直接轉(zhuǎn)入外循環(huán)體,實現(xiàn)一個循環(huán)由多個條件控制的循環(huán)結(jié)構(gòu)方式。3/16/2023廣東松山職業(yè)技術(shù)學(xué)院課件制作組第二十八頁,共五十頁,2022年,8月28日4.5子程序設(shè)計在實際程序中,常常會多次進行一些相同的計算和操作。如數(shù)制轉(zhuǎn)換、函數(shù)式計算等。如果每次都從頭開始編制一段程序,不僅麻煩,而且浪費存儲空間。因此對一些常用的程序段,以子程序的形式,事先存放在存儲器的某一區(qū)域,當(dāng)主程序在運行過程中,需要用子程序時,只要執(zhí)行調(diào)用子程序的指令,使程序轉(zhuǎn)至子程序。子程序處理完畢,返回主程序,繼續(xù)進行以后的操作。調(diào)用子程序有幾個優(yōu)點:

(1)避免對相同程序段的重復(fù)編制。

(2)簡化程序的邏輯結(jié)構(gòu),同時也便于程序調(diào)試。

(3)節(jié)省存儲器空間。

MCS-51指令系統(tǒng)中,提供了兩條調(diào)用子程序指令A(yù)CALL、LCALL和一條返回主程序的指令RET。

3/16/2023廣東松山職業(yè)技術(shù)學(xué)院課件制作組第二十九頁,共五十頁,2022年,8月28日4.5.1工作寄存器或累加器傳遞參數(shù)

此方法是把入口參數(shù)或出口參數(shù)存放在工作寄存器或累加器中。使用這種方法程序最簡單,運算速度也最高。它的缺點是工作寄存器數(shù)量有限,不能傳遞太多的數(shù)據(jù);主程序必須先把數(shù)據(jù)送到工作寄存器;參數(shù)個數(shù)固定,不能由主程序任意改變。例4-20請編出能把20H單元內(nèi)兩個BCD數(shù)變換成相應(yīng)ASCII碼并放在21H(高位BCD數(shù)的ASCII碼)和22H(低位BCD數(shù)的ASCII碼)單元的程序。根據(jù)ASCII表,0~9的BCD數(shù)和它們的ASCII碼之間僅相差30H。因此,僅需把20H單元中兩個BCD數(shù)拆開,分別和30H相加就行了。3/16/2023廣東松山職業(yè)技術(shù)學(xué)院課件制作組第三十頁,共五十頁,2022年,8月28日4.5.1工作寄存器或累加器傳遞參數(shù)

ORG0000H

ASCH:MOVR0,#22H

MOV@R0,#00H

MOVA,20H

XCHDA,@R0

ORL22H,#30H

SWAPA

ORLA,#30H

MOV21H,A

SJMP$

END

3/16/2023廣東松山職業(yè)技術(shù)學(xué)院課件制作組第三十一頁,共五十頁,2022年,8月28日4.5.2用指針寄存器傳遞參數(shù)

由于數(shù)據(jù)一般存放在存儲器中,而不是工作寄存器中,故可用指針來指示數(shù)據(jù)的位置,這樣可以大大節(jié)省傳遞數(shù)據(jù)的工作量,并可實現(xiàn)可變長度運算。一般如參數(shù)在內(nèi)部RAM中,可用R0或R1作指針??勺冮L度運算時,可用一個寄存器來指出數(shù)據(jù)長度,也可在數(shù)據(jù)中指出其長度(如使用結(jié)束標記符)。例4-21將R0和R1指出的內(nèi)部RAM中兩個3字節(jié)無符號整數(shù)相加,結(jié)果送R0指出的內(nèi)部RAM中。入口時,R0、R1分別指向加數(shù)和被加數(shù)的低位字節(jié),出口時R0指向結(jié)果的高位字節(jié)。利用MCS-51的帶進位加法指令,可以直接編寫出程序。3/16/2023廣東松山職業(yè)技術(shù)學(xué)院課件制作組第三十二頁,共五十頁,2022年,8月28日4.5.2用指針寄存器傳遞參數(shù)

ORG0000H

NADD:MOVR7,#3

CLRC

NADD1:MOVA,@R0

ADDCA,@R1

MOV@R0,A

DECR0

DECR1

DJNZR7,NADD1

INCR0

RET

END

3/16/2023廣東松山職業(yè)技術(shù)學(xué)院課件制作組第三十三頁,共五十頁,2022年,8月28日4.5.3用堆棧傳遞參數(shù)

堆??梢杂糜趥鬟f參數(shù)。調(diào)用時,主程序可用PUSH指令把參數(shù)壓入堆棧中。之后子程序可按堆棧指針訪問堆棧中的參數(shù),同時可把結(jié)果參數(shù)送回堆棧中。返回主程序后,可用POP指令得到這些結(jié)果參數(shù)。這種方法的優(yōu)點是簡單,能傳遞大量參數(shù),不必為特定的參數(shù)分配存儲單元。使用這種方法時,由于參數(shù)在堆棧中,故大大簡化了中斷響應(yīng)時的現(xiàn)場保護。3/16/2023廣東松山職業(yè)技術(shù)學(xué)院課件制作組第三十四頁,共五十頁,2022年,8月28日4.5.3用堆棧傳遞參數(shù)

例4-22一位十六進制數(shù)轉(zhuǎn)換為ASCII碼子程序。子程序HASC把堆棧中的一位十六進制數(shù)變成ASCII碼。它先從堆棧中讀出表格中存放的數(shù)據(jù),然后用它的低4位去訪問一個局部的16項的ASCII碼表,把得到的ASCII碼放回堆棧中,然后返回。它不改變累加器的值??梢园床煌那闆r調(diào)用這個程序。ORG0000H

HASC:MOVR0,SP

DECR0

DECR0

XCHA,@R0

ANLA,#0FH

ADDA,#2

MOVCA,@A+PC

XCHA,@R0

RET

DB′0123456789′

DB′ABCDEF′

END

3/16/2023廣東松山職業(yè)技術(shù)學(xué)院課件制作組第三十五頁,共五十頁,2022年,8月28日4.5.4程序段參數(shù)傳遞以上這些參數(shù)傳遞方法,多數(shù)是在調(diào)用子程序前,把值裝入適當(dāng)?shù)募拇嫫鱾鬟f參數(shù)。如果有許多常數(shù)參數(shù),這種技術(shù)不太有效,因為每個參數(shù)需要一個寄存器傳遞,并且在每次調(diào)用子程序時需分別用指令把它們裝入寄存器中。

如果需要大量參數(shù),并且這些參數(shù)均為常數(shù)時,程序段參數(shù)傳遞方法(有時也稱為直接參數(shù)傳遞)是傳遞常數(shù)的有效方法。調(diào)用時,常數(shù)作為程序代碼的一部分,緊跟在調(diào)用子程序后面。子程序根據(jù)棧內(nèi)的返回地址,決定從何處找到這些常數(shù),然后在需要時,從程序存儲器中讀出這些參數(shù)。3/16/2023廣東松山職業(yè)技術(shù)學(xué)院課件制作組第三十六頁,共五十頁,2022年,8月28日4.5.4程序段參數(shù)傳遞例4-23字符串發(fā)送子程序。

在實際應(yīng)用中,經(jīng)常需要發(fā)送各種字符串。這些字符串,通常放在EPROM(程序存儲器)中。按通常方法,需要先把這些字符裝入RAM中,然后用傳遞指針的方法來實現(xiàn)參數(shù)傳遞。為了簡便,也可把字符串放在EPROM獨立區(qū)域中,然后用傳遞字符串首地址的方法來傳遞參數(shù)。以后子程序可按該地址用MOVC指令從EPROM中讀出并發(fā)送該字符串。但是最簡單的方法是采用程序段參數(shù)傳遞方法。下例中,字符串以全0結(jié)束。

3/16/2023廣東松山職業(yè)技術(shù)學(xué)院課件制作組第三十七頁,共五十頁,2022年,8月28日4.5.4程序段參數(shù)傳遞ORG0000H

SOUT:POPDPH;棧中指針

POPDPL

SOT1:CLRA

MOVCA,@A+DPTR

INCDPTR

JZSEND

JNBTI,$;$為本條指令地址

CLRTI

MOVSBUF,A

SJMPSOT1

SEND:JMP@A+DPTR

END

3/16/2023廣東松山職業(yè)技術(shù)學(xué)院課件制作組第三十八頁,共五十頁,2022年,8月28日4.5.4程序段參數(shù)傳遞下面以發(fā)送字符串′MCS-51CONTROLLER′為例,說明該子程序使用方法。

ACALLSOUT

DB′MCS—51CONTROLLER′

DB0AH,0DH,0┆

后面緊接其他程序。

上面這種子程序有幾個特點:

(1)它不以一般的返回指令結(jié)尾,而是采用基址寄存器加變址寄存器間接轉(zhuǎn)移指令來返回到參數(shù)表后的第一條指令。一開始的POP指令已調(diào)整了棧指針的內(nèi)容。3/16/2023廣東松山職業(yè)技術(shù)學(xué)院課件制作組第三十九頁,共五十頁,2022年,8月28日4.5.4程序段參數(shù)傳遞(2)它可適用于ACALL或LCALL,因為這兩種調(diào)用指令均把下一條指令或數(shù)據(jù)字節(jié)的地址壓入棧中。調(diào)用程序可位于MCS-51全部地址空間的任何地方,因為MOVC指令能訪問所有64K字節(jié)。(3)傳遞到子程序的參數(shù)可按最方便的次序列表,而不必按使用的次序排列。子程序在每一條MOVC指令前累加器裝入適當(dāng)?shù)膮?shù),這樣基本上可“隨機訪問”參數(shù)表。(4)子程序只使用累加器A和數(shù)據(jù)指針DPTR,應(yīng)用程序可以在調(diào)用前,把這些寄存器壓入堆棧中,保護它們的內(nèi)容。

3/16/2023廣東松山職業(yè)技術(shù)學(xué)院課件制作組第四十頁,共五十頁,2022年,8月28日4.6.1算術(shù)運算程序的設(shè)計一般說來,單片機應(yīng)用系統(tǒng)的任務(wù)就是對各種物理參數(shù)進行測試和控制。因此,數(shù)據(jù)的處理是避免不了的。盡管數(shù)據(jù)處理并不是MCS-51單片機的優(yōu)勢所在,但運用一些編程技巧和方法,對于大部分測控應(yīng)用MCS-51單片機還是能勝任的。

MCS-51的指令系統(tǒng)提供的是字節(jié)運算指令,所以在處理多字節(jié)數(shù)的加減運算時,要合理地運用進位(借位)標志。例4-24多字節(jié)無符號數(shù)的加法。

設(shè)兩個N字節(jié)的無符號數(shù)分別存放在內(nèi)部RAM中以DATA1和DATA2開始的單元中。相加后的結(jié)果要求存放在DATA2數(shù)據(jù)區(qū)。3/16/2023廣東松山職業(yè)技術(shù)學(xué)院課件制作組第四十一頁,共五十頁,2022年,8月28日4.6.1算術(shù)運算程序的設(shè)計程序段如下:

ORG2000H

MOVR0,#DATA1

MOVR1,#DATA2

MOVR7,#N;置字節(jié)數(shù)

CLRC

LOOP:MOVA,@R0

ADDCA,@R1;求和

MOV@R1,A;存結(jié)果

INCR0;修改指針

INCR1

DJNZR7,LOOP

END3/16/2023廣東松山職業(yè)技術(shù)學(xué)院課件制作組第四十二頁,共五十頁,2022年,8月28日4.6.2數(shù)碼轉(zhuǎn)制程序設(shè)計計算機中常用的是二進制碼、BCD碼和ASCII碼。但是,計算機能識別和處理的只有二進制碼,而輸入輸出設(shè)備(如顯示器、打印機等)常使用BCD碼和ASCII碼。因此,在計算機中經(jīng)常需要通過軟件進行相互間的轉(zhuǎn)換。1.十六進制數(shù)與ASCII碼之間的轉(zhuǎn)換

二進制數(shù)與十六進制數(shù)有著直接的對應(yīng)關(guān)系。所以,介紹十六進制數(shù)與ASCII碼的轉(zhuǎn)換。3/16/2023廣東松山職業(yè)技術(shù)學(xué)院課件制作組第四十三頁,共五十頁,2022年,8月28日4.6.2數(shù)碼轉(zhuǎn)制程序設(shè)計例4-29將一位十六進制數(shù)轉(zhuǎn)換為ACSII碼。

設(shè)十六進制數(shù)存放于R0中,轉(zhuǎn)換后的ASCII碼存放于R2中。

程序如下:

HTASC:MOVA,R0;取出4位二進制數(shù)

ANLA,#0FH;屏蔽高位

PUSHA;入棧保護

CLRC

SUBBA,#0AH;4位二進制數(shù)減10

POPA;彈出原4位二進制數(shù)

JCLOOP;該數(shù)小于10,加30H

ADDA,#37H;大于等于10,加37H

SJMPLOOP1

LOOP:ADDA,#30H

LOOP1:MOVR2,A

RET

3/16/2023廣東松山職業(yè)技術(shù)學(xué)院課件制作組第四十四頁,共五十頁,2022年,8月28日本課小結(jié)匯編語言的源程序結(jié)構(gòu)緊湊、靈活,編譯后的目標程序效率高,具有占存儲空間少、運行速度快、實時性強等優(yōu)點,應(yīng)用相當(dāng)廣泛。但是由于它是面向機器的語言,所以它缺乏通用性,而且編程復(fù)雜繁瑣。在進行

溫馨提示

  • 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)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論