由于單片機(jī)缺少大型的數(shù)據(jù)存儲器,所有ZJB將不使用效率低下的堆棧來傳遞參數(shù),而是在片內(nèi)存儲器的空閑區(qū)域開辟一段內(nèi)存作為過程的參數(shù)和局部變量存儲區(qū),編譯器會分析所有的過程調(diào)用并計(jì)算過程所定義的參數(shù)和局部變量所需的存儲空間,然后重用那些不相干存儲空間,這種策略使得ZJB的資源占用顯著所縮小,以節(jié)省單片機(jī)寶貴的內(nèi)存資源。當(dāng)然,您可以使用引用參數(shù)來引用已聲明的系統(tǒng)變量,諸如A、Rn等,這將不占參數(shù)區(qū)任何資源并加快參數(shù)的傳遞。如果您想返回大量的參數(shù),可返參數(shù)將提供這種途徑。
ZJB的過程具有重載特性,這樣您可以用同一個(gè)名稱來聲明那些意義相同,但參數(shù)類型不同或參數(shù)個(gè)數(shù)不同的過程,編譯器在調(diào)用時(shí)會用分析所有的同名過程,然后使用最合適的過程來執(zhí)行程序。過程的重載將有利代碼的細(xì)分并提高過程的執(zhí)行效率。
另外,ZJB還具有垃圾過程過濾功能,編譯器在編譯時(shí)會分析所有的過程調(diào)用,并標(biāo)記那些垃圾過程,被標(biāo)記的垃圾過程不分配任何資源,也不生成任何執(zhí)行代碼,所以,您在編程時(shí)可以積累一些常用的過程,并復(fù)制到您工作的程序中,因編譯器的垃圾過濾功能會過濾那些垃圾,所以即是有些多余的過程,也不會影響代碼的效率。
過程聲明
1:聲明過程名稱和所需的參數(shù),不要忘記參數(shù)要用括號括起來,最后再書寫一個(gè)冒號。
過程名稱(用逗號隔開的參數(shù)列表):
參數(shù)名加前綴可改變參數(shù)的種類,前綴的意義如下:
無前綴: 通用參數(shù),只能傳入數(shù)據(jù),不改變實(shí)參的值,相對較安全
*前綴: 引用參數(shù),傳入傳出數(shù)據(jù),形參不占用任何資源,不安全
/前綴: 可返參數(shù),傳入傳出數(shù)據(jù),不安全
2:定義過程所需的局部變量,過程中定義的變量為局部變量,當(dāng)過程結(jié)束時(shí)編譯器將釋放這些局部變量和參數(shù)變量,如果您想保持局部變量中的值不變,可使用 :::來聲明,這樣在:::后聲明的變量就成為靜態(tài)變量。假如聲明的局部變量和全局變量重名,那么在過程中將會使用局部變量,這一點(diǎn)需用戶牢記。
3:編寫代碼,以實(shí)現(xiàn)過程的功能。
4在過程結(jié)尾寫一個(gè)返回語句 / ,用于結(jié)束過程。
;示例:聲明一個(gè)無參xy過程
xy(): ;聲明語句
:: 用逗號隔開的過程級變量列表 ;定義過程使用的局部變量
::: 聲明靜態(tài)變量 ;靜態(tài)變量在過程結(jié)束時(shí)不釋放內(nèi)存空間
過程代碼 ;插入過程代碼,以實(shí)現(xiàn)過程的功能
/ ;返回語句,結(jié)束過程
;示例:聲明一個(gè)有參xyz過程
xyz(*A,x"1,/y"1): ;聲明語句
:: 用逗號隔開的過程級變量列表 ;定義過程使用的局部變量
過程代碼 ;插入過程代碼,以實(shí)現(xiàn)過程的功能
/ ;返回語句,結(jié)束過程
調(diào)用過程
過程調(diào)用的格式如下:過程名、參數(shù)列表必須用空格隔開,不能使用逗號,逗號為語句分隔符。
*過程名稱 用空格隔開的參數(shù)列表,
注:為了可靠,返回參數(shù)在調(diào)用時(shí)需加 / 前綴,以突出這是一個(gè)返回參數(shù)。
;示例:調(diào)用有參xy過程
*xyz 10 1000 /zz, ;調(diào)用xyz過程
;參數(shù)傳遞過程,A=10,x=1000,y=zz,調(diào)用xyz,zz=y
過程在調(diào)用時(shí)會把調(diào)用語句后的地址進(jìn)行壓棧操作,以便返回,壓棧操作先壓入低字節(jié)地址,后壓入高地址字節(jié),如果我們修改堆棧棧頂?shù)膬蓚(gè)字節(jié)數(shù)據(jù),那么過程將返回到我們需要的地方而不是返回到調(diào)用的斷點(diǎn)處,這在一些奇思異想的程序中廣為應(yīng)用,ZJB由于可對堆棧進(jìn)行操作,所有這些看起來不可思議的事情也變得非常輕松,在這之前,我們先熟悉堆棧操作的兩個(gè)語句:
壓棧語句: 變量++,
可操作: k,x, A, Rn, DP, @Ri, @@Ri, @@DP
功能:把變量內(nèi)容壓入堆棧,堆棧指針SP加1,壓棧后對象內(nèi)容不變。相當(dāng)于匯編中的 PUSH。
出棧語句: 變量--,
功能:把棧頂內(nèi)容彈出到變量,堆棧指針SP減1,變量中數(shù)據(jù)被替換,相當(dāng)于匯編中的 POP。
有了這些,我們就實(shí)現(xiàn)這種需求:
--Sp,--Sp ;移動棧頂指針以修改斷點(diǎn)地址
100H++ ;把100H地址壓入堆棧
/ ;返回到100H地址處執(zhí)行
Powered by 單片機(jī)教程網(wǎng)