第四章 單片機(jī)程序設(shè)計(jì)基礎(chǔ)_第1頁
第四章 單片機(jī)程序設(shè)計(jì)基礎(chǔ)_第2頁
第四章 單片機(jī)程序設(shè)計(jì)基礎(chǔ)_第3頁
第四章 單片機(jī)程序設(shè)計(jì)基礎(chǔ)_第4頁
第四章 單片機(jī)程序設(shè)計(jì)基礎(chǔ)_第5頁
已閱讀5頁,還剩42頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第四章單片機(jī)程序設(shè)計(jì)基礎(chǔ)主講教師:高田第四章

單片機(jī)程序設(shè)計(jì)基礎(chǔ)匯編語言概述匯編語言程序的基本結(jié)構(gòu)匯編語言程序設(shè)計(jì)舉例第四章

匯編語言概述匯編語言特點(diǎn)用助記符及標(biāo)號(hào)地址、標(biāo)號(hào)等符號(hào)來書寫的程序設(shè)計(jì)語言稱匯編語言,用匯編語言編寫的程序稱為匯編語言程序指令采用助記符而不是使用指令碼表示地址采用標(biāo)號(hào)地址,而不是真正的實(shí)際地址采用助記符和標(biāo)號(hào)地址為使用者提供了方便,不必記憶指令的機(jī)器碼,也不必進(jìn)行實(shí)際的地址計(jì)算。將助記符翻譯成機(jī)器碼和將標(biāo)號(hào)地址換算成實(shí)際地址的工作稱為匯編第四章

匯編語言概述匯編的2種方式手工匯編:人工查指令表匯編。用于設(shè)計(jì)短小程序或調(diào)試程序的場合。機(jī)器匯編:用匯編程序進(jìn)行匯編匯編過程源程序(匯編語言程序)目的程序(機(jī)器語言程序)匯編程序(完成源程序到目的程序的翻譯工作)第四章

匯編語言概述匯編語言的特點(diǎn):助記符指令和機(jī)器指令一一對(duì)應(yīng),因此使用匯編語言編寫的程序代碼效率高,占用存儲(chǔ)空間小,運(yùn)行速度快。使用匯編語言能編寫出最優(yōu)化的程序匯編語言能直接與存儲(chǔ)器和接口電路打交道,也能申請(qǐng)中斷,因此匯編語言程序能直接管理和控制硬件設(shè)備匯編語言是面向計(jì)算機(jī)的,不是獨(dú)立于CPU的,每種微處理器都有專門的指令系統(tǒng),有自己的匯編語言,彼此之間不能通用。程序設(shè)計(jì)人員必須對(duì)計(jì)算機(jī)硬件有相當(dāng)深入的了解,才能使用匯編語言編寫程序,由于匯編語言與機(jī)器有關(guān),因此匯編語言程序不易移植,但是掌握一種匯編語言有助于學(xué)習(xí)其他的匯編語言。第四章

匯編語言概述匯編語言程序的語句格式MCS—51匯編語言程序的語句格式為[標(biāo)號(hào):]操作碼[操作數(shù)][;注釋]有方括號(hào)的部分是可選擇部分,可有可無,視需要而定第四章

匯編語言概述標(biāo)號(hào)標(biāo)號(hào)是語句地址的標(biāo)志符號(hào),匯編語言程序的語句通過標(biāo)號(hào)才能訪問到該語句。對(duì)于標(biāo)號(hào)的使用有以下規(guī)定:標(biāo)號(hào)由8個(gè)或8個(gè)以下ASCII字符組成,頭1個(gè)字符必須是字母,其余字符可以是字母、數(shù)字和特定字符不能使用匯編語言中已經(jīng)定義的符號(hào)作為標(biāo)號(hào),如指令助記符、偽指令、SFR的符號(hào)名稱等標(biāo)號(hào)后必須緊跟一個(gè)冒號(hào)同1標(biāo)號(hào)在1個(gè)程序只能定義1次,不能重復(fù)定義1條語句有無標(biāo)號(hào)是任選的,根據(jù)程序中是否訪問該語句而定第四章

匯編語言概述例:正確的標(biāo)號(hào):LOOP:TABLE:THLS$:LT_1:錯(cuò)誤的標(biāo)號(hào):11T:LST+2:MOV:TMOD:第四章

匯編語言概述2.操作碼用于規(guī)定語句執(zhí)行的操作,它是指令助記符或偽指令操作碼是匯編語言語句中唯一不可空缺的部分3.操作數(shù)操作數(shù)是參加運(yùn)算與操作的數(shù)據(jù)或數(shù)據(jù)的地址,它和操作碼之間用空格分開在一條語句中,操作數(shù)根據(jù)指令的不同,可以是空白或一至三個(gè)若有二個(gè)以上操作數(shù),各操作數(shù)之間用逗號(hào)分隔4.注釋注釋不用于語句的功能部分,它只是對(duì)語句功能和性質(zhì)的說明性文字注釋可有可無,不是必須的注釋用分號(hào)“;”開頭,以后為注釋的內(nèi)容使用注釋可以使程序結(jié)構(gòu)清楚,可讀性好,方便軟件的維護(hù)、修改與擴(kuò)充功能,因而一個(gè)完整的匯編語言程序應(yīng)該附有必要的注釋第四章

匯編語言概述匯編語言的偽指令偽指令是屬于指令系統(tǒng)之外的,是程序員發(fā)給匯編程序的命令。匯編程序在這些命令的指導(dǎo)下將匯編語言程序匯編,生成機(jī)器碼偽指令沒有對(duì)應(yīng)的機(jī)器語言代碼,對(duì)程序本身的算法和流程控制沒有作用MCS-51匯編語言程序中常用的偽指令有第四章

匯編語言概述1.ORG(匯編起始命令)功能是規(guī)定生成的機(jī)器語言程序代碼的起始地址格式:[標(biāo)號(hào):]ORG地址其中[標(biāo)號(hào):]是任選項(xiàng)地址項(xiàng)為16位二進(jìn)制地址。例:ORG1000H START:MOVSP,#60H規(guī)定了這個(gè)程序的START標(biāo)號(hào)所在地址為1000H,程序機(jī)器碼從1000H地址開始第四章

匯編語言概述2.END(匯編終止命令)功能是終止源程序的匯編工作,在END之后的指令,匯編程序都不予處理END是匯編語言程序的結(jié)束標(biāo)志,1個(gè)程序只能有1個(gè)END命令格式:[標(biāo)號(hào):]END[表達(dá)式]其中標(biāo)號(hào)和表達(dá)式兩項(xiàng)均是可選項(xiàng)表達(dá)式項(xiàng)表示該程序的可執(zhí)行段的首地址例:END START第四章

匯編語言概述3.EQU(等值指令)功能是將一個(gè)特定值賦與一個(gè)標(biāo)號(hào)格式:字符名稱EQU表達(dá)式字符名稱不同于標(biāo)號(hào),不加冒號(hào)表達(dá)式可以是常數(shù)、地址、標(biāo)號(hào)等賦值以后的字符名稱既可以作地址使用,也可以作立即數(shù)使用,并且其值在整個(gè)程序中是固定的第四章

匯編語言概述4.DB(定義字節(jié)命令)從指定的地址單元開始,定義若干個(gè)字節(jié)的數(shù)據(jù)格式:[標(biāo)號(hào):]DB數(shù)據(jù)表標(biāo)號(hào)是可選項(xiàng)數(shù)據(jù)表是1字節(jié)數(shù)據(jù)或用逗號(hào)分隔的1組字節(jié)數(shù)據(jù)例:

CONST:DB30HTBL:DB0C0H,0F9H,0A4H DB0B0H,99H,92H第2個(gè)例子定義了1個(gè)常數(shù)表,起始地址為TBL,表中數(shù)據(jù)按的指令中數(shù)據(jù)的順序排列第四章

匯編語言概述5.DW(定義字命令)從指定地址開始,連續(xù)存放16位的字?jǐn)?shù)據(jù)格式:[標(biāo)號(hào):]DW字?jǐn)?shù)據(jù)表1個(gè)字?jǐn)?shù)據(jù)占兩個(gè)字節(jié)在MCS-51系統(tǒng)中,字?jǐn)?shù)據(jù)是按照高字節(jié)在先,低字節(jié)在后的順序存入例:WTBL:DW1234H,279H,20H將按順序存入12H,34H,02H,79H,00H,20H第四章

匯編語言概述6.DS(定義存儲(chǔ)器命令)從指定地址開始保留若干字節(jié)的存儲(chǔ)單元格式:[標(biāo)號(hào):]DS表達(dá)式表達(dá)式的值決定了保留多少字節(jié)的存儲(chǔ)單元例:BASE:DS100將從BASE標(biāo)號(hào)地址開始保留100個(gè)存儲(chǔ)單元第四章

匯編語言概述匯編語言程序設(shè)計(jì)特點(diǎn)用匯編語言進(jìn)行程序設(shè)計(jì)與使用高級(jí)語言進(jìn)行程序設(shè)計(jì)過程是類似的,同樣需要按照分析問題、確定算法、設(shè)計(jì)流程圖和編寫程序的步驟來進(jìn)行。但是,匯編語言程序設(shè)計(jì)也有自己的特點(diǎn)。匯編程序設(shè)計(jì)時(shí),設(shè)計(jì)者要對(duì)數(shù)據(jù)的存放、寄存器和工作單元的使用作出計(jì)劃安排匯編語言程序設(shè)計(jì)要求設(shè)計(jì)人員必須對(duì)所使用的計(jì)算機(jī)的硬件結(jié)構(gòu)有較為詳細(xì)的了解,尤其對(duì)寄存器、I/O端口、定時(shí)器/計(jì)數(shù)器、中斷系統(tǒng)等更應(yīng)深入了解,從而能夠在程序設(shè)計(jì)中熟練應(yīng)用匯編語言程序設(shè)計(jì)的技巧性較高,且有軟硬件結(jié)合的特點(diǎn)第四章

匯編語言程序的基本結(jié)構(gòu)匯編語言程序的基本結(jié)構(gòu) 和大多數(shù)高級(jí)語言程序類似,匯編語言程序有四種結(jié)構(gòu)形式順序結(jié)構(gòu)分支結(jié)構(gòu)循環(huán)結(jié)構(gòu)子程序結(jié)構(gòu)第四章

匯編語言程序的基本結(jié)構(gòu)一、順序結(jié)構(gòu)程序

順序結(jié)構(gòu)是最簡單的程序結(jié)構(gòu),順序結(jié)構(gòu)的程序中既無分支、循環(huán),也無調(diào)用子程序,一條條順序執(zhí)行。例:第四章

匯編語言程序的基本結(jié)構(gòu)二、分支結(jié)構(gòu)程序程序的分支是通過條件轉(zhuǎn)移指令實(shí)現(xiàn)的,根據(jù)條件對(duì)程序執(zhí)行中的狀態(tài)進(jìn)行判斷,滿足條件則進(jìn)行程序轉(zhuǎn)移,否則按順序執(zhí)行指令系統(tǒng)中有多種條件轉(zhuǎn)移指令,包括JZ、JNZ、CJNE、DJNZ以及位狀態(tài)條件轉(zhuǎn)移指令JC、JNC、JB、JNB、JBC等分支結(jié)構(gòu)程序可分為單分支程序和多分支程序第四章

匯編語言程序的基本結(jié)構(gòu)1.單分支程序 單分支程序是只使用一次條件轉(zhuǎn)移指令的分支程序例:一位十六進(jìn)制數(shù)轉(zhuǎn)換為ASCII碼。設(shè)十六進(jìn)制數(shù)在A中,轉(zhuǎn)換結(jié)果仍存在于A中。HTOA:CJNE A,#0AH,NOEQ;==10?NOEQ:JC LT10;C==1,<10,轉(zhuǎn)移 ADD A,#07H;>=10,+7LT10:ADD A,#30H;+30HHERE:SJMP HERE‘0’~‘9’的ASCII碼為30H~39H(48~57)兩者相差30H‘A’~‘F’的ASCII碼為41H~47H(65~70)兩者相差37H第四章

匯編語言程序的基本結(jié)構(gòu)2.N路分支程序在多分支程序中,因?yàn)榭赡艿姆种?huì)有N個(gè),若采用多條CJNE指令逐次比較,程序的執(zhí)行效率會(huì)降低很多,特別是分支較多時(shí)。一般采用跳轉(zhuǎn)表的方法,兩次轉(zhuǎn)移實(shí)現(xiàn)多分支結(jié)構(gòu)K=?轉(zhuǎn)向0分支轉(zhuǎn)向1分支轉(zhuǎn)向N-1分支轉(zhuǎn)向N分支K=0K=1K=2K=3第四章

匯編語言程序的基本結(jié)構(gòu)例:設(shè)內(nèi)部RAM的30H有一個(gè)數(shù),根據(jù)該值的不同轉(zhuǎn)移到不同的程序段進(jìn)行處理,設(shè)數(shù)值的范圍是0~10的無符號(hào)數(shù)。

MOV A,30H ;取數(shù) RL A ;×2 MOV DPTR,#JMPTBL ;跳轉(zhuǎn)表首地址 JMP @A+DPTR ;一次跳轉(zhuǎn)JMPTBL:AJMP BRCH0 ;轉(zhuǎn)至分支0 AJMP BRCH1 ;轉(zhuǎn)至分支1 : AJMP BRCH10 ;轉(zhuǎn)至分支10BRCH0:....AJMP是2字節(jié)指令第四章

匯編語言程序的基本結(jié)構(gòu)使用跳轉(zhuǎn)表最多可實(shí)現(xiàn)128路分支的轉(zhuǎn)移AJMP指令的轉(zhuǎn)移范圍是2KB,分支處理程序的位置受到了限制。跳轉(zhuǎn)表使用LJMP指令,分支程序可分布在整個(gè)64KB范圍內(nèi),但要對(duì)分支數(shù)值進(jìn)行乘3處理 MOV A,30H ;取數(shù) RL A ;×2 ADD A,30H ;×2再+1等于×3 MOV DPTR,#JMPTBL ;跳轉(zhuǎn)表首地址 JMP @A+DPTR ;一次跳轉(zhuǎn)JMPTBL:LJMP BRCH0 ;轉(zhuǎn)至分支0 LJMP BRCH1 ;轉(zhuǎn)至分支1 : LJMP BRCH10 ;轉(zhuǎn)至分支10BRCH0:....第四章

匯編語言程序的基本結(jié)構(gòu)三、循環(huán)結(jié)構(gòu)程序循環(huán)程序是指計(jì)算機(jī)反復(fù)執(zhí)行某一段程序(稱為循環(huán)體)循環(huán)是在一定條件控制下進(jìn)行,以決定是繼續(xù)循環(huán)執(zhí)行或是結(jié)束循環(huán)程序循環(huán)是通過條件轉(zhuǎn)移指令進(jìn)行控制的通常循環(huán)結(jié)構(gòu)的程序包含四個(gè)組成部分循環(huán)準(zhǔn)備:設(shè)置循環(huán)次數(shù)、起始地址和初值等參數(shù)循環(huán)體:循環(huán)程序的主體,是要求重復(fù)執(zhí)行的部分循環(huán)修改:修改循環(huán)次數(shù)及有關(guān)變量參數(shù)等循環(huán)控制部分:根據(jù)循環(huán)結(jié)束條件來判斷是否結(jié)束循環(huán)第四章

匯編語言程序的基本結(jié)構(gòu)循環(huán)程序的兩種組織方式第四章

匯編語言程序的基本結(jié)構(gòu)例:外部RAM之間的數(shù)據(jù)。把外部RAM2000H開始單元中的數(shù)據(jù)傳送到外部RAM3000H開始的單元中,數(shù)據(jù)個(gè)數(shù)在內(nèi)部RAM的40H單元中訪問外部RAM只有1對(duì)以DPTR寄存器作為間址方式的指令要完成累加器與外部RAM間的數(shù)據(jù)傳送,源地址指針和目的地址指針都必須使用DPTR必須將源指針和目的指針分別保護(hù),分時(shí)占用DPTR來傳送數(shù)據(jù)第四章

匯編語言程序的基本結(jié)構(gòu) ORG1000HSTART: MOVDPTR,#2000H;源地址 PUSHDPL ;壓棧保護(hù) PUSHDPH MOVDPTR,#3000H ;目的地址 MOVR2,DPL ;保護(hù)在寄存器中 MOVR3,DPHLOOP: POPDPH ;取源指針 POPDPL MOVXA,@DPTR ;取數(shù)據(jù) INCDPTR ;修改源指針 PUSHDPL ;壓棧保護(hù) PUSHDPH MOVDPL,R2 ;取出目的地址 MOVDPH,R3 MOVX@DPTR,A ;存數(shù)據(jù) INCDPTR ;修改目的指針 MOVR2,DPL ;保護(hù)在寄存器中 MOVR3,DPH DJNZ40H,LOOPHERE: SJMPHERE第四章

匯編語言程序的基本結(jié)構(gòu)四、子程序結(jié)構(gòu)子程序結(jié)構(gòu)是匯編語言程序重要的程序組織形式恰當(dāng)?shù)厥褂米映绦?,可以使整個(gè)程序結(jié)構(gòu)清楚,便于閱讀和理解,并可減小程序代碼的長度每調(diào)用一次子程序都要附加保護(hù)斷點(diǎn)現(xiàn)場等操作,增加了程序的執(zhí)行時(shí)間,但從總的方面來說,付出這些代價(jià)是值得的第四章

匯編語言程序的基本結(jié)構(gòu)子程序應(yīng)具備的特性通用性子程序必須適應(yīng)于各種應(yīng)用程序的調(diào)用,子程序的參數(shù)應(yīng)是可變的??筛?dòng)性子程序可以不加任何修改而放置在存儲(chǔ)器的任何區(qū)域。這要求在子程序設(shè)計(jì)中應(yīng):避免使用絕對(duì)轉(zhuǎn)移指令;子程序的首地址也應(yīng)該用符號(hào)地址;可遞歸性和可重入性可遞歸性是指子程序可以調(diào)用自己;可重入性是指一個(gè)子程序可以同時(shí)被多個(gè)程序調(diào)用;這兩個(gè)特性是對(duì)大規(guī)模系統(tǒng)程序的要求,一般應(yīng)用不要求。第四章

匯編語言程序的基本結(jié)構(gòu)參數(shù)傳遞方法 匯編語言子程序結(jié)構(gòu)中,參數(shù)的傳遞要靠程序設(shè)計(jì)者自己安排數(shù)據(jù)的存放和工作單元的選擇問題 匯編語言子程序參數(shù)的傳遞一般可采用下面的方法傳遞數(shù)據(jù):將數(shù)據(jù)通過工作寄存器R0~R7或者累加器A來傳送。其具體過程:在調(diào)用子程序前把數(shù)據(jù)送入寄存器中,子程序中就對(duì)這些寄存器中的數(shù)據(jù)進(jìn)行操作子程序執(zhí)行后,結(jié)果仍由寄存器送回傳遞地址:數(shù)據(jù)存放在數(shù)據(jù)存儲(chǔ)器中,參數(shù)傳遞時(shí)只通過R0、R1、DPTR傳遞數(shù)據(jù)所存放的地址。調(diào)用結(jié)束時(shí),結(jié)果也可存放在數(shù)據(jù)存儲(chǔ)器中,傳送回的也是存在寄存器中的地址。第四章

匯編語言程序的基本結(jié)構(gòu)通過堆棧傳遞參數(shù)在調(diào)用之前,先把要傳送的參數(shù)壓入堆棧,進(jìn)入子程序后,再將堆棧中的參數(shù)彈出到工作寄存器或其他內(nèi)部RAM單元。在彈出參數(shù)時(shí),應(yīng)注意棧頂?shù)膬蓚€(gè)字節(jié)數(shù)據(jù)是斷點(diǎn)地址,不應(yīng)誤為傳遞的參數(shù),也不應(yīng)拋棄。在子程序返回之前,應(yīng)保證該兩字節(jié)數(shù)據(jù)仍處在棧頂位置,以便正確返回主程序。通過堆棧傳遞參數(shù)時(shí),應(yīng)注意不能在子程序的開頭通過壓入堆棧來保護(hù)現(xiàn)場,而應(yīng)在主程序中先保護(hù)現(xiàn)場,然后壓入要傳遞的參數(shù)在子程序返回后,應(yīng)使堆?;謴?fù)到原來的深度,保持堆棧與調(diào)用前深度一致,這樣才能保證后續(xù)堆棧操作的正確,并且不會(huì)因?yàn)槊空{(diào)用一次子程序,堆棧深度就會(huì)加深,而使堆棧發(fā)生溢出第四章

匯編語言程序的基本結(jié)構(gòu)現(xiàn)場保護(hù)進(jìn)入子程序后,除了要處理的參數(shù)數(shù)據(jù)和要傳遞回主程序的參數(shù)之外,現(xiàn)場保護(hù)有關(guān)的內(nèi)部RAM單元的內(nèi)容工作寄存器的內(nèi)容各標(biāo)志的狀態(tài)現(xiàn)場保護(hù)方法進(jìn)入子程序時(shí),將使用的或被改變的單元內(nèi)容壓堆棧在返回前,把堆棧中數(shù)據(jù)彈出到原對(duì)應(yīng)的工作單元對(duì)所使用的工作寄存器的保護(hù)可用改變工作寄存器組的方法第四章

匯編語言程序的基本結(jié)構(gòu)子程序接口說明子程序接口說明對(duì)于程序結(jié)構(gòu)沒有實(shí)質(zhì)的影響,它是一些說明子程序功能的注釋文字,便于程序的使用及調(diào)試和修改。專業(yè)的編程規(guī)范應(yīng)包含必要的子程序接口說明。子程序接口的說明主要包括子程序名稱子程序功能:簡單描述完成的工作入口參數(shù)及格式:詳細(xì)說明各入口參數(shù)的意義,若傳遞的地址或通過堆棧傳數(shù)據(jù),還應(yīng)說明在內(nèi)部RAM或堆棧中的參數(shù)的格式、順序、用途出口參數(shù)及格式子程序中所使用的寄存器和工作單元調(diào)用:本子程序調(diào)用的其他子程序名稱第四章

匯編語言程序的基本結(jié)構(gòu)例:通過調(diào)用子程序?qū)崿F(xiàn)延時(shí)100ms;子程序名稱:DELAY;功能:延時(shí)1~256ms,fOSC=12MHz,t=1us;入口參數(shù):R3=延時(shí)的ms數(shù)(二進(jìn)制表示);出口參數(shù):無;使用寄存器:R2、R3;調(diào)用:無DELAY:MOVR2,#0FAH;==250LOOP: NOP ;1t NOP ;1t DJNZR2,LOOP ;2t,內(nèi)循環(huán)250x4us DJNZR3,DELAY;2t RET;主程序 : PUSHPSW ;保護(hù)程序狀態(tài)字 MOVPSW,#08H;選擇工作寄存器1 MOVR3,#64H ;入口參數(shù)100 ACALLDELAY ;調(diào)用延時(shí) POPPSW ;恢復(fù)程序狀態(tài)字 :第四章

匯編語言程序設(shè)計(jì)舉例匯編語言程序設(shè)計(jì)舉例一、查表程序第四章

匯編語言程序設(shè)計(jì)舉例二、數(shù)制轉(zhuǎn)換程序例:雙字節(jié)取補(bǔ):將R5、R4中的雙字節(jié)二進(jìn)制數(shù)取補(bǔ),結(jié)果仍放在R5、R4中(LOR5,HIR4)DBCPL: MOV A,R5 ;取低字節(jié) CPL A ;取反 ADD A,#1 ;加一 MOV R5,A ;存結(jié)果 MOV A,R4 ;取高字節(jié) CPL A ;取反 ADDC A,#0 ;加進(jìn)位 MOV R4,A ;存結(jié)果第四章

匯編語言程序設(shè)計(jì)舉例三、算術(shù)運(yùn)算程序例:多字節(jié)二進(jìn)制數(shù)減法:設(shè)被減數(shù)首地址存于R0,減數(shù)首地址存于R1,兩個(gè)數(shù)的字節(jié)長度存于R2,相減結(jié)果存于被減數(shù)所在單元,多字節(jié)二進(jìn)制數(shù)按低字節(jié)在前的順序存放。MSUB: CLR C ;清進(jìn)位位MSUB1: MOV A,@R0 ;被減數(shù)最低字節(jié) SUBB A,@R1 ;減 MOV @R0,A;存 INC R0 ;指向高一個(gè)字節(jié) INC R1 DJNZ R2,MSUB1;循環(huán)CY位保存減法結(jié)果的借位狀態(tài)第四章

匯編語言程序設(shè)計(jì)舉例例:多字節(jié)BCD數(shù)減法:設(shè)被減數(shù)存于30H開始單元,減數(shù)存于40H開始單元,字節(jié)長度存于2FH,相減結(jié)果存于30H開始單元,多字節(jié)BCD數(shù)按低字節(jié)在前順序存放由于MCS-51指令系統(tǒng)沒有提供減法結(jié)果的十進(jìn)制調(diào)整功能,只能將其變換為十進(jìn)制數(shù)加法,再進(jìn)行十進(jìn)制調(diào)整。方法是對(duì)減數(shù)進(jìn)行十進(jìn)制取補(bǔ)后再進(jìn)行十進(jìn)制加法運(yùn)算。99…99–減數(shù)+01(-減數(shù))的補(bǔ)碼99H…9AH–BCD減數(shù)(-BCD減數(shù))的補(bǔ)碼第四章

匯編語言程序設(shè)計(jì)舉例BCDSUB: MOV R0,#30H;被減數(shù) MOV R1,#40H;減數(shù) MOV R2,2FH;字長度 MOV A,#9AH;99加1 CLR C ;多字節(jié)BCD求補(bǔ)NEGS: SUBB A,@R1 MOV @R1,A INC R1 MOV A,#99H DJNZ R2,NEGS MOVR1,#40H ;多字節(jié)BCD加法MADD:CLRCMADD1:MOVA,@R0 ADDCA,@R1 DAA MOV@R0,A INCR0 INCR1 DJNZ2FH,MADD1第四章

匯編語言程序設(shè)計(jì)舉例四、布爾運(yùn)算程序 例:設(shè)有邏輯表達(dá)式其中A——P1.0B——P1.4G——TF1D——22H.0E——22H.3F——IE1輸出Y——P1.5LOGIC: MOVC,P1.4 ;B ORL C,/TF1 ;+/G CPL C ;/() ANL C,P1.0 ;*A MOV F0,C ;存 MOV C,22H.3 ;E ORL C,/IE1 ;+/F CPL C ;/() ANL C,22H.0 ;*D ORL C,F0 ;+ MOV P1.5,C ;輸出 SJMP $第四章

匯編語言程序設(shè)計(jì)舉例五、定時(shí)程序例:長時(shí)間的定時(shí)程序:采用多重循環(huán)的延時(shí) MOV R5,#TIME1 ;1tLOOP1: MOV R4,#TIME2 ;1tLOOP2: NOP ;1t NOP ;1t NOP ;1t DJNZ R4,LOOP2 ;

溫馨提示

  • 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. 人人文庫網(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)論