版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第四章匯編語言程序設(shè)計(jì)§4.0緒§4.1匯編語言源程序格式§4.2匯編語言源程序的編輯和匯編精選課件§4.0緒評(píng)價(jià)程序質(zhì)量的標(biāo)準(zhǔn)程序的執(zhí)行時(shí)間;程序所占用的內(nèi)存字節(jié)數(shù)目;程序的邏輯性、可讀性;程序的兼容性、可擴(kuò)展性;程序的可靠性精選課件§4.0緒采用匯編語言的優(yōu)點(diǎn)占用內(nèi)存單元和CPU資源少;程序簡(jiǎn)短、執(zhí)行速度快;可直接調(diào)動(dòng)計(jì)算機(jī)的全部資源,并可以有效利用計(jì)算機(jī)的專有特性;能準(zhǔn)確地掌握指令的執(zhí)行時(shí)間,適用于實(shí)時(shí)控制精選課件§4.1匯編語言源程序格式
§4.1.1編程的步驟§4.1.2匯編語言源程序格式
§4.1.3偽指令
§4.1.4編程的方法和技巧§4.1.5匯編語言程序的基本結(jié)構(gòu)精選課件§4.1.1編程的步驟一、分析問題二、確定算法三、畫程序流程圖四、編寫程序精選課件根據(jù)問題要實(shí)現(xiàn)的目標(biāo):
首先設(shè)計(jì)硬件電路。然后再根據(jù)具體的硬件環(huán)境進(jìn)行程序設(shè)計(jì)。精選課件一、分析問題對(duì)需要解決的問題進(jìn)行分析,以求對(duì)問題正確的理解。如:解決問題的任務(wù)是什么?工作過程是什么?現(xiàn)有的條件,已知數(shù)據(jù),對(duì)運(yùn)算的精度
和速度方面的要求?設(shè)計(jì)的硬件結(jié)構(gòu)是否方便編程?精選課件在編程以前,先要對(duì)幾種不同的算法進(jìn)行分析、比較,找出最適宜的算法二、確定算法精選課件三、畫程序流程圖程序流程圖是使用各種圖形、符號(hào)、有向線段等來說明程序設(shè)計(jì)過程的一種直觀的表示。流程圖步驟分得越細(xì)致,編寫程序是也越方便。畫流程圖是程序結(jié)構(gòu)設(shè)計(jì)是采用的一種重要手段。一個(gè)系統(tǒng)軟件有總的流程圖(主程序框圖)和局部的流程圖。精選課件橢圓框或桶形框:表示程序的開始或結(jié)束。矩形框:表示要進(jìn)行的工作。菱形框:表示要判斷的事情,菱形框內(nèi)的表達(dá)式表示要判斷的內(nèi)容。流程圖常采用的圖形和符號(hào)。精選課件圓圈:表示連接點(diǎn)指向線:表示程序的流向流程圖常采用的圖形和符號(hào)。精選課件四、編寫程序精選課件匯編語言編寫的源程序行(一條語句)包括四
個(gè)部分,也叫4個(gè)字段。這四個(gè)字段是:
[標(biāo)號(hào):]<操作碼>[操作數(shù)][;注釋]
每個(gè)字段之間要用分隔符分隔,而每個(gè)字段
內(nèi)部不能使用分隔符?!?.1.2匯編語言源程序格式
精選課件可以用作分隔符的符號(hào)有:
空格“”
冒號(hào)“:”
逗號(hào)“,”
分號(hào)“;”
例如,
LOOPl:MOVA,#00H
;立即數(shù)00H送A§4.1.2匯編語言源程序格式
精選課件標(biāo)號(hào)是用戶定義的符號(hào)地址。一條指令的標(biāo)號(hào)是該條指令的符號(hào)名字,標(biāo)號(hào)的值是匯編這條指令時(shí)指令的地址。標(biāo)號(hào)由以英文字母開始的1~8個(gè)字母或數(shù)
字串組成,以冒號(hào)":"結(jié)尾。標(biāo)號(hào)可以由賦值偽指令賦值?!?.1.2匯編語言源程序格式
⑴標(biāo)號(hào)精選課件如果標(biāo)號(hào)沒有賦值,匯編程序就把存放該指令目標(biāo)碼第一字節(jié)的存儲(chǔ)單元的地址賦給該標(biāo)號(hào),所以,標(biāo)號(hào)又叫指令標(biāo)號(hào)。注意:系統(tǒng)中保留使用的關(guān)鍵字不能用
作標(biāo)號(hào)。§4.1.2匯編語言源程序格式
⑴標(biāo)號(hào)精選課件對(duì)于一條匯編語言指令,這個(gè)字段是必不
可少的,它用一組字母符號(hào)表示指令的操作碼。89C51中,它由指令系統(tǒng)助記符組成。
§4.1.2匯編語言源程序格式
⑵操作碼精選課件匯編語言指令可能要求或不要求操作數(shù)。
若有兩個(gè)操作數(shù),操作數(shù)之間應(yīng)用逗號(hào)分開操作數(shù)字段的內(nèi)容是復(fù)雜多樣的,
它可能包括下列諸項(xiàng):①工作寄存器名②特殊功能寄存器名③標(biāo)號(hào)④常數(shù)⑤$⑥表達(dá)式§4.1.2匯編語言源程序格式
⑶操作數(shù)精選課件⑶操作數(shù):①工作寄存器名由PSW.3和PSW.4規(guī)定的當(dāng)前工作寄存器區(qū)中的R0~R7都可以出現(xiàn)在操作數(shù)字段中。MOVA,R4MOVA,@R0精選課件⑶操作數(shù):②特殊功能寄存器名89C51中的21個(gè)特殊功能寄存器的名字都可以作為操作數(shù)使用。MOVA,P1MOVTMOD,#01HSETBET0精選課件可以在操作數(shù)字段中引用的標(biāo)號(hào)名包括:賦值標(biāo)號(hào)由匯編命令EQU等賦值的標(biāo)號(hào)可以作為
操作數(shù)。指令標(biāo)號(hào)指令標(biāo)號(hào)雖未給賦值,但這條指令的第一
字節(jié)地址就是這個(gè)標(biāo)號(hào)的值,在以后指令操作數(shù)字段中可以引用。
⑶操作數(shù):③標(biāo)號(hào)名精選課件LOOP:MOVA,R2……LJMPLOOP
⑶操作數(shù):③標(biāo)號(hào)名精選課件匯編語言指令允許以各種數(shù)制表示常數(shù),常數(shù)可以寫成二進(jìn)制、十進(jìn)制或十六進(jìn)制。常數(shù)總是要以一個(gè)數(shù)字開頭若十六進(jìn)制的
第一個(gè)數(shù)為A~F字符,前面要加零,數(shù)字后要直接跟一個(gè)表明數(shù)制的字母,B二
進(jìn)制,H十六進(jìn)制。
⑶操作數(shù):④常數(shù)精選課件MOVA,#00000111BMOVA,#07HMOVA,#07MOVA,#0FDH⑶操作數(shù):④常數(shù)精選課件“$”,用來表示程序計(jì)數(shù)器的當(dāng)前值。這個(gè)符號(hào)最常出現(xiàn)在轉(zhuǎn)移指令中,
JNBTF0,$
表示若TF0為零仍執(zhí)行該指令,否則往下執(zhí)行,它等效于
$:JNBTF0,$⑶操作數(shù):⑤$精選課件匯編程序允許把表達(dá)式作為操作數(shù)使用。在匯編時(shí),計(jì)算出表達(dá)式的值;
并把該值填入目標(biāo)碼中。例如,
MOVA,SUM+l⑶操作數(shù):⑥表達(dá)式精選課件⑷注釋注釋字段不是匯編語言的功能部分,只是用
于增加程序的可讀性。注釋是匯編語言程序編寫中的重要組成部分以“;”隔開?!?.1.2匯編語言源程序格式
精選課件例:LOOP:MOVA,#00H;立即數(shù)00H→A精選課件偽指令不是真正的指令,無對(duì)應(yīng)的機(jī)器碼,在匯編時(shí)不產(chǎn)生目標(biāo)程序,只是用來對(duì)匯編過程進(jìn)行某種控制?!?.1.3偽指令
精選課件§4.1.3偽指令
ORGENDEQUDATADBDWDSBIT精選課件ORG匯編起始命令格式:ORG16位地址功能:規(guī)定該偽指令后面程序的匯編地址,
即匯編后生成目標(biāo)程序存放的起始地址。
例如:
精選課件ORG匯編起始命令例如:ORG2000HSTART:MOVA,#64H┇規(guī)定了START的地址是2000H,
又規(guī)定了匯編后的第一條指令碼從2000H開始存放。精選課件END匯編結(jié)束指令格式:END功能:通知匯編程序結(jié)束匯編。
在END之后所有的匯編指令均不予以處理。精選課件EQU賦值命令格式:
字符名稱EQU項(xiàng)(數(shù)或匯編符號(hào))功能:把“項(xiàng)”賦給“字符名稱”。注意:字符名稱不等于標(biāo)號(hào)(其后沒有冒號(hào));其中的項(xiàng),可以是數(shù),也可以是匯編符號(hào)。EQU賦值過的符號(hào)名可以用作數(shù)據(jù)、代碼地址、位地址或一個(gè)立即數(shù)??梢允?位的,也可以是16位的。例如:精選課件EQU賦值命令例1:AAEQUR1MOVA,AA;AA代表工作寄存器R1精選課件EQU賦值命令例2:A10EQU10DELYEQU07EBHMOVA,A10;
A10作為片內(nèi)的一個(gè)直接地址LCALLDELY;DELY作為一個(gè)16位子程序的入口地址精選課件DATA數(shù)據(jù)地址賦值命令格式:字符名稱DATA表達(dá)式功能:與EQU類似,但有以下差別:EQU定義的字符名必須先定義后使用,而DATA定義的字符名可以后定義先使用。用EQU偽指令可以把一個(gè)匯編符號(hào)賦給一個(gè)名字,而DATA只能把數(shù)據(jù)賦給字符名。精選課件DATA數(shù)據(jù)地址賦值命令3、DATA語句可以把一個(gè)表達(dá)式的值賦給字符名稱,其中的表達(dá)式應(yīng)是可求值的。DATA偽指令在程序中用來定義數(shù)據(jù)地址精選課件DB定義字節(jié)命令格式:DB(項(xiàng)或項(xiàng)表)功能:通知匯編程序從當(dāng)前ROM地址開始,保留一個(gè)字節(jié)或字節(jié)串的存儲(chǔ)單元,并存入DB后的數(shù)據(jù)。注意:項(xiàng)或項(xiàng)表可以是一個(gè)字節(jié),用逗號(hào)隔開的字節(jié)串或括在單引號(hào)中的ASCII字符串。例如:精選課件DB定義字節(jié)命令
ORG2000HDB0A3HLIST:DB26H,03HSTR:DB‘ABC’┇經(jīng)匯編后(2000H)=A3H,(2001H)=26H,(2002H)=03H,(2003H)=41H,(2004H)=42H,(2005H)=43H,
(41H,42H,
43H分別為A,B,
C的ASCII碼)精選課件DW定義字命令格式:DW16位數(shù)據(jù)項(xiàng)或項(xiàng)表功能:把DW后的16位數(shù)據(jù)項(xiàng)或項(xiàng)表從當(dāng)前地址連續(xù)存放。每項(xiàng)數(shù)值為16位二進(jìn)制數(shù),高8位先放,低8位后存放。DW用于定義一個(gè)地址表。例如:精選課件DW定義字命令
ORG1500HTABLE:DW7234H,8AH,10H┇經(jīng)匯編后(1500H)=72H,(1501H)=34H,(1502H)=00H,(1503H)=8AH,(1504H)=00H,(1505H)=10H,精選課件DS定義存儲(chǔ)空間命令格式:DS表達(dá)式功能:在匯編時(shí),從指定地址開始保留DS之后表達(dá)式的值所規(guī)定的存儲(chǔ)單元以備后用。例如:精選課件DS定義存儲(chǔ)空間命令ORG1000HDS08HDB30H,8AH
匯編后,
從1000H保留8個(gè)單元,
從1008H按DB命令給內(nèi)存賦值,
即(1008H)=30H(1009H)=8AH精選課件BIT位地址符號(hào)命令格式:字符名BIT位地址功能:把BIT后的位地址值賦給字符名。其中字符名不是標(biāo)號(hào),其后沒有冒號(hào),但字符名是必須的。精選課件BIT位地址符號(hào)命令例如:A1BITP1.0A2BIT02H匯編后,P1口第0位的位地址90H就賦給了A1,而A2的值則為02H。精選課件§4.1.4編程的方法和技巧一、模塊化的程序設(shè)計(jì)方法二、編程技巧精選課件一、模塊化的程序設(shè)計(jì)方法1、程序功能模塊化的優(yōu)點(diǎn)2、劃分模塊的原則精選課件1、程序功能模塊化的優(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é)果,即單模塊的功能高內(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、盡量少用無條件轉(zhuǎn)移指令。3、對(duì)于通用的子程序,考慮到其通用性,除了用于存放子程序入口參數(shù)的寄存器外,子程序中用到的其他寄存器的內(nèi)容應(yīng)壓入堆棧(返回前再?gòu)棾觯?,即保護(hù)現(xiàn)場(chǎng)。精選課件二、編程技巧4、在中斷處理程序中,除了要保護(hù)處理程序中用到的寄存器外,還要保護(hù)標(biāo)志寄存器。5、用累加器傳遞入口參數(shù)或返回參數(shù)比較方便,在子程序中,一般不必把累加器內(nèi)容壓入堆棧。精選課件§4.1.5匯編語言程序的基本結(jié)構(gòu)一、順序程序二、分支程序三、循環(huán)程序精選課件語句3語句2順序結(jié)構(gòu)
入口語句1出口分支結(jié)構(gòu)入口條件滿足否?
分支1出口YN
分支2循環(huán)結(jié)構(gòu)入口
處理
修改條件條件滿足否?Y出口N精選課件一、順序程序順序程序是最簡(jiǎn)單的程序結(jié)構(gòu),即順序結(jié)構(gòu)。程序按順序一條一條地執(zhí)行指令。精選課件例1
雙字節(jié)加法。被加數(shù)地址:addr2,addr1.
加數(shù)地址:addr4,addr3.和在:addr2,addr1中.MOVR0,#addr1MOVR1,#addr3MOVA,@R0ADDA,@R1MOV@R0,A;和的低字節(jié)INCR0INCR1MOVA,@R0ADDCA,@R1MOV@R0,A;和的高字節(jié)精選課件例2、雙字節(jié)求補(bǔ)子程序CPLD
算法:正數(shù)不變,負(fù)數(shù)取反+1
解:
入口參數(shù):(R7R6)=待求補(bǔ)碼的16位負(fù)數(shù)
出口參數(shù):(R7R6)=求補(bǔ)后的16位數(shù)CPLD: MOV A,R6
CPL A ;取反
ADD A,#1
MOV R6,A
MOV A,R7
CPL A
ADDC A,#0
MOV R7,A
RET精選課件例3
拆字。將片內(nèi)RAM20H單元的內(nèi)容拆成兩段,每段四位。并將它們分別存入21H與22H單元中。程序如下:ORG2000HSTART:MOVR0,#21HMOVA,20HANLA,#0FHMOV@R0,AINCR0MOVA,20HSWAPAANLA,0FHMOV@R0,A精選課件二、分支程序程序分支是通過條件轉(zhuǎn)移指令實(shí)現(xiàn)的,即根據(jù)條件對(duì)程序的執(zhí)行進(jìn)行判斷、滿足條件則進(jìn)行程序轉(zhuǎn)移,不滿足條件就順序執(zhí)行程序。分支程序又分為單分支和多分支結(jié)構(gòu)。多分支程序是首先把分支程序按序號(hào)排列,然后按序號(hào)值進(jìn)行轉(zhuǎn)移。精選課件程序分支判斷條件在MCS-51指令系統(tǒng)中,通過條件判斷實(shí)現(xiàn)單分支程序轉(zhuǎn)移的指令有:JZ、JNZ、CJNE、DJNZ等此外還有以位狀態(tài)作為條件進(jìn)行程序分支的指令如:JC、JNC、JB、JNB、JBC等使用這些指令可以完成0、1、正、負(fù),以及相等、不相等作為各種條件判斷依據(jù)的程序轉(zhuǎn)移精選課件簡(jiǎn)單分支程序例1(2Path.asm)設(shè)內(nèi)部RAM30H,31H單元中存放兩個(gè)無符號(hào)數(shù),試比較它們的大小,將較小的數(shù)存放在30H單元,較大的數(shù)存放在31H單元解這是個(gè)簡(jiǎn)單分支程序,可以使用兩數(shù)相減,若CY=1,則被減數(shù)小于減數(shù),采用JC指令進(jìn)行判斷,程序流程圖和程序如下:精選課件簡(jiǎn)單分支程序例1精選課件例2(3Path.asm)設(shè)變量X存入30H單元,求得函數(shù)Y存入31H單元。按下式計(jì)算Y的值
X+1 (X>10)Y=0 (10>=X>=5)X-1 (X<5)解
要根據(jù)X的大小來決定Y值,在判斷X<5和X>10時(shí),采用CJNE和JC以及CJNE和JNC指令進(jìn)行判斷。程序流程圖和代碼多重分支程序精選課件多重分支程序精選課件
ORG100HSTART:MOV A,30H ;取X CJNEA,#5,NEXT1 ;與5比較NEXT1:JC NEXT2 ;X<5,則轉(zhuǎn)next2 MOV R0,A ;X>=5 INC R0 ;假設(shè)X>10,Y=X+1
CJNE
A,#11,NEXT3
;與11比較NEXT3:JNC NEXT4
;X>10,轉(zhuǎn)NEXT4
MOV R0,#0
;10>=X>=5,Y=0
SJMP
NEXT4NEXT2:MOV R0,A
DEC R0
;X<5.Y=X-1NEXT4:MOV 31H,R0
;存結(jié)果
END多路分支程序精選課件例3:128種分支轉(zhuǎn)移程序。功能:根據(jù)入口條件轉(zhuǎn)移到128個(gè)目的地址。入口:(R3)=轉(zhuǎn)移目的地址的序號(hào)00H~7FH。出口:轉(zhuǎn)移到相應(yīng)子程序入口。128個(gè)子程序首址JMP_128:MOVA,R3RLAMOVDPTR,#JMPTABJMP@A+DPTRJMPTAB:AJMPROUT00AJMPROUT01┇┇AJMPROUT7F精選課件說明:此程序要求128個(gè)轉(zhuǎn)移目的地址(ROUT00~ROUT7FH)必須駐留在與絕對(duì)轉(zhuǎn)移指令A(yù)JMP相同的一個(gè)2KB存儲(chǔ)區(qū)內(nèi)。RL指令對(duì)變址部分乘以2,因?yàn)槊織lAJMP指令占兩個(gè)字節(jié)。精選課件分支程序結(jié)構(gòu)散轉(zhuǎn)指令轉(zhuǎn)向0分支轉(zhuǎn)向1分支轉(zhuǎn)向n-1分支轉(zhuǎn)向n分支K=0K=1K=n-1K=n┅┅┅精選課件三、循環(huán)程序在程序運(yùn)行時(shí),有時(shí)需要連續(xù)重復(fù)執(zhí)行某段程序,可以使用循環(huán)程序。其結(jié)構(gòu)包括四部分:
1、置循環(huán)初值2、循環(huán)體(循環(huán)工作部分)3、修改控制變量4、循環(huán)控制部分精選課件置初值循環(huán)體循環(huán)修改循環(huán)控制退出循環(huán)未完完(a)置初值循環(huán)體循環(huán)修改循環(huán)控制退出循環(huán)未完完(b)圖循環(huán)組織方式流程圖精選課件1、置循環(huán)初值對(duì)于循環(huán)程序中所使用的工作單元,在循環(huán)開始時(shí)應(yīng)置初值。例如,工作寄存器設(shè)置計(jì)數(shù)初值,累加器A清0,以及設(shè)置地址指針、長(zhǎng)度等。精選課件2、循環(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é)束條件。常見的是計(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)。8051可采用DJNZ指令來自動(dòng)修改控制變量并能結(jié)束循環(huán)。精選課件例1在內(nèi)部RAM30H~4FH連續(xù)32個(gè)單元中存放單字節(jié)無符號(hào)數(shù)。求32個(gè)無符號(hào)數(shù)之和,并存放到RAM51H、50H中解這是重復(fù)相加問題。設(shè)用R0作加數(shù)地址指針,R7作循環(huán)次數(shù)計(jì)數(shù)器,R3作總和數(shù)高字節(jié)寄存器。程序流程圖及代碼:循環(huán)次數(shù)已知的程序精選課件精選課件
ORG 0000HSTART:MOVR7,#31 ;R7作循環(huán)次數(shù)計(jì)數(shù)
MOV R3,#0;R3作和數(shù)高字節(jié)寄存器
MOV A,30H ;取第一個(gè)被加數(shù)
MOV R0,#31H ;R0作加數(shù)地址指針LOOP:ADD A,@R0 ;作加法
JNC NEXT ;CY=0,和<256,則轉(zhuǎn)
INC R3 ;CY=1,加到高字節(jié)NEXT:INC R0 ;修改R0指針
DJNZ R7,LOOP ;未完,重復(fù)加法
MOV 51H,R3 MOV 50H,A ;存和數(shù)循環(huán)次數(shù)已知的程序精選課件例2:設(shè)有一帶符號(hào)的數(shù)組存放在8031單片機(jī)內(nèi)部RAM,以20H為首地址的連續(xù)單元中,其長(zhǎng)度為90,要求找出其中的最大值并將其存放到內(nèi)部RAM的1FH單元中,試編寫相應(yīng)的程序循環(huán)次數(shù)已知的程序精選課件NYYA與X符號(hào)相同?開始置循環(huán)計(jì)數(shù)器B初值置取數(shù)指針R0初值取第一單元內(nèi)容送A修改R0并取數(shù)XA>X?X送A循環(huán)計(jì)數(shù)器計(jì)數(shù)循環(huán)計(jì)數(shù)器=0?A送結(jié)果單元A為正數(shù)NNNYY結(jié)束(B)=89(R0)=20HMOVA,@R0(R0)+1→R0精選課件SCMPMA:MOVR0,#20HMOVB,#89MOVA,@R0SCLOOP:INCR0MOVR1,AXRLA,@R0JBACC.7,RESLATMOVA,R1CLRCSUBBA,@R0JNBACC.7,SMEXT1CXAHER:MOVA,@R0LJMPSMEXT2RESLAT:XRLA,@R0JNBACC.7,SMEXT2LJMPCXAHERSMEXT1:ADDA,@R0SMEXT2:DJNZB,SCLOOPMOV1FH,A;置取數(shù)指針R0初值;置循環(huán)計(jì)數(shù)器B初值;第一個(gè)數(shù)送A;修改指針;暫存;判兩個(gè)數(shù)符號(hào)是否相同;若相異,則轉(zhuǎn)RESLAT;若相同,則恢復(fù)A原來值;C清0;兩數(shù)相減,以判兩者大?。蝗鬉為大,則轉(zhuǎn)SMEXT1;若A為小,則將大數(shù)送入A;A恢復(fù)原值;若A為正,則轉(zhuǎn)SMEXT2;若A為負(fù),則轉(zhuǎn)CXAHER;恢復(fù)A原值;所有單元都比較過?未比較完,則繼續(xù);最大者送1FH單元精選課件例3:設(shè)用戶用鍵盤輸入長(zhǎng)度不超過100字節(jié)的字符串放在8031單片機(jī)外部RAM以20H為首地址的連續(xù)單元,該字符串用回車符CR(‘CR’=0DH)作為結(jié)束標(biāo)志,要求統(tǒng)計(jì)此字符串的長(zhǎng)度并存入內(nèi)部RAM的1FH單元中解:從首單元開始取數(shù),每取一數(shù)判斷其是否為‘CR’,是則結(jié)束循環(huán)次數(shù)未知的程序示例精選課件
ORG1000HSTADADATA20HSLANGDATA1FHCMCR2:MOVR0,#STADA-1MOVB,#0FFHCRLOP:INCR0INCBMOVXA,@R0CJNEA,#0DH,CRLOPMOVSLANG,BSJMP$END循環(huán)次數(shù)未知的程序示例精選課件編寫循環(huán)程序應(yīng)注意的問題(1)進(jìn)入循環(huán)之前,應(yīng)合理設(shè)置循環(huán)初始變量(2)循環(huán)體只能執(zhí)行有限次,如果無限執(zhí)行的話,稱之為死循環(huán),這是應(yīng)當(dāng)避免的(3)不能破壞或修改循環(huán)體,這里要特別注意避免從循環(huán)體外直接跳轉(zhuǎn)到循環(huán)體內(nèi)(4)多種循環(huán)的嵌套,應(yīng)當(dāng)是以下兩種形式錯(cuò)(5)循環(huán)體內(nèi)可以直接轉(zhuǎn)到循環(huán)體外或外層循環(huán)中,實(shí)現(xiàn)一個(gè)循環(huán)多個(gè)條件控制結(jié)束的結(jié)構(gòu)(6)對(duì)循環(huán)體的編程要仔細(xì)推敲,合理安排,對(duì)其優(yōu)化時(shí)應(yīng)主要放在縮短執(zhí)行時(shí)間上,其次是程序的長(zhǎng)度精選課件冒泡法排序-A設(shè)在8031內(nèi)部RAM中存一無符號(hào)數(shù)的數(shù)組,其長(zhǎng)度為100,起始地址是30H,要求將它們從大到小排序,排序后仍存放在原區(qū)域中精選課件冒泡法排序共4–1=3次外循環(huán)
解:先舉四個(gè)數(shù)排序的例子內(nèi)RAM第一次外循環(huán)第二次外循環(huán)第三次外循環(huán)30H0003030631H0302060332H0206020233H06000000精選課件這就是所謂的“冒泡法”4個(gè)數(shù)排序最多經(jīng)過3次外循環(huán)就可排出,每次外循環(huán)都包含3次內(nèi)循環(huán)。實(shí)際上大多情況不用3次外循環(huán)就可排完對(duì)于100個(gè)數(shù)排序也是如此,用不到99次循環(huán),排序就結(jié)束為了提高排序速度,程序中可設(shè)一交換標(biāo)志位如10
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度排水設(shè)施保險(xiǎn)合同4篇
- 二零二五版飯店蔬菜肉類產(chǎn)地直供合作合同2篇
- 二零二五年度全新科技項(xiàng)目居間合作費(fèi)合同模板下載2篇
- 二零二五年度內(nèi)蒙古肉牛產(chǎn)業(yè)鏈人才培養(yǎng)與引進(jìn)合同
- 2025年度汽車銷售促銷活動(dòng)執(zhí)行合同模板
- 二零二五年度學(xué)校室內(nèi)外體育設(shè)施一體化采購(gòu)合同范本3篇
- 2025年度民間借貸合同監(jiān)督與委托管理服務(wù)合同4篇
- 2025年度面粉加工企業(yè)二零二五年度綠色有機(jī)面粉采購(gòu)合同4篇
- 2025年度新能源汽車抵押擔(dān)保服務(wù)合同
- 二零二五年度公共綠地養(yǎng)護(hù)管理合同范本3篇
- 廣東省茂名市電白區(qū)2024-2025學(xué)年七年級(jí)上學(xué)期期末質(zhì)量監(jiān)測(cè)生物學(xué)試卷(含答案)
- 2024版?zhèn)€人私有房屋購(gòu)買合同
- 2024爆炸物運(yùn)輸安全保障協(xié)議版B版
- 2025年度軍人軍事秘密保護(hù)保密協(xié)議與信息安全風(fēng)險(xiǎn)評(píng)估合同3篇
- 《食品與食品》課件
- 讀書分享會(huì)《白夜行》
- 光伏工程施工組織設(shè)計(jì)
- DB4101-T 121-2024 類家庭社會(huì)工作服務(wù)規(guī)范
- 化學(xué)纖維的鑒別與測(cè)試方法考核試卷
- 2024-2025學(xué)年全國(guó)中學(xué)生天文知識(shí)競(jìng)賽考試題庫(kù)(含答案)
- 自動(dòng)駕駛汽車道路交通安全性探討研究論文
評(píng)論
0/150
提交評(píng)論