第4章 80C51單片機(jī)匯編語言程序設(shè)計(jì)
《第4章 80C51單片機(jī)匯編語言程序設(shè)計(jì)》由會(huì)員分享,可在線閱讀,更多相關(guān)《第4章 80C51單片機(jī)匯編語言程序設(shè)計(jì)(64頁珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、,課程:?jiǎn)纹瑱C(jī)技術(shù) 教材:?jiǎn)纹瑱C(jī)基礎(chǔ),第,4,章,MCS-51,匯編語言程序設(shè)計(jì),教學(xué)基本要求,:,(,1,)、了解,MCS-51,匯編語言程序設(shè)計(jì)的特點(diǎn);,(,2,)、熟悉,MCS-51,匯編語言偽指令的功能及用法;,(,3,)、掌握順序、分支、循環(huán)程序的設(shè)計(jì)方法,;,(,4,)、掌握,KEIL,軟件的使用方法。,教學(xué)重點(diǎn),:,(,1,)、,KEIL,軟件的使用方法,;,(,2,)、分支、循環(huán)程序的設(shè)計(jì)方法;,(,3,)、定時(shí)、查表程序的設(shè)計(jì)方法;,教學(xué)難點(diǎn),:,(,1,)、,KEIL,軟件調(diào)試程序的方法,;,(,2,)、利用,JMP A+DPTR,指令實(shí)現(xiàn)程序多分支;,(,3,)、查表程序
2、的設(shè)計(jì)方法;,(,4,)、子程序結(jié)構(gòu)與堆棧的關(guān)系。,4.1,單片機(jī)程序程序設(shè)計(jì)語言概述,4.1.1,機(jī)器語言和,匯編語言,4.1.2,單片機(jī)使用的高級(jí)語言,(,1,),BASIC,語言,(,2,),C,語言,(,3,),PL/M,語言,4.1.3 80C51,單片機(jī)匯編語言的語句格式,匯編語言程序設(shè)計(jì),必須注意如下特點(diǎn):,(,1,),設(shè)計(jì)人員必須詳細(xì)了解單片機(jī)的硬件結(jié)構(gòu),以便在程序設(shè)計(jì)中熟練使用;,(,2,)必須熟悉匯編語言指令的功能和用法;,(,3,)在程序設(shè)計(jì)前,必須分析設(shè)計(jì)任務(wù),確定所用算法,確定程序結(jié)構(gòu),確定數(shù)據(jù)的類型、數(shù)據(jù)的結(jié)構(gòu),必須對(duì)數(shù)據(jù)的存放、寄存器和工作單元的使用以及所用硬件資
3、源等作出具體安排;,(,4,)根據(jù)分析,畫出程序設(shè)計(jì)流程圖;,(,5,)根據(jù)程序設(shè)計(jì)流程圖編寫程序。,4.2,匯編語言程序的基本結(jié)構(gòu)形式,單片機(jī),匯編語言程序設(shè)計(jì)的基本結(jié)構(gòu)形式一般分為以下,4,種形式,即順序結(jié)構(gòu)、分支結(jié)構(gòu)、循環(huán)結(jié)構(gòu)和子程序結(jié)構(gòu)。,4.2.1,順序程序結(jié)構(gòu),順序程序是,最簡(jiǎn)單的程序結(jié)構(gòu),在,順序,程序中,,,既無分支,循環(huán),也,不調(diào)用,子程序,程序執(zhí)行時(shí)一條一條,地,按順序執(zhí)行指令,例:假定三字節(jié)無符號(hào)數(shù)相加,其中一個(gè)加數(shù)在內(nèi)部,RAM,的,50H,、,51H,和,52H,單元中,另一個(gè)加數(shù)在內(nèi)部,RAM,的,53H,、,54H,和,55H,單元中,要求把相加之和存放在,50H
4、,、,51H,和,52H,單元中,進(jìn)位存放在位尋址區(qū)的,00H,位中。,解,:(,1,)分析任務(wù):求兩數(shù)之和,(,2,)算法:加法運(yùn)算(,ADD,或,ADDC,),(,3,)程序結(jié)構(gòu),:,順序或循環(huán)結(jié)構(gòu),(,4,)數(shù)據(jù)類型:三字節(jié)、二進(jìn)制、無符號(hào)數(shù),(,5,),數(shù)據(jù)結(jié)構(gòu):升序或降序排列,(,6,),RAM,單元安排,: (內(nèi)部,RAM,字節(jié)單元、位地址空間,),(,7,)采用寄存器間接尋址方式(,R0,、,R1,),加數(shù)(,N1,),高字節(jié)(,8,位),中字節(jié)(,8,位),低字節(jié)(,8,位),加數(shù)(,N2,),高字節(jié)(,8,位),中字節(jié)(,8,位),低字節(jié)(,8,位),加數(shù)(,N1,),加數(shù)(
5、,N2,),和(,N3,),52H,單元,低字節(jié)(,8,位),55H,單元,低字節(jié)(,8,位),52H,單元,低字節(jié)(,8,位),51H,單元,中字節(jié)(,8,位),54H,單元,中字節(jié)(,8,位),51H,單元,中字節(jié)(,8,位),50H,單元,高字節(jié)(,8,位),52H,單元,高字節(jié)(,8,位),50H,單元,高字節(jié)(,8,位),00H位,進(jìn)位位,(,8,)程序設(shè)計(jì)流程框圖;,(,9,)程序清單;,ORG 1000H,MOV RO,,,#52H,;,加數(shù),N1,的低字節(jié)地址送地址指針,R0,MOV R1,,,#55H,;,加數(shù),N2,的低字節(jié)地址送地址指針,R1,MOV A,,,R0,; 取
6、,N1,的低字節(jié),ADD A,,,R1,;,N1,、,N2,低字節(jié)相加,MOV R0,,,A,;,保存,N1,、,N2,低字節(jié)和,DEC R0,;,修改加數(shù),N1,的,地址指針內(nèi)容,DEC R1,;,修改加數(shù),N2,的地址指針內(nèi)容,MOV A,,,R0,; 取,N1,的中間字節(jié),ADDC A,,,R1,;,N1,、,N2,中間字節(jié)帶低字節(jié)和進(jìn)位相加,MOV R0,,,A,;,保存,N1,、,N2,中間字節(jié)和,DEC R0,;,修改加數(shù),N1,的地址指針內(nèi)容,DEC R1,;,修改加數(shù),N2,的地址指針內(nèi)容,MOV A,,,R0,;,取,N1,的高字節(jié),ADDC A,,,R1,;,N1,、,N2
7、,高字節(jié)帶中間字節(jié)和進(jìn)位相加,MOV R0,,,A,;,保存,N1,、,N2,高字節(jié)和,MOV 00H,,,C,;,高字節(jié)和的,進(jìn)位送,00H,位保存,END,思考題:,1,)上述程序中,如果只采用,ADDC,指令,應(yīng)如何修改程序?,2,)如果,N1,、,N2,,,N3,均為,十進(jìn)制數(shù),應(yīng)如何修改程序?,3,)如果加數(shù),N1,在內(nèi)部,RAM,50H,、,51H,和,52H,單元中,,而,加數(shù),N2,與,和,N3,均,在外部,RAM00,53H,、,0054H,和,0055H,單元中,,其它條件不變,,應(yīng)如何修改程序?,4,)如果,N1,、,N2,,,N3,均存放在外部,RAM,單元,應(yīng)如何修改
8、程序?,例:設(shè)內(nèi)部,RAM 40H,,,41H,單元中分別存放,8,位二進(jìn)制數(shù),,現(xiàn)分別,取,這,兩個(gè)單元中的半,個(gè),字節(jié),合并成一個(gè),新,字節(jié)存放在,42H,單元,中,。,要求如下:,42H,單元,新字節(jié)的低半字節(jié)取自,40H,單元的低半字節(jié),而高半字節(jié)取自,41H,單元的低半字節(jié)。,解,:(,1,)分析任務(wù):拆字、合字,(,2,)算法:邏輯運(yùn)算,(,3,)程序結(jié)構(gòu):順序,(,4,)數(shù)據(jù)類型:?jiǎn)巫止?jié)、二進(jìn)制、無符號(hào)數(shù),(,5,)數(shù)據(jù)結(jié)構(gòu):升序或降序排列,(,6,)程序設(shè)計(jì)流程框圖;,(,7,)程序清單;,ORG 2000H,S,TART: MOV R1,,,#40H,;,初始化數(shù)據(jù)指針,R1
9、,的內(nèi)容,MOV A,,,R1,;,取,40H,單元內(nèi)容送,A,ANL A,,,#0FH,;,保留,40H,單元內(nèi)容低,4,位,INC R1,;,修改數(shù)據(jù)指針,R1,的內(nèi)容,XCH A,,,R1,;,(A),與,R1,內(nèi)容互換,ANL A,,,#0FH,;,保留,41H,單元內(nèi)容低四位,SWAP A,;,41H,單元內(nèi)容高低半字節(jié)互換,ORL A,,,R1,;,合字生成新字節(jié),INC R1,;,修改數(shù)據(jù)指針,R1,的內(nèi)容,MOV R1,,,A,;,新字節(jié)送,42H,單元保存,END,作業(yè)題:,上例中其它條件不變,要求如下:,42H,單元,新字節(jié)的低半字節(jié)取自,40H,單元的低半字節(jié),而高半字節(jié)
10、取自,41H,單元的高半字節(jié)。,(,1,)單分支程序,單分支程序,是通過條件轉(zhuǎn)移指令實(shí)現(xiàn)的,即根據(jù)條件對(duì)程序的執(zhí)行進(jìn)行判斷,滿足條件則進(jìn)行程序轉(zhuǎn)移,不滿足條件程序就順序執(zhí)行。,在,MCS-51,指令系統(tǒng)中,可利用,JZ,,,JNZ,,,CJNE,,,DJNZ,,,JC,,,JNC,,,JB,,,JNB,,,JBC,等指令,完成為,0,、,為,1,、,為正,、,為負(fù)以及相等,、,不相等等各種條件判斷。,例:兩個(gè),8,位無符號(hào)二進(jìn)制數(shù)比較大小。,假,設(shè),在外部,RAM,中有,ST1,、,ST2,和,ST3,共,3,個(gè)連續(xù)單元(單元地址從小到大,),,其,中,ST1,、,ST2,單元中,存放,著,兩
11、個(gè),8,位,無符號(hào)二進(jìn)制數(shù),N1,,,N2,,,要求,找出其中,的,大數(shù),并,存,入,ST3,單元,中,。,4.2.2,分支程序結(jié)構(gòu),解,:(,1,)分析任務(wù):比較兩個(gè)數(shù)的大小,(,2,)算法:算術(shù)運(yùn)算、控制轉(zhuǎn)移,(,3,)程序結(jié)構(gòu):?jiǎn)畏种?(,4,)數(shù)據(jù)類型:?jiǎn)巫止?jié)、二進(jìn)制、無符號(hào)數(shù),(,5,)數(shù)據(jù)結(jié)構(gòu):?jiǎn)卧刂飞蚺帕?(,6,),RAM,單元安排,:外部,RAM,單元,(,7,)采用寄存器間接尋址方式(,R0,、,R1,或,DPTR,),(,8,),程序設(shè)計(jì)流程框圖,;,(,9,),程序清單,;,思考題(補(bǔ)充作業(yè)題):,上例中,如果采用,CJNE A,,,direct,,,rel,指令,
12、應(yīng)如何修改程序?,返回,ORG 8000H,START: CLR C,;,進(jìn)位清,0,MOV DPTR,,,#ST1,;,設(shè)數(shù)據(jù)指針,MOVX A,,,DPTR,;,A,(,ST1,),取,N1,MOV R2,,,A,;,暫存,N1,INC DPTR,;,DPTR ST2,(,指向,N2,單元),MOVX A,,,DPTR,; 取,N2,存于,A,中,SUBB A,,,R2,;,N1,,,N2,比較(,N2-N1,,,差在,A,中),JNC BIG1,;,N2N1,,轉(zhuǎn),BIG1,,,N2,N1,,,順序執(zhí)行,XCH A,,,R2,;,N1,,,N2,互換,,A N1,SJMP BIG0,BI
13、G1: MOVX A,,,DPTR,;,A N2,BIGO: INC DPTR,;,DPTR ST3,(,指向,N3,單元),MOVX DPTR,,,A,;,ST3 ,大數(shù),END,返回,(,2,)多分支程序,假設(shè)多分支程序中,分支序號(hào)的最大值為,n,,,則多分支轉(zhuǎn)移結(jié)構(gòu)如圖所示:,MCS-51,指令系統(tǒng),沒有,多分支,轉(zhuǎn)移,指令,無法使用,單,條指令完成多分支轉(zhuǎn)移,。要實(shí)現(xiàn)多分支轉(zhuǎn)移,,可采用以下幾種方法:,假設(shè)分支序號(hào)值保存在累加器,A,中,則可使用,CJNE A,,,#data,,,rel,指令,其分支流程如圖所示:,(,a,),使用多條,CJNE,指令,通過逐次比較,實(shí)現(xiàn)分支程序轉(zhuǎn)移,
14、例:,已知,:,127,X,-128,,求,Y,。,設(shè),X,,,Y,分別,存,放在外部,RAM 1000H,和,2000H,單元中。,解,:(,1,)分析任務(wù):解方程,(,2,)算法:控制轉(zhuǎn)移,(,3,)程序結(jié)構(gòu):多分支,(,4,)數(shù)據(jù)類型:?jiǎn)巫止?jié)、二進(jìn)制、有符號(hào)數(shù),(,5,),RAM,單元安排,:外部,RAM,單元,(,6,)采用寄存器間接尋址方式(,R0,、,R1,或,DPTR,),(,7,),程序設(shè)計(jì)流程框圖,(,8,),程序清單,;,思考題(補(bǔ)充作業(yè)題):,上例中,如果采用,CJNE,指令,應(yīng)如何修改程序?,返回,ARE EQU 1000H,;,BUF EQU 2000H,;,ORG
15、1000H,START,:,MOV DPTR,,,#ARE,;,數(shù)據(jù),X,的地址送數(shù)據(jù)指針,DPTR,MOVX A,,,DPTR,;,A,取,數(shù)據(jù),X,JZ SUL,;,X,0,轉(zhuǎn),SUL,JB ACC.7,,,NEG,;,X,0,轉(zhuǎn),NEG,,,否則,,X,0,MOV A,,,#01H,;,SJMP SUL,;,NEG: MOV A,,,#0FFH,;,(0FFH,為,-1,補(bǔ)碼,),SUL: MOV DPTR,,,#BUF,;,數(shù)據(jù),Y,的地址送數(shù)據(jù)指針,DPTR,MOVX DPTR,,,A,;,保存,Y,值,END,返回,首先,在程序中建立一個(gè)轉(zhuǎn)移指令表,在表格中存放轉(zhuǎn)移指令,然后,通過
16、查轉(zhuǎn)移指令表的方式實(shí)現(xiàn)多分支程序轉(zhuǎn)移。,這種方法主要利用散轉(zhuǎn)指令,JMP A+DPTR,,,此指令采用變址尋址方式,操作過程:(,PC,)(,A,),+,(,DPTR,),,CPU,根據(jù),PC,的內(nèi)容來實(shí)現(xiàn)多分支程序轉(zhuǎn)移。,DPTR,中送轉(zhuǎn)移指令表的表首地址(常用轉(zhuǎn)移指令表的名稱標(biāo)號(hào)代替),而,A,中送轉(zhuǎn)移指令表中存放的轉(zhuǎn)移指令的序號(hào)(常常從第,0,條開始)。,例如,有多個(gè)分支程序,如要通過,AJMP,轉(zhuǎn)移指令進(jìn)行轉(zhuǎn)移,則應(yīng)把這些轉(zhuǎn)移指令按序?qū)懭朕D(zhuǎn)移指令表中,并設(shè)置一個(gè)序號(hào)指針(例如,R3,),,序號(hào)往往從,0,開始,然后可使用以下查表程序?qū)崿F(xiàn)程序轉(zhuǎn)移。,(,b,),使用查,轉(zhuǎn)移指令,表,的,
17、方法實(shí)現(xiàn)多分支程序轉(zhuǎn)移,MOV A,,,R3,;,分支程序序號(hào)送,A,RL A,;,分支程序序號(hào)乘,2,MOV DPTR,,,#BRTAB,;,BRTAB,為轉(zhuǎn)移指令表名稱標(biāo)號(hào),,JMP A+DPTR,;,也為轉(zhuǎn)移指令表首地址,BRTAB,:,AJMP ROUT0,;,分支程序,0,的轉(zhuǎn)移指令,AJMP ROUT1,;,分支程序,1,的轉(zhuǎn)移指令,AJMP ROUT2,;,AJMP ROUT127,;,分支程序,127,的轉(zhuǎn)移指令,ROUT0,:,;,分支程序,0,ROUT1:,;,ROUT127:,;,分支程序,127,由于,AJMP,指令是二字節(jié)指令,因此,程序中通過,RL A,指令將分支序
18、號(hào)乘,2,。轉(zhuǎn)移指令表中最多只能安排,128,條分支轉(zhuǎn)移指令,如需多于,128,條,則必須另行修改程序。,由于,AJMP,指令轉(zhuǎn)移范圍是,2KB,,,因此,分支程序應(yīng)安排在以,JMP A+DPTR,指令為中心的,2KB,范圍之內(nèi),否則會(huì)出錯(cuò)。,如果轉(zhuǎn)移指令表中的轉(zhuǎn)移指令是,LJMP,指令,則分支程序可安排在,64KB ROM,空間的任何地方。但轉(zhuǎn)移指令表中的轉(zhuǎn)移指令的條數(shù)最多為,85,條(,LJMP,指令是三字節(jié)指令),上述程序應(yīng)作相應(yīng)的修改。,MOV A,,,R3,;,MOV B,,,#03H,;,MUL AB,;,MOV DPTR,,,#BRTAB,;,BRTAB,為轉(zhuǎn)移指令表名稱標(biāo)號(hào),,
19、JMP A+DPTR,;,也為轉(zhuǎn)移指令表首地址,BRTAB,:,LJMP ROUT0,;,分支程序,0,的轉(zhuǎn)移指令,LJMP ROUT1,;,分支程序,1,的轉(zhuǎn)移指令,LJMP ROUT2,;,LJMP ROUT85,;,分支程序,85,的轉(zhuǎn)移指令,ROUT0,:,;,分支程序,0,ROUT1:,;,ROUT85,:,;,分支程序,85,返回,4.2.3,循環(huán)程序結(jié)構(gòu),MCS-51,匯編語言指令系統(tǒng)沒有專用的循環(huán)指令,但可以使用條件轉(zhuǎn)移指令通過條件判斷來控制循環(huán)是繼續(xù)還是結(jié)束。,循環(huán)程序一般由四個(gè)主要部分組成,: ,(,1,)初始化部分:為循環(huán)程序做準(zhǔn)備,如規(guī)定循環(huán)次數(shù)、給各變量和地址指針預(yù)置
20、初值。 ,(,2,)處理部分,:,為反復(fù)執(zhí)行的程序段,是循環(huán)程序的實(shí)體, 也是循環(huán)程序的主體。 ,(,3,)循環(huán)控制部分,:,其作用是修改循環(huán)變量和控制變量,并判斷循環(huán)是否結(jié)束,直到符合結(jié)束條件時(shí),跳出循環(huán)為止。,(,4,)結(jié)束部分,:,這部分主要是對(duì)循環(huán)程序的結(jié)果進(jìn)行分析、處理和存放。,單循環(huán)程序一般有以下兩種典型結(jié)構(gòu):,雙重循環(huán)程序的結(jié)構(gòu):,在應(yīng)用系統(tǒng)程序設(shè)計(jì)時(shí),有時(shí)經(jīng)常需要將數(shù)據(jù)存儲(chǔ)器中各部分地址單元作為工作單元,以存放程序執(zhí)行的中間值或執(zhí)行結(jié)果,因此,在使用這些工作單元之前,必須將工作單元清零。工作單元清零可用循環(huán)程序完成。,例:假設(shè)在內(nèi)部,RAM,區(qū),開辟,96,個(gè)工作單元,工作單元
21、首地址為,20H,,,則工作單元清零程序子程序如下,:,ORG 1000H,CLR0,:,MOV R0,,,#20H,;,循環(huán)初始化部分,MOV R7,,,#96,;,CLR A,LOOP,:,MOV R0,,,A,;,循環(huán)體部分,INC R0,;,修改變量,DJNZ R7,,,LOOP,;,循環(huán)控制部分,RET,END,思考題(補(bǔ)充作業(yè)題):如采用,CJNE,指令,應(yīng)如何修改程序?,例:兩個(gè)三字節(jié)二進(jìn)制無符號(hào)數(shù)相加,被加數(shù)放在內(nèi)部,RAM 20H,22H,單元(低字節(jié)存放在低地址單元,高字節(jié)存放在高地址單元,即低位在前,高位在后),加數(shù)放在,2AH,2CH,單元,和放在,20H,22H,單元
22、,最高位如有進(jìn)位,則放在,23H,單元中。,解:數(shù)據(jù)類型(二、十進(jìn)制數(shù),有、無符號(hào)數(shù));數(shù)據(jù)結(jié)構(gòu)(升、降序排列),被加數(shù)(,N1,),高字節(jié)(,8,位),中字節(jié)(,8,位),低字節(jié)(,8,位),加數(shù)(,N2,),高字節(jié)(,8,位),中字節(jié)(,8,位),低字節(jié)(,8,位),被加數(shù)(,N1,),加數(shù)(,N2,),和(,N3,),20H,單元,低字節(jié)(,8,位),2AH,單元,低字節(jié)(,8,位),20H,單元,低字節(jié)(,8,位),21H,單元,中字節(jié)(,8,位),2BH,單元,中字節(jié)(,8,位),21H,單元,中字節(jié)(,8,位),22H,單元,高字節(jié)(,8,位),2CH,單元,高字節(jié)(,8,位),2
23、2H,單元,高字節(jié)(,8,位),23H,單元,進(jìn)位位,被加數(shù),N1,高字節(jié)(,8,位) 中字節(jié)(,8,位) 低字節(jié)(,8,位),加數(shù),N2,高字節(jié)(,8,位) 中字節(jié)(,8,位) 低字節(jié)(,8,位),+,)進(jìn)位位(,CY,),進(jìn)位位(,CY,),進(jìn)位位(,CY,),和,N3,進(jìn)位 高字節(jié)(,8,位) 中字節(jié)(,8,位) 低字節(jié)(,8,位),程序流程框圖,程序清單,思考題:統(tǒng)計(jì)正數(shù)、負(fù)數(shù)、零的個(gè)數(shù)。,ORG 0030H,ADDDUO,:,MOV R0,,,#20H,;,循環(huán)初始化部分,MOV R1,,,#2AH,;,MOV R7,,,#03H,;,循環(huán)次數(shù),CLR C,;,LOOP,:,MOV
24、A,,,R0,;,循環(huán)體部分,ADDC A,,,R1,;,MOV R0,,,A,;,INC R0,;,修改指針變量,INC R1,;,DJNZ R7,,,LOOP,;,循環(huán)控制部分,CLR A,;,循環(huán)結(jié)束處理部分,ADDC A,,,#00H,;,MOV R0,,,A,;,RET,;,END,返回,返回,例:把內(nèi)部,RAM,中起始地址為,DATA,的數(shù)據(jù)串傳送到外部,RAM,以,BUFFER,為首地址的區(qū)域,直到發(fā)現(xiàn)“,$”,字符的,ASC,碼為止,同時(shí)規(guī)定數(shù)據(jù)串最大長(zhǎng)度為,32,個(gè)字節(jié)。,解,:(,1,)分析任務(wù):數(shù)據(jù)傳送;(,2,)算法:比較、控制轉(zhuǎn)移,(,3,)程序結(jié)構(gòu):分支、循環(huán)(,4
25、,)數(shù)據(jù)類型:多字節(jié)字符串,(,5,),RAM,單元安排,:內(nèi)部,RAM,單元、,外部,RAM,單元,(,6,)采用寄存器間接尋址方式(,R0,、,R1,或,DPTR,),(,7,)程序流程框圖;,ORG 0030H,DATACS,:,MOV R0,,,#DATA,;,DATA,數(shù)據(jù)區(qū)首地址,MOV DPTR,,,#BUFFER,;,BUFFER,數(shù)據(jù)區(qū)首地址,MOV R1,,,#20H,;,最大數(shù)據(jù)串長(zhǎng),LOOP,:,MOV A,,,R0,;,取數(shù)據(jù),SUBB A,,,#24H,;,判是否為“,$”,字符,JZ LOOP1,;,是“,$”,字符,轉(zhuǎn)結(jié)束,MOVX DPTR,,,A,;,數(shù)據(jù)傳
26、送,INC R0,;,INC DPTR,;,DJNZ R1,,,LOOP,;,循環(huán)控制,LOOP1,:,RET,;,結(jié)束,END,4.3 80C51,單片機(jī),匯編語言程序設(shè)計(jì)舉例,4.3.2,定時(shí)程序,在單片機(jī)的控制應(yīng)用中,常有定時(shí)的需要,如定時(shí)中斷、定時(shí)檢測(cè)和定時(shí)掃描等。定時(shí)功能除可以使用純硬件電路、可編程定時(shí),/,計(jì)數(shù)器實(shí)現(xiàn)外,還可以使用軟件程序(定時(shí)程序)完成。,定時(shí)程序是典型的循環(huán)程序,它是通過執(zhí)行一個(gè)具有固定延遲時(shí)間的循環(huán)體來實(shí)現(xiàn)定時(shí)的。,(,1,)單循環(huán)定時(shí)程序,MOV R5,,,#TIME,;,LOOP: NOP,;,NOP,;,DJNZ R5,,,LOOP,;,假設(shè),單片機(jī)晶振
27、頻,率,f,osc,=6MHz,,,則一個(gè)機(jī)器周期為,2s,,,NOP,、,DJNZ,指令分別是單、雙機(jī)器周期指令。定時(shí)程序的總延遲時(shí)間是循環(huán)程序段延時(shí)時(shí)間的整數(shù)倍,由于,R5,是,8,位寄存器,因此,這個(gè)定時(shí)程序的最長(zhǎng)定時(shí)時(shí)間為:,256,(,2,8,),8=2048,(,s,),(,2,),較長(zhǎng)時(shí)間的定時(shí)程序,(多重循環(huán)定時(shí)子程序),TIME,:,MOV R5,,,#TTME1,;,LOOP,:,MOV R4,,,#TEME2,;,LOOP1,:,NOP,;,NOP,;,DJNZ R4,,,LOOP1,;,DJNZ R5,,,LOOP2,;,RET,;,這個(gè)定時(shí)子程序的最長(zhǎng)定時(shí)時(shí)間為:,2
28、56,(,2,8,),4+2+1256,(,2,8,),2+4=525828,(,s,),(,3,),調(diào)整定時(shí)時(shí)間,在定時(shí)程序中可通過在循環(huán)程序段中增減指令的方法對(duì)定時(shí)時(shí)間進(jìn)行微調(diào)。,例:,MOV R0,,,#TTME,;,LOOP,:,ADD A,,,R1,;,INC DPTR,;,DJNZ R0,,,LOOP,;,由于,ADD,、,INC,、,DJNZ,指令的機(jī)器周期分別為,1,、,2,、,2,,所以,,該程序定時(shí)時(shí)間為,=,(,1+2+2,),2sTime,(,s,),。,假定要求定時(shí)時(shí)間為,24us,。,對(duì)于這個(gè)定時(shí)程序,只須增加一條,NOP,指令即可實(shí)現(xiàn)。,MOV R0,,,#TIM
29、E,;,LOOP,:,ADD A,,,R1,;,INC DPTR,;,NOP,;,DJNZ R0,,,LOOP,;,只須,TIME,取,2,,即可得到精確的,24s,定時(shí)。,(,4,),以一個(gè)基本的延時(shí)程序滿足不同的定時(shí)要求,如果一個(gè)系統(tǒng)有多個(gè)定時(shí)需要,我們就可以設(shè)計(jì)一個(gè)基本延時(shí)程序,使其延時(shí)時(shí)間為各定時(shí)時(shí)間的最大公約數(shù),然后可以以此基本程序作為子程序,通過調(diào)用的方法實(shí)現(xiàn)所需不同定時(shí)。,例:在單片機(jī)應(yīng)用系統(tǒng)中,假設(shè)需要的定時(shí)時(shí)間分別為,5S,、,10S,、,20S,,,可設(shè)計(jì)一個(gè),1S,延時(shí)子程序,DELAY,,,則,5S,、,10S,、,20S,的定時(shí)時(shí)間可通過調(diào)用,DELAY,實(shí)現(xiàn)。,MO
30、V R0,,,#05H,;,5S,定時(shí),LOOP: LCALL DELAY,;,DJNZ R0,,,LOOP1,;,MOV R0,,,#0AH,;,10S,定時(shí),LOOP2: LCALL DELAY,;,DJNZ R0,,,LOOP2,;,MOV R0,,,#14H,;,20S,定時(shí),LOOP3: LCALL DELAY,;,DJNZ R0,,,LOOP3,;,4.3.3,查表程序,所謂查表程序,就是指預(yù)先把數(shù)據(jù)以表格形式存放在程序存儲(chǔ)器中,然后使用程序讀出,這種能讀出表格數(shù)據(jù)的程序就稱之為查表程序。,查表操作對(duì)單片機(jī)的控制應(yīng)用十分重要,查表程序,常用于實(shí)現(xiàn)非線性修正,非線性函數(shù)轉(zhuǎn)換以及代碼轉(zhuǎn)
31、換等,場(chǎng)合。,MCS-51,單片機(jī),指令系統(tǒng)中,有兩條,專用查表指令:,(,1,),MOVC A,,,A+DPTR,;,A,(,A,),+,(,DPTR,),(,2,),MOVC A,,,A+PC,;,A,(,A,),+,(,PC,),這,兩條,查表指令,的功能是完全相同的,其共同優(yōu)點(diǎn)是:能在不改變,PC,和,DPTR,的狀態(tài)下,只根據(jù),A,的內(nèi)容就可以取出表格中的數(shù)據(jù)。注意:,A,的內(nèi)容均為,8,位無符號(hào)數(shù)。,對(duì)于第一條指令,適用于,64KB ROM,范圍內(nèi)查表(即數(shù)據(jù)表格的大小和位置可以在,64KB,程序存儲(chǔ)器中任意安排,一個(gè)數(shù)據(jù)表格可以被多個(gè)程序塊使用),編寫查表程序時(shí),首先把表的首地址
32、送入,DPTR,中,再要將查表的數(shù)據(jù)序號(hào)(或下標(biāo)值)送入,A,中,然后就可以使用該指令進(jìn)行查表操作,并把結(jié)果送,A,中。,對(duì)于第二條指令,常用于“本地”范圍查表(即數(shù)據(jù)表格只能放在該指令后面,256,個(gè)地址單元之內(nèi),而且表格只能被本程序使用),編寫查表程序時(shí),首先把查表數(shù)據(jù)的序號(hào)送入,A,中,再把從查表指令的下一條指令的首地址到表的首地址間的偏移量與,A,值相加,然后再使用該指令進(jìn)行查表操作,并把結(jié)果送入,A,中。,例:設(shè)計(jì)一個(gè)子程序,其功能為根據(jù),x,的內(nèi)容(,0,9,之間)查平方表,求出相應(yīng)的結(jié)果,y,(,y=x,2,)。,假設(shè),x,的內(nèi)容已存放在內(nèi)部,RAM 30H,單元中,求出,y,的
33、內(nèi)容存放在內(nèi)部,RAM 40H,單元中。,ORG 1000H,1000H SQR,:,MOV A,,,30H,;,Ax,1002H PUSH DPH,;,現(xiàn)場(chǎng)保護(hù),1004H PUSH DPL,;,1006H MOV DPTR,,,#TAB1,;,DPTR,表首地址,TAB1,1009H MOVC A,,,A+DPTR,;,查表得,y,100AH MOV 40H,,,A,;,40Hy,100CH POP DPL,;,現(xiàn)場(chǎng)恢復(fù),100EH POP DPH,;,1010H RET,1011H TAB1: DB 00H,,,01H,,,04H,,,09H,,,10H,,,19H,DB 24H,,,3
34、1H,,,40H,,,51H,上例中,如果使用,MOVC A,,,A+PC,指令,,則,編程如下:,ORG 1000H,1000H SQR,:,MOV A,,,30H,;,Ax,1002H PUSH DPH,;,現(xiàn)場(chǎng)保護(hù),1004H PUSH DPL,;,1006H ADD A,,,#07H,;,加,偏移量,1008H MOVC A,,,A+PC,;,查表得,y,1009H MOV 40H,,,A,;,40Hy,100BH POP DPL,;,現(xiàn)場(chǎng)恢復(fù),100DH POP DPH,;,100FH RET,1010H TAB1: DB 00H,,,01H,,,04H,,,09H,,,10H,,,
35、19H,DB 24H,,,31H,,,40H,,,51H,此題,中,偏移量,=1010H-1009H=07H,4.4,單片機(jī)匯編語言源程序的編輯和匯編,4.5 80C51,單片機(jī),匯編語言偽指令,匯編語言程序必須轉(zhuǎn)換為二進(jìn)制的機(jī)器代碼程序,單片機(jī)才能夠執(zhí)行。匯編語言程序轉(zhuǎn)換為機(jī)器代碼程序的過程,稱之為匯編。匯編的方法有兩種:即機(jī)器交叉匯編和手工匯編。,所謂手工匯編,就是指程序設(shè)計(jì)人員通過查指令編碼表,逐個(gè)把助記符指令,“,翻譯,”,成機(jī)器碼。手工匯編方法通常用于短、小程序的匯編。長(zhǎng)程序則必須通過機(jī)器交叉匯編的方法進(jìn)行匯編。,所謂機(jī)器交叉匯編,就是指程序設(shè)計(jì)人員使用一種計(jì)算機(jī)的匯編程序去匯編另一
36、種計(jì)算機(jī)的源程序,具體地說就是運(yùn)行匯編程序進(jìn)行匯編的是一種計(jì)算機(jī),而運(yùn)行匯編得到的目標(biāo)程序的則是另一種計(jì)算機(jī)。,單片機(jī)只能采用機(jī)器交叉匯編的方法對(duì)匯編語言程序進(jìn)行匯編,對(duì)匯編語言程序進(jìn)行機(jī)器交叉匯編時(shí),必須告訴計(jì)算機(jī)的匯編程序應(yīng)該如何完成匯編工作,這一任務(wù)就是通過使用偽指令來實(shí)現(xiàn)的。,偽指令是程序,設(shè)計(jì)人,員發(fā)給匯編程序的指令,也稱匯編命令或匯編程序控制指令。,它具有控制匯編程序的輸入輸出、定義數(shù)據(jù)和符號(hào)、條件匯編、分配存儲(chǔ)空間等功能。,偽指令沒有與之相對(duì)應(yīng)的二進(jìn)制機(jī)器代碼,因此,在匯編語言指令系統(tǒng)匯總表中,查不到相對(duì)應(yīng)的二進(jìn)制機(jī)器代碼。不同匯編語言的偽指令也有所不同,但一些基本指令是相同的。
37、,手工匯編不需要偽指令,但機(jī)器交叉匯編必須使用偽指令。在對(duì)匯編語言程序進(jìn)行機(jī)器交叉匯編前,偽指令存在于匯編語言程序中,但匯編后得到的機(jī)器代碼程序中不存在偽指令相對(duì)應(yīng)的二進(jìn)制機(jī)器代碼,這一點(diǎn)請(qǐng)?zhí)貏e注意。,(,1,),ORG,(,ORiGin,),匯編起始地址命令,本命令總出現(xiàn)在匯編語言源程序的開頭位置,用于規(guī)定目標(biāo)程序的起始地址,即此命令后面的程序或數(shù)據(jù)塊的起始地址。,命令格式:,標(biāo)號(hào):,ORG,地址,其中,標(biāo)號(hào):,是選擇項(xiàng),根據(jù)需要選用,,地址,項(xiàng),通常為,16,位絕對(duì)地址,但也可以使用標(biāo)號(hào)或表達(dá)式表示。,在匯編語言程序的開始,通常都用一條,ORG,偽指令來規(guī)定程序的起始地址,如果不用,ORG
38、,規(guī)定,則匯編得到的目標(biāo)程序?qū)?0000H,開始。,例:,ORG 8000H,即規(guī)定標(biāo)號(hào),START,代表地址,8000H,,,START,:,MOV A,,,#00H,;,目標(biāo)程序的第一條指令從,8000H,開始。,(,2,),END,(,END of assembly,),匯編終止命令,本命令用于終止,匯編語言,源程序的匯編工作,,END,是匯編語言源程序的結(jié)束標(biāo)志,,因此,在整個(gè)匯編語言,源程序,中,只能有一個(gè),END,指令,,且位于程序的最后。如果,END,命令出現(xiàn)在程序中間,則,在,END,之后的指令,匯編程序,將,不予處理。,命令格式:,標(biāo)號(hào):,END,表達(dá)式,(,3,),EQU
39、,(,EQUate,),賦值命令,本命令用于給字符名稱賦予一個(gè)特定值,賦值以后,其值在整個(gè)程序中有效。,命令格式:,字符名稱,EQU,賦值項(xiàng),其中,賦值項(xiàng),可以是常數(shù),地址,標(biāo)號(hào)或表達(dá)式,其值為,8,位,或,16,位,二進(jìn)制數(shù)。賦值,以后的,字符名稱,既可以作地址使用,也可以作立即數(shù)使用。,例:,HOUR EQU 30H,ORG 1000H,START,:,MOV HOUR,,,#40H,;,等同于,START,:,MOV 30H,,,#40H,;,(,4,),DB,(,Define Byte,),定義數(shù)據(jù)字節(jié)命令,本命令用于從指定的地址單元開始,在程序存儲(chǔ)器的連續(xù)單元中定義字節(jié)數(shù)據(jù)。,命令格
40、式:,標(biāo)號(hào):,DB8,位數(shù)表,常使用本命令存放數(shù)據(jù)表格。,例:存放,7,段數(shù)碼管(共陽極)顯示的十六進(jìn)制基數(shù)(,0,F,),的十六進(jìn)制數(shù)的字形代碼,可使用多條,DB,命令定義。,DB 0C0H,,,0F9H,,,0A4H,,,0B0H,;,0,,,1,,,2,,,3,DB 99H,,,92H,,,82H,,,0F8H,;,4,,,5,,,6,,,7 DB 80H,,,90H,,,88H,,,83H,;,8,,,9,,,A,,,B,DB 0C6H,,,0A1H,,,86H,,,84H,;,C,,,D,,,E,,,F,查表時(shí),為確定數(shù)據(jù)區(qū)的起始地址,可采用兩種方法,:,a,),根據(jù),DB,命令前一
41、條指令的地址確定。把該地址加上它的字節(jié)數(shù)就是,DB,的定義的數(shù)據(jù)字節(jié)的起始地址。,例:,8100: MOV A, #49H,;,一字節(jié)指令,TAB: DB 0COH,,,0F9H,,,0A4H,,,0B0H,;,定義的,7,段數(shù)碼管(共陽極)顯示的十六進(jìn)制基數(shù)(,0,F,),的十六進(jìn)制數(shù)的字形代碼,從,8101H,地址,單元,開始存放。,b,),使用,0RG,命令專門規(guī)定。,例:,ORG 8100H,TAB: DB 0COH,,,0F9H,,,0A4H,,,0B0H,;,定義的,7,段數(shù)碼管(共陽極)顯示的十六進(jìn)制基數(shù)(,0,F,),的十六進(jìn)制數(shù)的字形代碼從,8101H,地址單元開始存放。,(
42、,5,),DW,(,Define Word,),定義數(shù)據(jù)字命令,本命令用于從指定地址開始,在程序存儲(chǔ)器單元中定義,16,位的數(shù)據(jù)字。,命令格式:,標(biāo)號(hào):,DW16,位數(shù)表,存放時(shí),數(shù)據(jù)字的高,8,位在前(低地址),低,8,位在后(高地址)。,例:,DW,“,AA,”,;,存入,41H,,,42H,。,DB,和,DW,定義的數(shù)表,數(shù)的個(gè)數(shù)不得超過,80,個(gè)。如數(shù)據(jù)的數(shù)目較多時(shí),可使用多個(gè)定義命令。,在,MCS-51,程序設(shè)計(jì)應(yīng)用中,常以,DB,來定義數(shù)據(jù),以,DW,來定義地址。,(,6,),DS,(,Define,Stonage,),定義存儲(chǔ)區(qū)命令,本命令用于從指定地址開始,保留指定數(shù)目的字節(jié)單
43、元作為存儲(chǔ)器,供程序運(yùn)行使用,匯編時(shí),對(duì)這些單元不賦值。,命令格式:,標(biāo)號(hào):,DS 16,位數(shù)表,例:,ORG 8100H,DS 08H,從,8100H,地址開始,保留,8,個(gè)連續(xù)的地址單元。,(,7,),BIT,位定義命令,本命令用于給字符名稱賦以位地址,命令格式:,字符名稱,BIT,位地址,其中,位地址,可以是絕對(duì)地址,也可以是符號(hào)地址(即位符號(hào)名稱),例:,AQ BIT P1.0,把,P1.0,的位地址賦給變量,AQ,,,在其后的編程中,,AQ,就可以作為位地址使用。,補(bǔ)充內(nèi)容:子程序結(jié)構(gòu),子程序結(jié)構(gòu)是一種非常重要的程序結(jié)構(gòu)。在一個(gè)程序中經(jīng)常遇到反復(fù)多次某程序段的情況,如果重復(fù)書寫這個(gè)程
44、序段,會(huì)使程序變得冗長(zhǎng)而雜亂。對(duì)此,可采用子程序結(jié)構(gòu),即把重復(fù)的程序段編寫為一個(gè)子程序,通過主程序調(diào)用而使用它。這樣不但減少了編程工作量,而且也縮短了程序的長(zhǎng)度。,調(diào)用和返回構(gòu)成了子程序調(diào)用的完整過程。為了實(shí)現(xiàn)這一過程,必須有子程序調(diào)用指令和返回指令。調(diào)用指令在主程序中使用,而返回指令則應(yīng)該是子程序的最后一條指令。執(zhí)行完這條指令后,程序返回主程序斷點(diǎn)處繼續(xù)執(zhí)行。,(,1,)子程序的編程原則,在實(shí)際的單片機(jī)應(yīng)用系統(tǒng)軟件設(shè)計(jì)中,為了程序結(jié)構(gòu)更加清晰,易于設(shè)計(jì),易于修改,增強(qiáng)程序可讀性,基本上都要使用子程序結(jié)構(gòu)。子程序作為一個(gè)具有獨(dú)立功能的程序段,編程時(shí)需遵循以下原則:,a,),子程序的第一條指令必
45、須有標(biāo)號(hào),明確子程序入口地址;,b,),以返回指令,RET,結(jié)束子程序;,c,),子程序說明部分;,子程序名稱:提供給主程序調(diào)用的名字,通常用符號(hào)或子程,序第一條語句的標(biāo)號(hào)來表示。,子程序功能:簡(jiǎn)要說明子程序能完成的主要功能。,子程序入口參數(shù):主程序需要向子程序提供的參數(shù)。,子程序出口參數(shù):子程序執(zhí)行完之后向主程序返回的參數(shù)。,子程序占用資源:子程序中使用了哪些存儲(chǔ)單元、寄存器等,子程序堆棧深度:子程序占用堆棧區(qū)的最大字節(jié)數(shù)。,子程序嵌套情況:子程序中繼續(xù)調(diào)用子程序的情況。,子程序的字節(jié)數(shù):子程序中所有指令字節(jié)數(shù)的總和。,子程序執(zhí)行時(shí)間:子程序中所有指令的機(jī)器周期數(shù)總和。,這些說明是寫給程序員
46、看的,供以后使用子程序時(shí)參考。,d,),較強(qiáng)的通用性和可浮動(dòng)性,盡可能避免使用具體的內(nèi)存單元和絕對(duì)轉(zhuǎn)移地址等。,e,),注意保護(hù)現(xiàn)場(chǎng)和恢復(fù)現(xiàn)場(chǎng)。,子程序在編制過程中經(jīng)常會(huì)用到一些通用單元,如工作寄存器、累加器、數(shù)據(jù)指針,DPTR,以及,PSW,等。而這些工作單元在調(diào)用,它的主程序中也會(huì)用到,為此,需要將子程序用到的這些通用編程資源加以保護(hù),稱為保護(hù)現(xiàn)場(chǎng)。在子程序執(zhí)行完后需恢復(fù)這些單元的內(nèi)容,稱為恢復(fù)現(xiàn)場(chǎng)。通常,保護(hù)和恢復(fù)現(xiàn)場(chǎng)是在子程序中利用堆棧操作實(shí)現(xiàn)的,在子程序的開始部分把子程序中要用到的編程資源都保護(hù)起來,在執(zhí)行返回指令之前恢復(fù)現(xiàn)場(chǎng),這是一種比較規(guī)范的方法。,另外,保護(hù)現(xiàn)場(chǎng)和恢復(fù)現(xiàn)場(chǎng)也可以
47、在主程序,中實(shí)現(xiàn)。在調(diào)用子程序前保護(hù)現(xiàn)場(chǎng),子程序返回后恢復(fù)現(xiàn)場(chǎng),這種方式比較靈活,可以根據(jù)當(dāng)時(shí)的需要確定要保護(hù)的內(nèi)容。,(,2,)參數(shù)傳遞的方法,主程序調(diào)用子程序時(shí),主程序和子程序之間存在著參數(shù)互相傳遞的問題。參數(shù)傳遞一般有以下幾種方法:,1),寄存器傳遞參數(shù),通過寄存器,A,傳遞入口參數(shù)和出口參數(shù)。,例:假設(shè),a,、,b,均小于,10,,計(jì)算,c=a,2,+b,2,,,其中,a,事先存在內(nèi)部,RAM,的,31H,單元,,b,事先存在,32H,單元,請(qǐng)把,c,存入,33H,單元。,SQR:y=x,2,子程序,ORG 0000H,;,主程序,MAIN,:,MOV SP,,,#3FH,;,設(shè)置棧底
48、,MOV A,,,31H,;,取數(shù),a,存放到,A,中作為入口參數(shù),LCALL SQR,;,MOV R1,,,A,;,出口參數(shù):,a,的平方值存放在,A,中,MOV A,,,32H,;,取數(shù),b,存放到,A,中作為入口參數(shù),LCALL SQR,;,ADD A,,,R1,;,MOV 33H,,,A,;,SJMP $,;,子程序名稱,:,SQR,功能:通過查表求出平方值,y=x,2,入口參數(shù):,x,存放在累加器,A,中,出口參數(shù):求得的平方值,y,存放在,A,中,占用資源:累加器,A,,,數(shù)據(jù)指針,DPTR,SQR,:,PUSH DPH,;,保護(hù)現(xiàn)場(chǎng),將主程序中,DPTR,的高,8,位入棧,PUS
49、H DPL,;,保護(hù)現(xiàn)場(chǎng),將主程序中,DPTR,的低,8,位入棧,MOV DPTR,,,#TABLE,;,在子程序中重新使用,DPTR,,,DPTR,表首地址,MOVC A,,,A+DPTR,;,查表,POP DPL,;,恢復(fù)現(xiàn)場(chǎng),將主程序中,DPTR,的低,8,位從堆棧中彈出,POP DPH,;,恢復(fù)現(xiàn)場(chǎng),將主程序中,DPTR,的高,8,位從堆棧中彈出,RET,TABLE: DB 0,,,1,,,4,,,9,,,16,,,25,,,36,,,49,,,64,,,81,END,2),利用堆棧傳遞參數(shù)*,ORG 0000H,;,主程序,MAIN,:,MOV SP,,,#3FH,;,設(shè)置棧底,PU
50、SH 31H,;,將數(shù),a,存放到堆棧中,作為入口參數(shù),LCALL SQR,;,POP ACC,;,MOV R1,,,A,;,出口參數(shù):,a,的平方值存放在,A,中,PUSH ACC,;,LCALL SQR,;,POP ACC,;,ADD A,,,R1,;,MOV 33H,,,A,;,SJMP $,;,子程序名稱:,SQR,功能:通過查表求出平方值,y=x,2,入口參數(shù):,x,存放在堆棧中,出口參數(shù):求得的平方值,y,存放在堆棧中,占用資源:累加器,A,,,數(shù)據(jù)指針,DPTR,SQR,:,MOV R0,,,SP,;,R0,作為參數(shù)指針,DEC R0,;,堆棧指針退回子程序調(diào)用前的地址,DEC
51、R0,;,XCH A,,,R0,;,保護(hù),ACC,,,取出參數(shù),MOV DPTR,,,#TABLE,;,DPTR,表首地址,MOVC A,,,A+DPTR,;,查表,XCH A,,,R0,;,查表結(jié)果放回堆棧中,RET,TABLE: DB 0,,,1,,,4,,,9,,,16,,,25,,,36,,,49,,,64,,,81,(,3,)子程序調(diào)用中應(yīng)注意的問題,由于子程序調(diào)用過程中,,CPU,自動(dòng)使用了堆棧,因此,容易出現(xiàn)以下幾種錯(cuò)誤:,a,),忘記給堆棧指針,SP,賦棧底初值,堆棧初始化位置與第,1,組工作寄存器重合,如果以不同的方式使用了同一個(gè)內(nèi)存區(qū)域,會(huì)導(dǎo)致程序亂套。,b,),程序中的,PUSH,和,POP,沒有配對(duì)使用,使,RET,指令執(zhí)行時(shí)不能彈出正確的斷點(diǎn)地址,造成返回錯(cuò)誤。,c,),堆棧設(shè)置太小,堆棧操作增長(zhǎng)太大,使棧區(qū)與其它內(nèi)存單元重合。,
- 溫馨提示:
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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 6和7的練習(xí)課
- 3【精品課件】第五單元第二十二課《短文兩篇》
- 1年級(jí)數(shù)字變變變
- 理想的風(fēng)箏 (2)(教育精品)
- 某國際集團(tuán)商務(wù)禮儀
- 認(rèn)識(shí)路線圖PPT課件
- 破陣子(晏殊)課件
- 投資者關(guān)系管理與網(wǎng)上路演課件
- 電氣元件認(rèn)識(shí)
- 湖心亭看雪公開課課件
- 部編人教初中語文名師公開課同課異構(gòu)創(chuàng)新獲獎(jiǎng)教學(xué)設(shè)計(jì)課件《就英法聯(lián)軍遠(yuǎn)征中國致巴特勒上尉的信》3
- 星羅棋布的海島
- 城市道路交通規(guī)劃
- 三角形內(nèi)角和李秀嫻
- 四川省戰(zhàn)略新興產(chǎn)業(yè)申報(bào)培訓(xùn)