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

下載本文檔

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

文檔簡(jiǎn)介

1、機(jī)器語言:機(jī)器語言是用二進(jìn)制代碼表示的計(jì)算機(jī)能直接識(shí)別和執(zhí)行(zhxng)的一種機(jī)器指令的集合。 匯編語言:匯編語言(Assembly Language)是面向機(jī)器的程序設(shè) 計(jì)語言。 匯編語言源程序:用匯編語言編寫的程序.編譯程序:編譯程序也叫編譯系統(tǒng),是把用高級(jí)語言編寫的面向過程的源程序翻譯成目標(biāo)程序的語言處理程序。目標(biāo)程序:把可在計(jì)算機(jī)上直接運(yùn)行的機(jī)器語言程序稱為目標(biāo)程序.第4章 80C51單片機(jī)匯編語言(hu bin y yn)程序設(shè)計(jì)1共五十九頁4.1 匯編語言(hu bin y yn)的格式 4.1.1偽指令(PseudoInstruction)在匯編語言源程序中用MCS-51指令(

2、zhlng)助記符編寫的程序,一般都可以一一對(duì)應(yīng)地產(chǎn)生機(jī)器碼,這種指令(zhlng)是真正意義上的指令(zhlng)。 如:MOV A,#68H的機(jī)器碼為74H、68HLJMP 2000H的機(jī)器碼為02H、20H、00H2共五十九頁 但還有一些指令不產(chǎn)生機(jī)器碼,即沒有對(duì)應(yīng)的機(jī)器碼,也就是說它不是CPU能執(zhí)行的指令,只是提供匯編控制信息,以便在匯編時(shí)執(zhí)行一些特殊的操作,這種指令稱為偽指令。 如:L1: DB 20H 沒有對(duì)應(yīng)的機(jī)器碼,但這條偽指令所要完成的功能是將地址(dzh)為L(zhǎng)1的存儲(chǔ)單元的內(nèi)容定義成20H。3共五十九頁偽指令的格式 : 標(biāo)號(hào): 操作碼 項(xiàng)或項(xiàng)表;注釋其中: 方括號(hào)為可選項(xiàng)

3、,標(biāo)號(hào)可要可不要;注釋是編程者附加(fji)的說明,也是可要可不要。 尖括號(hào)為必選項(xiàng),可以是單項(xiàng),也可以是多項(xiàng) 操作碼為必選項(xiàng),該項(xiàng)為ORG、DB、DW、DS、EQU、BIT、END等7項(xiàng)中的任意一項(xiàng)。下面分別介紹這些偽指令的功能:4共五十九頁 1設(shè)置起始地址ORG(Origin)ORG nn其中,ORG是該偽指令的操作碼助記符,操作數(shù)nn是16位二進(jìn)制數(shù),前者表明為后續(xù)源程序經(jīng)匯編后的目標(biāo)程序(m bio chn x)安排存放位置,后者則給出了存放的起始地址值。ORG偽指令總是出現(xiàn)在每段源程序或數(shù)據(jù)塊的開始,它可以使我們把程序、子程序或數(shù)據(jù)塊存放在存儲(chǔ)器的任何位置。若在源程序開始不放ORG指

4、令,則匯編將從0000H單元開始編排目標(biāo)程序(m bio chn x)。常用(chn yn)的偽指令有如下幾種:5共五十九頁【例4-】 ORG 2000H MOV SP, 60H MOV R0, 2FH MOV R2, 0FFH ORG偽指令說明(shumng)其后面程序的目標(biāo)代碼在存儲(chǔ)器中存放的起始地址是2000H, 即 存儲(chǔ)器地址 目標(biāo)程序 2000H 75H 81H 60H SP的地址=81H 2003H 78H 2FH 2005H 7AH FFH 6共五十九頁2匯編終止命令END 標(biāo)號(hào): END 表達(dá)式 END命令通知匯編程序結(jié)束匯編。在END之后,所有的匯編語言指令均不予以處理。 每

5、一個(gè)完整(wnzhng)的匯編語言源程序的后面必須有END,否則,編譯程序在對(duì)匯編語言源程序進(jìn)行編譯時(shí),因找不到尾端而無法進(jìn)行編譯。7共五十九頁 3賦值EQU(Equate) 標(biāo)號(hào) EQU 數(shù)或者匯編符號(hào) 其功能(gngnng)是將操作數(shù)段中的地址或數(shù)據(jù)賦予標(biāo)號(hào)字段的標(biāo)號(hào),故又稱為等值指令。 例4-2】SG EQU R0 ;SG與R0等值 DE EQU 40H ;DE與40H等值 MOV A,SG ;(R0) (A) MOV R7,DE ;(40H) (R7)8共五十九頁4定義字節(jié)DB(Define Byte) 標(biāo)號(hào): DB 其中, 是指一個(gè)字節(jié)的數(shù)、字符(z f)串或以引號(hào)括起來的ASCII

6、碼字符串(一個(gè)字符用ASCII碼表示,就相當(dāng)于一個(gè)字節(jié))。 該指令的功能是把DB后面的內(nèi)容存入從標(biāo)號(hào)開始的連續(xù)單元中。9共五十九頁【例4-4】: ORG 1000H SEGl: DB 53H,78H,2 SEG2: DB DAY END則: (1000H)=53H (1001H)78H (1002H)=32H (1003H)44H (1004H)=41H (1005H)=59H10共五十九頁5.定義數(shù)據(jù)字DW(define word)標(biāo)號(hào): DW DW的基本含義與DB相同,不同的是DW定義16位數(shù)據(jù),常用來建立(jinl)地址表?!纠?-3】 2200:DW l234H,08H則: (2200

7、H)=12H (2201H)=34H (2202H)=00H (2203H)=08H11共五十九頁6定義存儲(chǔ)區(qū)DS(Define Storage)標(biāo)號(hào): DS 該指令的功能是由標(biāo)號(hào)指定單元開始,定義一個(gè)存儲(chǔ)區(qū),以備源程序使用。存儲(chǔ)區(qū)內(nèi)預(yù)留的存儲(chǔ)單元數(shù)由表達(dá)式的值決定。 【例4-5】: ORG 3000H SEG;DS 08H DB 30H,40H 上例表示從3000H單元開始,連續(xù)預(yù)留8個(gè)存儲(chǔ)單元,然后(rnhu)從3008H單元開始按DB命令給內(nèi)存單元賦值,即(3008H)=30H,(3009H)=40H。12共五十九頁7位地址符號(hào)(fho)BIT字符名 BIT 位地址其功能是把位地址賦予字

8、符名稱?!纠?-6】 MN BIT Pl.7 G5 BIT 02H 則匯編后,位地址P1.7、02H分別賦給變量MN和G5。13共五十九頁4.1.2 匯編語言的格式 匯編語言是面向機(jī)器的程序設(shè)計(jì)語言,對(duì)于不同CPU的微型機(jī),其匯編語言一般是不同的,但是,它們之間所采用的語言規(guī)則有很多相似之處。在此,我們以MCS-51的匯編語言為例來說明匯編語言的規(guī)范。 匯編語言源程序是由匯編語句(指令語句)構(gòu)成的。匯編語句由四個(gè)部分(b fen)構(gòu)成,每一部分(b fen)稱為一個(gè)字段,匯編程序能夠識(shí)別它們。14共五十九頁 MCS-51匯編語言的語句格式: 標(biāo)號(hào):操作碼 操作數(shù);注釋 每個(gè)字段之間要用分隔符分

9、開,而每個(gè)字段內(nèi)部不能使用分隔符??梢宰鳛榉指舴姆?hào)(fho)有空格、冒號(hào)、逗號(hào)、分號(hào)等。15共五十九頁【例4-8】 LOOP:MOV A, R0 ;(R0)A 標(biāo)號(hào) 操作碼 目的操作數(shù) 源操作數(shù) 注釋下面分別解釋這四個(gè)字段的含義:)標(biāo)號(hào):標(biāo)號(hào)是用戶設(shè)定的一個(gè)符號(hào),表示存放指令的存儲(chǔ)單元(dnyun)的地址。標(biāo)號(hào)由以字母開始的18個(gè)字母或數(shù)字串組成,以冒號(hào)結(jié)尾。不能用指令助記符、偽指令或寄存器名來作標(biāo)號(hào)。 標(biāo)號(hào)是任選的,并不是每條指令或數(shù)據(jù)存儲(chǔ)單元都要標(biāo)號(hào),只在需要時(shí)才設(shè)標(biāo)號(hào),例如轉(zhuǎn)移指令所要訪問的存儲(chǔ)單元前面一般要設(shè)置標(biāo)號(hào)。 一旦使用了某標(biāo)號(hào)定義一地址單元,在程序的其它地方就不能隨意修改這

10、個(gè)定義,也不能重復(fù)定義。 16共五十九頁)操作碼:是指令助記符,用來表示指令的性質(zhì)。對(duì)于一 條匯編語言指令,這個(gè)字段是必不可少的。)操作數(shù):給出的是參加運(yùn)算(或其它操作)的數(shù)據(jù)或數(shù)據(jù) 的地址。 操作數(shù)可以表示為工作寄存器名、特殊功能寄存器名、標(biāo)號(hào)名、常數(shù)(chngsh)、表達(dá)式等。這一字段為可選項(xiàng)(可有或可沒有)。 若有兩個(gè)操作數(shù)(目的操作數(shù)和源操作數(shù)),兩個(gè)操作數(shù)之間應(yīng)以逗號(hào)分開。 目的操作數(shù)指數(shù)據(jù)要到達(dá)的目的地,如A。 源操作數(shù)指數(shù)據(jù)的來源,如R0。)注釋:注釋字段不是匯編語言的功能部分,只是增加程 序的可讀性,良好的注釋是匯編語言程序編寫中 的重要組成部分。17共五十九頁計(jì)算機(jī)完成某一具

11、體的工作任務(wù),必須按序執(zhí)行一條條指令。這種按工作要求編排指令序列的過程稱為程序設(shè)計(jì)(或編程)。 用匯編語言編寫一個(gè)程序的過程大致可分為: 確定(qudng)計(jì)算方法,定出運(yùn)算步驟和順序,把運(yùn)算過程畫成框圖。 確定數(shù)據(jù),包括工作單元的數(shù)量,分配存放單元。 按所使用計(jì)算機(jī)的指令系統(tǒng),把確定的運(yùn)算順序(框圖)寫成匯編語言程序。18共五十九頁421 順序結(jié)構(gòu)程序 順序結(jié)構(gòu)程序是一種最簡(jiǎn)單、最基本(jbn)的程序,按照程序編寫的順序依次執(zhí)行,編寫這類程序主要應(yīng)注意正確地選擇指令,提高程序的執(zhí)行效率和盡可能節(jié)省存儲(chǔ)空間。4.2 匯編語言(hu bin y yn)程序的基本結(jié)構(gòu)形式19共五十九頁【例4-9】

12、:雙字節(jié)(z ji)二進(jìn)制數(shù)求補(bǔ)。 BINPL: MOV A,R3 JNZ ACC.7, RETURN MOV A, R2 ;低位字節(jié)補(bǔ)碼送R2 CPL A ADD A,#01H MOV R2,A MOV A,R3 MOV F0,ACC.7 CPL A ADDC A,#00H ; 高位加進(jìn)位 MOV ACC.7,F(xiàn)0 MOV R3,A ; 高位字節(jié)補(bǔ)碼送R3 RETURN: RET END20共五十九頁4.2.2 分支程序 分支結(jié)構(gòu)程序可根據(jù)程序要求無條件或有條件地改變程序執(zhí)行的順序,選擇程序流向。 編寫這類結(jié)構(gòu)的程序關(guān)鍵是要正確(zhngqu)選擇和使用轉(zhuǎn)移指令,即無條件轉(zhuǎn)移、條件轉(zhuǎn)移和跳轉(zhuǎn)

13、。21共五十九頁【例4-10】:設(shè)變量(binling)x存放在VAR單元之中,函數(shù)值y存放在FUNC中,按下式給y賦值: 1 X0 Y= 0 X=0 -1 X0轉(zhuǎn)POSI MOV A,#0FFH ;0,1A SJMP COMPPOSI: MOV A,#01HCOMP:MOV FUNC,A END24共五十九頁【例4-11】:128種分支轉(zhuǎn)移程序。根據(jù)(gnj)入口條 件轉(zhuǎn)移到128個(gè)目的地址。 程序框圖如下(rxi):25共五十九頁入口:(R3)轉(zhuǎn)移(zhuny)目的地址的序號(hào)00H7FH。出口:轉(zhuǎn)移到相應(yīng)子程序人口。程序清單: MOV A,R3 RL A MOV DPTR,#JMPTAB

14、JMP A+DPTR JMPTAB: AJMP ROUT00 AJMP ROUNT7F26共五十九頁此程序要求128個(gè)轉(zhuǎn)移目的地址 (ROUT00ROUT7F)必須駐留在與絕對(duì)轉(zhuǎn)移指令(zhlng)AJMP同一個(gè)2KB存儲(chǔ)區(qū)內(nèi)。RL指令(zhlng)對(duì)變址部分乘以2,是由于每AJMP指令(zhlng)占2個(gè)字節(jié)。 如改用LJMP指令,目的地址可以任意安排在64KB的程序存儲(chǔ)器空間內(nèi),但該指令為3字節(jié),所以程序應(yīng)對(duì)變址部分乘以3。27共五十九頁4.2.3 循環(huán)結(jié)構(gòu)程序 在程序設(shè)計(jì)中,常遇到反復(fù)執(zhí)行某一段程序,此時(shí)可用循環(huán)程序結(jié)構(gòu),這有助于縮短程序,提高程序的質(zhì)量。 循環(huán)結(jié)構(gòu)的程序一般包括下面(x

15、i mian)幾個(gè)部分: 1置循環(huán)初值 置循環(huán)初值是設(shè)置用于循環(huán)過程工作單元的初始值。例如,設(shè)置循環(huán)次數(shù)計(jì)數(shù)器、地址指針初值、存放和數(shù)的單元初值等。 2循環(huán)體 重復(fù)執(zhí)行的程序段部分。3循環(huán)修改 在單片機(jī)中,一般用一個(gè)工作寄存器Rn作為計(jì)數(shù)器,給這 個(gè)計(jì)數(shù)器賦初值作循環(huán)次數(shù),每循環(huán)一次,對(duì)其進(jìn)行修改。 4循環(huán)控制 判斷控制變量是否滿足終值條件,不滿足則轉(zhuǎn)去重復(fù)執(zhí)行 循環(huán)工作部分,滿足則順序執(zhí)行,退出循環(huán)。28共五十九頁這四個(gè)部分有兩種組織(zzh)方式,如下圖所示:循環(huán)(xnhun)程序流程圖29共五十九頁 若循環(huán)程序的循環(huán)體中不再包括循環(huán)程序,即為單重循環(huán)程序。 如果在循環(huán)體中還包含有循環(huán)程序

16、,那么,這種現(xiàn)象就稱為循環(huán)嵌套,這樣的程序就稱為多重循環(huán)程序。 在多重循環(huán)程序中,只允許外循環(huán)嵌套內(nèi)循環(huán)程序,而不允許循環(huán)體互相交叉。另外(ln wi),也不允許從循環(huán)程序的外部跳人循環(huán)程序的內(nèi)部?!纠?-12】:若Xi均為單字節(jié)數(shù)據(jù),并按i(i=1n)順序存放在80C51的內(nèi)部RAM從50H開始的單元中,n放在R2中,現(xiàn)在要求它們的和(雙字節(jié))放在R3R4中。30共五十九頁 入口(r ku):Xi存放在從50H開始的單元; n放在R2中。 出口:和存放于R3R4中。 程序框圖如右圖所示。程序清單如下:ADDl: MOV R3,#00H MOV R4,#00H MOV R2,#n MOV R0

17、,#50H LOOP:MOV A,R4 ;取部分和低位 ADD A,R0 ;與Xi相加 MOV R4,A INC R0 ;地址加1 CLR A ADDC A,R3 ;低位字節(jié)向高位進(jìn)位 MOV R3,A DJNZ R2,LOOP;未加完繼續(xù)重復(fù) END31共五十九頁 其中:第條為置初值。第11條為循環(huán)體。R2作為控制變量。第12條為循環(huán)控制。 注意:R0作為變址單元,用它來尋址Xi。一般來說,循環(huán)工作部分中的數(shù)據(jù)應(yīng)該(ynggi)用間接方式來尋址。32共五十九頁運(yùn)算類程序 MCS-51系列機(jī)中,已設(shè)計(jì)了單字節(jié)的加、減、乘、除指令,而在實(shí)際應(yīng)用程序設(shè)計(jì)中經(jīng)常要用到多字節(jié)的各種運(yùn)算,在此舉例說明這

18、類程序設(shè)計(jì)的方法(fngf)。4.3.1 算術(shù)運(yùn)算程序 1. 加減法運(yùn)算 2. 乘法運(yùn)算 3. 除法運(yùn)算4.3 實(shí)用程序舉例(j l)33共五十九頁(1)多個(gè)(du )不帶符號(hào)的單字節(jié)數(shù)相加 假設(shè)有多個(gè)單字節(jié)數(shù),依次存放在外部RAM 21H開始的連續(xù)單元中,要求把計(jì)算結(jié)果存放在R1和R2中(假定相加的和為2字節(jié)數(shù))。其中R1為高位字節(jié),則程序如下: MOV R0,21H ;設(shè)置數(shù)據(jù)指針 MOV R3,#N ;字?jǐn)?shù)(z sh) MOV R1,#00H ;和的高位字節(jié)清零 MOV R2,#00H ;和的低位字節(jié)清零 LOOP: MOVX A,R0 ;取一個(gè)加數(shù) ADD A,R2 ;單字節(jié)數(shù)相加 M

19、OV R2,A ;和的低8位送R2 JNC LOOP1 INC R1 ;有進(jìn)位,則和的高8位加1LOOP1: INC R0 ;指向下一個(gè)單元 DJNZ R3,LOOP34共五十九頁(2)兩個(gè)(lin )不帶符號(hào)的多字節(jié)數(shù)相減兩個(gè)N字節(jié)數(shù)分別存放在內(nèi)部RAM單元中,低字節(jié)在前,高字節(jié)在后,分別由R0指定被減數(shù)單元地址,由R1指定減數(shù)單元地址,其差存放在原被減數(shù)單元中。 CLR C ;清進(jìn)位位 MOV R2,#N ;設(shè)定字節(jié)數(shù)LOOP: MOV A,R0 ;從低字節(jié)開始逐個(gè)(zhg)取被減數(shù)字節(jié) SUBB A,R1 ;兩數(shù)相減 MOV R0,A ;存字節(jié)相減的差 INC R0 INC R1 DJN

20、Z R2,LOOP ;減法是否完成 JC QAZ ;若最高字節(jié)有借位,則轉(zhuǎn)溢出處理 RET35共五十九頁【例4-14】:雙字節(jié)無符號(hào)數(shù)乘法。 編程說明:MCS-51指令系統(tǒng)中只有單字節(jié)乘法指令,因此,雙字節(jié)相乘需分解為4次單字節(jié)相乘。若被乘數(shù)(ab)和乘數(shù)(cd)分別(fnbi)表示為(az+zb)(cz+zd),其中a、b、c、d都是8位數(shù),z表示8位0,其乘積表示為:(az+zb) (cz+zd)=aczz+zadz +zbcz+zzbd式中,ac、ad、bc、bd為相應(yīng)的兩個(gè)8位數(shù)的乘積,占16位,可用4次乘法指令求出,這16位的積分別表示為acH、acL、adH、adL、bcH、bcL

21、和bdH、bdL ,其中,以H為后綴的為積的高8位,以L為后綴的為積的低8位,則接下列排序并按列求和,以便得到4字節(jié)乘積。2. 乘法(chngf)運(yùn)算36共五十九頁 acH acL z z z adH adL z z bcH bcL z z z bdH bdL入口(r ku):R2(高)、R3(低),被乘數(shù); R6(高)、R7(低),乘數(shù)。出口:R4、R5、R6、R7 存放乘 積。37共五十九頁R2R6第4次部分(b fen)積低位R2R3R6R7()R3R7HR3R7LR5R7R2R7HR2R7L(+)R5R4R7R3R6HR3R6L(+)R5R6R7R5R6R7F0R2R6L(+) ACC

22、.0R2R6H(+)R5R6R7R4R3R7第1次部分積R2R7第2次部分積R2R6第4次部分積低位R3R6第3次部分積38共五十九頁4.3.2 定時(shí)(dn sh)程序 1. 單循環(huán)定時(shí)程序 MOV R5,#0FH ; t1LOOP: NOP ; t2 NOP ; t2 DJNZ R5,LOOP ; t3 程序執(zhí)行時(shí)間: T=t1+(2t2+t3)0FH39共五十九頁2. 較長(zhǎng)時(shí)間的定時(shí)程序(chngx) MOV R5,#37H ; t1LOOP2: MOV R4,#69H ; t2LOOP1: NOP ; t3 NOP ; t3 DJNZ R4,LOOP1 ; t4 DJNZ R5,LOOP

23、2 ; t5 程序執(zhí)行時(shí)間: T=t1+( 2 t3+t4) 69H+t5+t2 37H40共五十九頁【例 4-14】 已知 80C51單片機(jī)使用的晶振頻率6MHz 要求設(shè)計(jì)一個(gè)軟件延時(shí)程序,延時(shí)時(shí)間為10ms. 入口:( R0)= 毫秒數(shù); (R1)=1ms延時(shí)予定值. 出口:定時(shí)到,退出(tuch)程序.程序流程圖如圖示出。 程序清單如下: ORG 2000H 周期數(shù) MOV R0,#0AH;毫秒數(shù)R0 1 DL2: MOV R1,#MT;延時(shí)值R1 1 DL1: NOP 1 NOP 1 DJNZ Rl DLl ;lms延時(shí)循環(huán) 2 DJNZ R0 DL2 ;10ms延時(shí)循環(huán) 2 延 時(shí)毫

24、秒數(shù) R0 R1 1=0? R0 1=0?MT R1 結(jié)束41共五十九頁4.3.3 查表程序 1. 查表指令(zhlng) MOVC A,A+DPTR MOVC A,A+PC2. 查表程序舉例42共五十九頁 MOV DPTR,#BS;子程序入口地址(dzh) RL A;鍵碼值乘以2 MOV R2,A;暫存A MOVC A,A+DPTR; 取得入口地址低位 PUSH ACC MOV A,R2 INC A MOVC A,A+DPTR MOV DPH,ACC POP DPL CLR A JMP A+DPTRBS: DB RK0L DB RK0H DB RK1L DB RK1H DB RK2L DB

25、RK2H43共五十九頁練習(xí) 例1:兩個(gè)無符號(hào)雙字節(jié)數(shù)相加。設(shè)被加數(shù)存放于內(nèi) 部RAM的40H(高位字節(jié)), 41H(低位字節(jié)), 加數(shù)(ji sh)存放于50H(高位字節(jié)), 51H(低位字 節(jié)), 和數(shù)存入40H和41H單元中。 44共五十九頁程序如下: START: CLR C ; 將Cy清零 MOV R0, 41H ; 將被加數(shù)地址送數(shù)據(jù)指針R0 MOV R1, 51H ; 將加數(shù)地址送數(shù)據(jù)指針R1 AD1: MOV A, R0 ; 被加數(shù)低字節(jié)的內(nèi)容送入A ADD A,R1 ; 兩個(gè)(lin )低字節(jié)相加 MOV R0, A ; 低字節(jié)的和存入被加數(shù)低字節(jié)中 DEC R0 ; 指向被加

26、數(shù)高位字節(jié) DEC R1 ; 指向加數(shù)高位字節(jié) MOV A, R0 ; 被加數(shù)高位字節(jié)送入A ADDC A, R1 ; 兩個(gè)高位字節(jié)帶Cy相加 MOV R0, A ; 高位字節(jié)的和送被加數(shù)高位字節(jié) RET 45共五十九頁 例2:將兩個(gè)半字節(jié)數(shù)合并成一個(gè)一字節(jié)數(shù)。設(shè)內(nèi)部RAM 40H、41H單元中分別存放著8位二進(jìn)制數(shù),要求(yoqi)取出兩個(gè)單元中的低半字節(jié),并成一個(gè)字節(jié)后,存入50H單元中。 46共五十九頁 程序如下: START: MOV R1, 40H ; 設(shè)置R1為數(shù)據(jù)指針 MOV A, R1 ; 取出第一個(gè)單元中的內(nèi)容 ANL A, 0FH ; 取第一個(gè)數(shù)的低半字節(jié) SWAP A ;

27、 移至高半字節(jié) INC R1 ; 修改數(shù)據(jù)指針 XCH A, R1 ; 取第二個(gè)單元中的內(nèi)容 ANL A, 0FH ; 取第二個(gè)數(shù)的低半字節(jié) ORL A, R1 ; 拼字 MOV 50H, A ; 存放(cnfng)結(jié)果 RET 47共五十九頁 例3:比較(bjio)兩個(gè)無符號(hào)數(shù)的大小。設(shè)外部RAM的存儲(chǔ)單元 ST1和 ST2中存放兩個(gè)不帶符號(hào)的二進(jìn)制數(shù),找出其中的大數(shù)存入外部RAM中的ST3單元中。 48共五十九頁 ORG 1000H ST1 EQU 2000H ST2 EQU 2100H ST3 EQU 2200H START: CLR C ; 清零Cy MOV DPTR, ST1 ; 第

28、一個(gè)數(shù)的指針 MOVX A, DPTR ; 取第一個(gè)數(shù) MOV R2, A ; 保存(bocn) MOV DPTR, ST2 ; 第二個(gè)數(shù)的指針 MOVX A, DPTR ; 取第二個(gè)數(shù) CLR C SUBB A, R2 ; 兩數(shù)比較 JNC BIG1 ; 若第二個(gè)數(shù)大, 則轉(zhuǎn) XCH A, R2 ; 第一個(gè)數(shù)大BIG0: MOV DPTR, ST3 MOVX DPTR, A ; 存大數(shù) RETBIG1: MOVX A, DPTR ; 第二個(gè)數(shù)大 SJMP BIG0 RET 49共五十九頁 例4:工作單元清零。設(shè)有50個(gè)工作單元,其首址為外部存儲(chǔ)器8000H單元,編制(binzh)單元清零程序

29、。50共五十九頁CLEAR: CLR A MOV DPTR, 8000H ; 工作(gngzu)單元首址送指 針 MOV R2, 50 ; 置循環(huán)次數(shù)CLEAR1: MOVX DPTR, A INC DPTR ; 修改指針 DJNZ R2, CLEAR1 ; 控制循環(huán) RET 51共五十九頁 例5:一個(gè)十六進(jìn)制數(shù)存放在內(nèi)部RAM的HEX單元的低 4 位中,將其轉(zhuǎn)換成ASCII碼并送回 HEX單元。 十六進(jìn)制:09的ASCII碼為30H39H、AF的ASCII碼為41H46H,ASCII碼表格(biog)的首地址為ASCTAB。52共五十九頁 ORG 1000H HEXASC: MOV A, H

30、EX ANL A, 0FH ADD A, 3 ; 修改(xigi)指針 MOVC A, A+PC MOV HEX, A RET ASCTAB: DB 30H, 31H, 32H, 33H, 34H DB 35H, 36H, 37H, 38H, 39H DB 41H, 42H, 43H, 44H, 45H DB 46H53共五十九頁 習(xí)題(二)第2題:;數(shù)據(jù)(shj)保存R0首地址,A保存最小的數(shù)據(jù)(shj)。 MOV R0,#LIST CJNE R0,#81H,SA_1 MOV A,R0 ;第一個(gè)數(shù)據(jù)為1,取第一個(gè)數(shù)據(jù)SA_0: MOV R1,A INC R0 CJNE R0,#81H,SA_1 SJMP SA_3SA_1: CLR C SUBB A,R0 JC SA_2 MOV A,R0 SJMP SA_0SA_2: MOV A,R1 SJMP SA_0SA_3: RET54共五十九頁第4題:;A保存(bocn)數(shù)據(jù)。 MOV R0,byte MOV R1,#08HSA_0: RRC A JC SA_1 MOV A,#30H MOV R

溫馨提示

  • 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)論