汉语计算机系统,汉语编程单片机的计算机系统
本發明涉及一種漢語編程單片機的計算機系統,即漢語編程單片機、工控機是一種基于漢語計算機語言的單片機和工業控制機計算機系統。它適用于工業、農業、醫療、教育、環境、交通以及家庭等等行業的實時操作的應用。
單片機應用是近幾年來的在控制及儀表方面非常有前景的一門技術。但是它的應用難度非常大。其表現主要體現在應用過程中的軟件及其硬件的開發。一般開發過程見圖1。利用專用單片機為仿真器11,通用的個人計算機并配置交叉匯編軟件12,及通信裝置13完成目標代碼的傳送及跟蹤調試構成開發系統。開發過程的流程圖見圖2。首先將所需的應用程序在開發系統上進行仿真試驗21,然后再設計硬件電路22。在硬件樣機23電路安裝調試完成后還有軟件加載的過程24才能完成一個產品25的設計。傳統的單片機產品開發中設計者必須熟悉單片機的硬件結構以及單片機指令系統,最為重要的是設計者必須使用匯編語言開發應用程序,使得開發周期非常之長,難度之大簡直到了讓人難以忍受的地步。一般來講,一個人要達到能夠完成單片機開發的水平必須受到較為長期良好的訓練才行。所以傳統的設計方法嚴重地阻礙了單片機推廣與應用。
為了克服上述問題,本發明的目的是開發一種標準軟件和硬件的環境,這種環境的模式是用戶只需從市場上買到現成的單片機計算機系統,并能直接依托此環境進行直接編程,程度調試完成后設計這不需對單片機計算機系統部分進行重復設計,而是將編程所用的計算機直接應用在實際的產品中。根據上述的要求,就必須利用軟硬一體化的設計方法發明一種軟件運行效率極其高,硬件開銷又極其小的規范化的單片機計算機系統,在這個系統中用戶只需進行少量的編程工作以及外圍的硬件環境試驗就可以完成一個產品的設計。
基于上述要求,我對現有的軟件以及它們與硬件一體化設計的條件進行了大量的分析,認為利用傳統的方法來解決此問題答案幾乎為零,即使實現了較高軟件硬一體化設計過程,但將來到推廣應用中其編程難易程度仍然存是個問號。
漢語程序設計語言移植在單片機計算機系統上是一種極為優化的軟硬一體化設計方法。使得單片機計算機系統高級語言化成為實用,同時在實際的運行系統中幾乎不增加多于的硬件開銷。
漢語編程語言完全不同于英文程序設計語言,并不是將一般的程序設計語言中的關鍵字翻譯而得。使用漢語編寫計算機程,只要略知計算機的運行機制就可根據自己的需要進行文字創作,而這一過程也就是程序設計的過程。這樣既提高了編程效率,又給用戶帶來了極大的方便。
漢語計算機語言也能象漢語一樣,可以從大量的單字中去選擇一定的字來組詞,這些詞既能象傳統計算機語言中的語句一樣,完成各種各樣的操作,又可以象基本單字一樣去組成新的單詞,以便完成更復雜的操作。如此不斷地發展下去,其語句的語義越來越廣泛,最終接近于自然語言。程序越往后編就越能體現文字創作的藝術,因此程序員的語言水平決定著他的漢語程序設計水平。
利用單片機漢語編程系統進行產品的開發過程見圖3。軟件的開發只需將漢語編程單片機的計算機系統31通過通信口34與終端33(一般用個人機仿真終端)連接,然后直接使用漢語編程語言進行程序設計。同時在漢語編程單片機系統的I/O局部總線35端接上外設電路32就可以進行實際產品的電路試驗與測試。所以用漢語編程單片機開發產品的硬件設計過程如圖4所示。第一步41對所開發產品的接口進行電路試驗,第二步42對接口電路進行布線設計,第三步43將漢語編程單片及的計算機系統31與接口板32合二而一,第四步44形式產品。此過程不需對產品中的計算機系統部分進行設計。另外由于開發中使用的單片計算機系統與產品中無任何差別,同時高級語言解決了絕對保證軟件加載過程中數據區與程序區的分離,所以不存在硬件完成后,產品調試時所進行的軟件加載過程。
綜上所述,實現本發明的目的所采取的技術措施是:
設計包括鍵盤、監視器、磁盤接口管理的一種漢語編程單片機的計算機系統,包含:
a.單片機漢語編程系統具有一個漢語詞典單元,該漢語詞典單元完成系統的解釋、編譯及運行;詞典單元中含有操作系統應用的設備驅動、設備管理、文件管理、命令管理、解釋、編譯、編輯、跟蹤調試等各個層次;
b.該漢語詞典單元依據用戶輸入的文本合法輸入流(輸入流中應含有繁衍新詞的字符串如“編”和“。”等),能繁衍出漢語新詞的詞典標識單元,該詞典標識單元也可以在讀寫存儲體中繁衍出包括此功能的新的復合詞;
c.該系統采用軟-硬一體化設計,將一只可讀存儲體和一可讀寫存儲體的部分地址在硬件上連接重疊,兩個存儲體的數據的讀出與否通過總線仲裁器決定,該總線仲裁器利用系統的“固詞→”單元指針上的地址判定選擇兩個存儲體中的一個;
d.應用系統中可將可讀寫存儲體中的詞典單元部分轉移到只可讀存儲體中,同時總線仲裁器和“固詞→”可根據新的方式選擇讀寫兩個存儲體之一。
e.該系統利用3-8譯碼器連續譯出8個或64個I/O地址,達到I/O局部總線的外部擴充。
結合附圖對本發明的內容及其實施例詳細說明如下:
漢語編程單片機系統原理如圖5所示。
漢語單片機編程系統的硬件主要由一個帶串行通訊口的單片機(CPU)51,兩個存儲體,只可讀存儲器51(ROM)和可讀寫存儲器53(RAM),一個專用的總線通道仲裁器54,一個串行口34,一個與總線仲裁器控制的RAM地址平移裝置56,一個與擴充總線有關并由譯碼與驅動電路組成的局部I/O通道35。這些硬件的結構連同軟件有機地組合在一起,并能自動地根據系統的要求對同樣地址的不同存儲器進行訪問。
在此單片機系統的使用中,兩個存儲體與CPU組成內部總線,總線通道總裁器54將根據軟件和硬件的設計要求迫使CPU51動訪問其中一個存儲體并運行其程序。在只可讀存儲器52中固化有漢語編程計算機的基本詞典單元57,在系統編程過程中是使用自身所帶的串行口與終端連接(一般用PC機仿真,借用PC機的鍵盤監視器及磁盤等資源),開發中編寫的程序被裝入可讀寫存儲器53中,形成與漢語編程系統固有詞典單元兼容的添加詞典單元部分58,此部分的程序可以進行重復的修改。對于可讀寫存儲器的訪問不僅要根據總線通道仲裁器的控制還要根據RAM地址平移裝置56決定需要訪問的具體地址。待程序設計完成并調試無誤后可將詞典單元添加部分58與系統固有詞典單元57一起通過EPROM編程器一并寫入另一片EPROM然后將原來的ROM芯片替換,就形成了應用系統。
如果在應用中或現場調試中需要接終端跟蹤調試還可直接插上PC機進行現場調試,由于通訊的物理協議是設計在板外的這樣通訊的距離可以根據實際需要進行選擇。如具有RS-423協議的電纜直接通訊距離超過1000米。
發明內容:
適用于單片機漢語計算機語言設計規范(見附頁);
數摞操作:
數摞操作是漢語編程特有的表達方法和數據運算方式,將漢字字符集中的圖形符號引入數摞操作的表達,就產生對意識流和數據流自動分開的編程習慣,大大地增強了程序設計的意識效果。
在漢語單片機計算機系統的基本詞典單元中首先必須固化有數摞操作詞的標識以及它們執行的實體:
√??nn……nl?n0?n---nn-1?……nl?n0?nn
第n個數摞值,不計入n本身。它首先被移走,然后再移到數摞頂層。
將其余值下移入空位置{0…數摞總項數減1}。
例如:2√等價于∴
0√是零操作
∽??nl?n2---n1?n2?n1
復制數摞次項。
∴??n1?n2?n3---n2?n3?n1
旋轉數摞頂層三項內容。即將三項中最深數摞內容移到數摞頂層。
♀??n---
從數摞頂層刪去16位的數。
♂??n---n?n
復制數摞頂層16位數。
§??nn?nn-1……n1?n0?n---nn?nn-1……n1?n0?nn
16位的數nn是第n項數摞值的拷貝,不計入n本身{0…數摞總項數減1}。
例如:0??§?是等價于♂
1??§??是等價于∽
↑↓??n1?n2---n2?n1
漢語編程單片機在執行中將根據一種非常復雜的運行機制最終通過圖5的54總線通道仲裁器從只可讀存儲器(圖5的52)中找到這些標識,并當作程序執行或做其它的處理。雖然程序的執行是根據只可讀存儲體(圖5的52)中的內容完成的,但執行中所處理的數據都必須在可讀寫存儲體(圖5的56)中讀出或保存,所以總線仲裁器這時必須保證將與可讀寫存儲器體的通道打開。
漢語編程單片機系統的編程特點:
單片機漢語編程系統是以詞典為單元基礎,完成系統的解釋、編譯及運行。詞典中含有操作系統應有的設備驅動、設備管理、文件管理、命令管理、解釋、編譯、編輯等各個層次。對于一般程序的編譯是以“編”開頭句號“。”結束。隨著“編”后的除分割符空格之外的第一串字符串是此詞的名稱。每“編”一個新詞,其詞名就既可以作為命令、語句使用,同時它也是一個子程序、一個宏的標識。如“編”一個平方的程序可以用下列方法:
編平方♂??★。
這時詞典單元中就形成了一個新詞,這個詞可以直接以命令的方式執行:
3平方??顯9
同樣它還可以作為語句供其他的程序中使用:
編??四次方??平方??平方。
而執行:
3??四次方??顯81
在“四次方”程序實體中使用的只有自己所編“平方”詞而已。從此例可以說明,利用這樣的程序設計方法,程序設計者隨著程序設計的進行將越來越依賴于自己新繁衍出的那部分屬于自己的東西。程序員的語文水平最終是程序設計的關鍵所在。
所以漢語編程單片機的基本表達方式是本發明的內容之一如使用“編”開頭,句號“?!苯Y束等。在程序設計中每當使用“編”這個詞時,解釋器就會根據這個詞的詞名標識在圖5的52只可讀存儲器的詞典單元中找到“編”的屬性標識并繁衍出“編”后所跟賓語的新詞,直到遇到句號“?!苯Y束。這個新詞生成在可讀寫存儲器中。圖5的54總線通道仲裁器會根據漢語編程單片機計算機系統的運行機制自動地訪問圖5的53可讀寫存儲器,使得兩個存儲器好象一個一樣。
由于漢語編程單片機系統中固有詞典單元(圖5的57)中含有能夠繁衍新詞的詞典標識單元,以及它們的實體,它們可以在可讀寫存儲體(圖5的57)中繁衍出新詞,同時本系統會根據總線通道裁器訪問兩個存儲體之一的具體存儲區域。所以詞典單元中具有繁衍能力的基本詞是非常重要的。具體如下:
編??---
使用形式:
編……。
選擇檢索詞匯支“支→→”與編譯詞匯支“編譯支→”相一致。在“編譯支→”中生成的詞典單元項目,并設置編譯模式。在輸入流中的后隨的非立即執行詞匯的編譯地址被存入詞典單元,當以后調用詞時,非立即執行詞時才被執行。立即詞則是一遇到就被執行。對新生成的詞匯定義在成功處理相應的“。”或“。匯編”之后才能從詞典單元中查出。如果某一詞匯在“支→→”和“漢語根”詞匯支中檢索后還找不到,則按當前數基進行數字的轉換和編譯,如果轉換再失敗,則存在錯誤條件并異常終止編譯。
---?編,即,
---??(編譯時)
停止一個“編”定義的編譯,使這個“編”定義的可以在詞典單元中合法的查出,設置解釋狀態并編譯“終止”。
建詞頭??---
生成一個詞的標題,假設計數字節和文本名稱已被取入“可用地址”。使標題形式適于在“匯編”機器(代碼)定義中使用即采用屬性域地址中??含有實體域地址的格式。
建詞??---
定義詞匯使用形式:
建詞
生成的詞典單元項目。在生成之后,下一個可利用詞典單元單元就是的實體域中的第一個字節。隨后執行時,的實體域中的第一個字節的地址被留在數摞頂層?!敖ㄔ~”并不給的實體域分配空間。
動作??---??編,即,
---
定義一個詞在執行時運作,而該詞是由高級定義詞所生成的。其使用形式:
編……動作…。
隨后是:
…
其中是“建詞”或者執行“建詞”的任何用戶定義的詞匯?!皠幼鳌睒擞浂x詞匯定義部分的結束。并接著開始對那些以后用定義的詞在執行時的動作進行定義。當以后執行時,的實體域地址被放在數摞頂層,執行“動作”和“。”之間的詞匯序列。
為??n---
定義詞匯的使用形式:
n為??
它生成詞匯,在它的實體域中含有常數n。當以后執行時,它將數值n放在數摞的頂層。
雙數為??d---
定義詞匯的使用形式:
d為??
它生成詞匯,在它的實體域中含有常數d。當以后執行時,它將32位數值d放在數摞的頂層。
變量:??---
定義詞匯的使用形式:
變量:
執行變量時,它生成的定義并在它的實體域中分配兩個字節。
當以后執行時,實體域地址留在數摞的頂層。
雙變量:---
定義詞匯的使用形式:
變量:
執行變量時,它生成的定義并在它的實體域中分配四個字節。
當以后執行時,實體域地址留在數摞的頂層。
詞典單元規范:
漢語編程系統中詞的結構和運行的機制都有及其規范的形式,從而從系統的優化上具有很大的優勢,從而將高級語言成功地應用在單片機系統之上。
漢語編程系統中的詞都必須有其代碼部分的標識,此標識可以被系統的內部解釋/編譯器識別,以保證其被執行或編譯。另外漢語系統中的詞還應有一個詞名標識,以便于檢索,同時名稱標識中還含有標定代碼的標識,如命令的執行就是先找到詞名的匹配,然后根據詞名標識出的代碼標識執行此程序
由于有了這種漢語編程方案,使得單片機的編程可以象普通個人機那樣只要接上鍵盤、監視器和磁盤就可以編程,而程序設計完成后又可以直接將這個系統應用于現場。在現場如果需要調試也只需象開發時一樣接上鍵盤、監視器和磁盤,就如同開發時的編程一樣。一般情況下漢語編程單片機使用的鍵盤、監視器和磁盤是借用流行的PC機的鍵盤、磁盤監視器來實現的這樣就不必專門為之開發漢字系統,開發者習慣于哪一種錄入方法或漢字系統都是可以的。
單片機的開發有其特殊的要求,如果在巴掌大的電路板上實現如同PC機那樣的內存和外設功能,其困難是相當大的。如單片機的存儲器分為ROM和RAM兩種方式,在開發時必須使用RAM方式,以保證隨時將所編寫的程序寫入存儲器并運行此程序,而在程序設計完后又要將程序寫入ROM并將此段地址以ROM的方式運行,在開發系統上是將一些管座保留在電路板上,并以換芯片的辦法來更換ROM和RAM,又由于ROM和RAM地址各有要求,只好將存儲空間分割的為多個段頁以不同的管座來分配ROM和RAM地址。自然管座多電路板也將增大,成本也會因此而升高,而且頻繁地插撥芯片對設備也會有損害。所以此方法不宜用于目標機,從而造成了每開發一個產品將針對此產品的特點設計其計算機部分的電路。而且在設計過程中對于ROM和RAM的地址分配關系與實際的產品有多少距離還是設計者擔心的問題。
在漢語編程單片機系統中成功地解決了這個問題。首先是打破傳統的設計概念,不是用IC插座來直接更換ROM和RAM的地址,隨著硬件價格的下降,與其用多個芯片還不如用存儲量盡可能大的更少芯片,使其價格相當。然后在高級語言編程的實現中必須保證程序與數據絕對分開,也就是說漢語編程系統不需要用戶考慮應用程序是數據和程序的地址問題,在設計中可讀寫存儲體(圖5的53)中的程序在目標機中可以完全保證在只可讀存儲體(圖5的52)中運行。編程中系統自動將程序區的地址生成ROM后系統還根據“可用地址”空間可以從可讀寫存儲體的新地址中生成新的程序及詞。
解決這個問題的方法是基于軟硬一體化的設計。首先將兩個存儲體,只可讀存儲體(圖5的52)和可讀寫存儲體(圖5的53)部分地址在硬件連接上重疊,然而兩個存儲體的數據的讀出與否是要通過總線通道仲裁器決定。系統中有一個“固詞→”,總線仲裁器會根據在“固詞→”指針之上的地址為可讀寫存儲體反之為只可讀存儲體選擇通道。例如對于標準的漢語編程系統的詞典單元結構是以64K為基礎的這樣用一個27512ROM芯片就將全部存儲區覆蓋有余,而一至兩個62256芯片幾乎可以覆蓋編程所需的程序區和數據區。此辦法顯然規范了設計和縮小了電路板尺寸,綜合考慮成本幾乎與傳統的設計相當。
總線仲裁器除了根據上述的要求選擇通道以外還可根據系統的數據要求選擇通道。例如設一個變量后,在讀寫此變量時總線仲裁器就必須保證選擇可讀寫的存儲體(圖5的53)為此變量實際區域。
總線仲裁器可以是一個比較器。通常的方式如圖6所示,系統在存儲器訪問有效時(圖6的3)提供存儲器訪問地址(圖6的1)與“固詞→”(圖6的2)經比較器(圖6的4)比較,高于“固詞→”就選擇RAM(圖6的5),而低于“固詞→”就選擇ROM(圖6的6)。
該總線仲裁器還可以是一個比較器加地址平移器,如圖7所示,與圖6不同之處是比較器加地址平移器(圖7的4)可以將實際的RAM地址平移變換后(圖7的7)提供RAM,這樣就可以減少RAM與ROM的地址重疊范圍。
除了基本上按地址高低比較出ROM和RAM地址之外,另外對于具體的單片機芯片或具體的系統在譯碼上會根據具體要求有所不同。也可以是一個比較器加上一個地址平移器等。這種特殊的總線仲裁器實際非常簡單,雖然不同型號的單片機漢語編程系統存儲體譯碼器有所不同,但其基本形式都可以規范到統一的形式上來。
利用IBM-PC及兼容機仿真終端與本系統一個串行口連接完成終端的連接;
串行口的物理協議即與PC機串行口的電路接口可以是電纜的方式與PC機的RS232相連。引導一種普通的漢字系統,再啟動單片機漢語編程系統所提供的終端軟件直接利用PC機的鍵盤、監視器與磁盤等外設資源。
在單片漢語編程系統內部每執行一次“等鍵”操作就從串行口輸入一個字符,而每執行一次“印字符”操作就向串行口發送一個字符。對于字符串操作以及塊操作都是建立在此基礎之上的。利用漢語編程的設備化原理,只要有“印字符”和“等鍵”操作,就可以完成操作系統中的鍵盤管理、磁盤管理、以及字符串輸出管理。
印字符?---
將數摞上的數的低8位作為字符代碼,發送在終端上。如果是漢字內碼,那么要連續發送兩次才能將字型印出。
等鍵??---
操作前數摞上沒有數,操作后給數摞上留下8位的字符代碼。
如果是ASCII碼,其代碼只占7位,而如果是漢字內碼,那么字符將占8位。
例如對于HD64180單片機漢語編程系統的“等鍵”是用下列方法編寫:十六進制
匯編(印字符)
1¥:in0?a,(C4)
bit??l,?a
jr?z,?l¥
pop?hl
ld?a,?l
outO(C6),?a
匯編尾??匯編。
編?印字符??向印字符??讀?執行。
十進制
而“等鍵”卻與之相反:
十六進制
匯編(等鍵)
l¥:a,?(C4)
bit?7,?a
jr?z,?l¥
inO?a,?(C8)
ld?h,?O
ld?l,?a
push?hl
匯編尾??匯編。
編??等鍵??向等鍵??讀??執行。
十進制
其中設C6為串行口發送地址,C8為串行口接收地址,C4為狀態地址。
上述兩個程序在執行中首先是將終端發送來的串行信號通過CPU的串轉并寄存器接受到CPU中,然后將此信號作為一種字符的協議以數據的方式由總線仲裁器選擇送到可讀寫存儲體(圖5的f)指定的數摞占有的區域中。
從上例可以看出(等鍵)和(印字符)為漢語編程系統的基本設備啟動層,由于采用向量管理設備啟動,在必要時可以用其設備啟動詞就“向印字符”及“向等鍵”中的內容置換而采用新的設備啟動程序。這說明漢語系統中真正地具備了操作系統中必備的啟動和設備管理兩個層次。
有了上面的設備啟動及設備管理程序,在PC機一端就可以進行終端程序的設計,一般情況下,在PC機一端每收到一個字符及為單片機發送一個字符,則要進行顯示,而每接收到一個擊鍵動作,則應為單片機等待的鍵盤動作,所以就將此鍵值發送到單片機中。用PC機的漢語程序計算機語言設計的實際程序的簡化形式如下:
編??終端??環首
終端查詢
就??等鍵??發送到串口??然后
讀串口??-1??相等
就♀??否則??印字符??然后
回首。
稍微復雜一點的就可以將磁盤管理的塊操作功能加入實現磁盤的管理。
帶I/O譯碼的局部總線
由于漢語編程單片機系統提供了規范化存儲體設計,一般的應用都可以滿足,而單片機應用中的外設卻是五花八門。如何能將其簡化并有一個規范的形式是此項發明必須解決的問題。綜合計算機外設的應用形式,我們分析出對普通單片機所提供的端口要滿足常規的應用是不夠的,而常用總線提供的I/O擴充對于單片機系統也過于龐大和復雜。綜合起來設計一種符合普通應用的局部總線既可以簡化應用系統的設計又可以滿足通常應用的要求。
首先要分析出通常I/O所需的資源。一般的應用如果有8個以下的8位I/O地址就可以滿足一般的應用,所以提供八個連續的直接片選是非常有用的,但是對于許多外圍的芯片需要一個片選能覆蓋4~8個地址。對于這樣的要求,使用八個連續地址的直接片選就不使用了。如何將上述兩種分析加以綜合呢?
在巴掌大的電路板上不可能使用更多的譯碼芯片,使用一個3-8譯碼器和3個低3位地址可以譯出八個片選,如果使用3-8譯碼器對A3、A4、A5進行譯碼就得到了每個選通端選8個連續的地址,這樣對于一個3-8譯碼器可以譯出連續64個地址。但這時就必須向外設提供地址的低三位A0~A2。
綜合上述分析在就可以決定局部總線上應該提供的信號。八個片選端、3~8個地位地址、讀寫信號、以及輔助控制端如中斷、和中斷響應等。
圖8是譯碼電路的主要部分:
為了節省電路板空間,地址的選擇采用短路子,當A3~A5接有短路子,同時3-8譯碼器接A0~A2,這時譯碼器可根據短路子的位置選擇8個連續的地址,而A3~A5不接短路子時,3-8譯碼器的輸入接A3~A5這是譯碼器可根據剩下的A6~A7短路子選擇8個連續的地址段,每段地址占8個地址空間。另外局部總線的譯碼還主要體現在譯碼器只對I/O譯碼,所以此譯碼器只是在I/O申請有效時才有效。例如對于一個8255芯片可以直接按后一種連接,見圖9,選擇一個片選,接兩個地址線A0~A1。這個片選選擇的地址段就被8255占用,因為8255是占4個地址,在這個地址段中8255就重復的使用了兩個地址段,共占8個地址。
又如要將一個8位數據鎖存在74LS373內只需用8個數據線、一個地址片選、一個寫信號就可以直接構成輸出回路,使用中只需用一條漢語編程詞“n1?n2端口寫”就會根據這個詞的代碼標識找到實際的向端口寫數據的程序并從指定的片選端給出選通信號同時發出數據將數據寫入此鎖存器。同樣一個地址還可擔任數據的輸入,由圖10可以說明。
連接終端的通信口物理協議移出板外:
由于漢語編程單片機系統要求盡量小的面積,每加增加一個芯片都受到很大的限制,加上漢語編程單片機是以商品的方式出售,雖然都設有串行口,但具體采用何種物理協議也不一定。這樣只是在電路板上留出串行口插頭,而具體通訊的物理協議就移出板外以電纜的形式直接與PC相連接,也可以作為實際產品的物理層通訊協議,對于通信協議有特殊要求的產品可以簡單地設計電纜部分滿足其要求。圖11和圖12提供RS423及RS232兩種物理協議的電路。圖11的J1接RS423,J2接單片機的串口;圖12的J1,J2分別為電源的入與出,而J3接單片機串口,J4接RS232接口。
在實際應用中是以電纜的方式給用戶提供產品。這樣用戶可以選擇隨意的物理協議同時又不影響編程中的軟件效果。
在漢語編程單片機的計算機系統中漢語詞典單元的必備詞為:
√∽∴♀♂§↑↓非0♂讀暗摞>暗摞??暗摞>摞深
雙∽雙∴雙♀雙♂雙↑↓
數基??十進制??十六進制
+??-??★??/??/余商??求余數??求補??絕對值??取大??取小
★/★/余商??混★混/余商??無符/余商??無符混★雙/余商
1+1-2+2★2/
與??或??非??異或??(異或)??單轉雙
=<>0?0=?0>?無符
雙=雙
讀??寫??字節讀??字節寫??雙讀??雙寫??+寫字節空出??填數??填字節??字節傳送??字節逆傳??填充??填0??填空格??串相等
符轉數??串轉數??串變雙數??掃描??查詞??等輸入??計字
收字符
等鍵
雙顯右齊??雙顯??顯??顯右齊??無符顯??無符顯右齊
印字符??印字串??顯“??空格??個空格??空格符??回車
〖#〗#剩余??插顯??插負號
就??否則??然后??如和??對應就??而和??其余則??而后
+回環??循環???循環
回環??內環數??外環數
環首??回首??就出來??就繼續??重復
出循環??終止??復位解釋??全復位
編。建詞頭??建詞??動作??為??雙數為??變量:??雙變量:
(。匯編)。匯編??匯編??匯編。
釋放??詞匯中定義??漢語根
固詞→詞典→
>實體域??鏈域>名域??名域>鏈域??名稱>鏈域>>鏈域
(顯(編譯??強編譯??找??找編??立即詞??編解態??進編譯??進解釋
屏蔽??解屏蔽??執行
看內存??看詞
端口寫??端口讀
其具體說明見附頁
實施例:
經過數年的開發,目前本發明已有以HD64180、MCS98、MCS51為CPU的單片機漢語編程系統的系列產品。其主要產品形式有漢語編程STD工業控制機的系列產品、帶有局部總線的漢語編程單片機最小計算機系統以及現場直接應用的目標產品等等。
例如對于HD64180單片機漢語編程系統,使用HD64180單片機作為CPU(圖5中的c),使用單片機自帶的串行口(圖3的34)與終端(PC機)33相連,一個27512用于只可讀存儲體(圖5中的52),兩個62256用于可讀寫存儲體(圖5中的53),利用一個撥動開頭就在指定“固詞”的地址,通過一個與非門比較,CPU可選擇兩個存儲體中的一個。
本發明效果主要體現在軟件和硬件的設計效率上。對于硬件設計來講,單片機開發者已不需對單片機的硬件設計進行任何考慮,只需將所設計的應用系統和漢語編程單片計算機與外設接口部分簡單的連接弄清楚并一步的進行連接完成自己的硬件設計。而軟件設計則直接使用語言來編寫計算機的程序,對于一般受過普通中等教育的人在短時間內都可學會。與傳統的單片機開發方法相比,其開發效率可以提高二十倍。
使用用漢語編程單片機、工控機,對于一般的應用領域就可以直接利用現有的人才條件完成各種控制與儀表方面的計算機化設計,甚至與家庭自動化控制等等。而不需要具有單片機開發素質專業人才去完成??梢韵胂笥捎跐h語編程的出現計算機的應用將進一步的普及化。
附頁??漢語編程語言分類詞匯表
詞匯表中每一項定義的第一行是對數摞操作過程的符號表達。這些符號表明輸入參數被存入明摞的順序。三條橫線“---”表示執行點,留在數摞里的任何參數都被列出。在這種表示中,數摞頂層在“---”的右端。下面是數摞參數的縮寫和整個詞匯表中所用數的類型。這些縮寫可以有數后綴,以便區別相同類型的多重參數。
右邊的文字表明定義特征:
編??只可用于“編”定義中的詞
執??僅可執行詞。
即??立即執行詞
1??數摞操作
1.1單精度數摞操作
√???nn……??n1??n0?n---nn-1……n1?n0?nn
第n個數摞值,不計入n本身。它首先被移走,然后再移到數摞頂層。
將其余值下移入空位置{0…數摞總項數減1}。
例如:2√等價于∴
0√是零操作
∽??n1??n2---n1?n2?n1
復制數摞次項。
∴??n1?n2?n3---n2?n3?n1
旋轉數摞頂層三項內容。即將三項中最深數摞內容移到數摞頂層。
♀??n---
從數摞頂層刪去16位的數。
♂??n---n?n
復制數摞頂層16位數。
§??nn?nn-1……n1?n0?n---nn?nn-1……n1?n0?nn
16位的數nn是第n項數摞值的拷貝,不計入n本身{0…數摞總項數減1}。
例如:0??§??是等價于♂
1??§??是等價于∽
↑↓??n1??n2---n2??n1
交換數摞頂層兩項內容。
非0♂??n1---n1??(若為零)
n1---n1?n1??(若為非零)
僅當n1為非零時復制n1。它通常用于恰在詞匯“就”之前拷貝該值(以在控制結構內使用此數摞值),或者在詞匯“就出來”之前拷貝該數值(以把控制參數傳送到“環首…就出來”控制結構之外)。
讀音摞??---n
拷貝暗摞頂層的內容到明摞頂層。
>暗摞??n---
從數摞頂層移出一個數n,并放到暗摞中最高可訪問的位置。應和同一定義中的“暗摞>”平衡使用。參見“暗摞>”。
暗摞>??---n
將暗摞頂層的數值n移到明摞頂層。參見“>暗摞”和“讀暗摞”。
摞深?---n
測出在n被加到數摞以前,數摞中含有16位數值量的數目。例如以下的操使“顯??顯??顯”成為:
48摞深顯??顯??顯284★
1.2??雙精度數摞操作
雙∽??d1?d2---d1?d2?d1
復制數摞第三、第四項到頂層。
雙∴??d1?d2?d3---d2?d3?d1
按雙精度旋轉數摞頂層三項內容。即將三項中最深數摞內容移到數摞頂層。
雙♀??d---
從數摞頂層刪去兩層數,即一個32位的數。
雙♂??d---dd
復制數摞頂層兩層數,即一個雙精度數。
雙↑↓??d1?d2---d2?d1
按雙精度交換數摞頂層兩項內容。
2?數基
數基??---
是一個包括當前數基的任務變量,它用于輸入和輸出轉換。
二進制??---
設置輸入-輸出的數字變換基數為二。
十進制??---
設置輸入-輸出的數字變換基數為十。
十六進制??---
設置輸入-輸出的數字變換基數為十六。
八進制??---
設置輸入-輸出的數字變換基數為八。
3??算術運算
3.1單精度算術運算
+??n1?n2---n1+n2
n1,n2相加,其結果留在數摞的頂層。
-??n1?n2---n1-n2
n1減去n2,其結果留在數摞的頂層。
★??n1?n2---n3
留下n1,n2相乘的最低的有效16位,帶符號乘積在數摞頂層。
/??n1?n2---n1/n2
n1除以n2留下帶符號的16位下整商。
/余商??n1?n2---??
n1除以n2留下余數和帶符號的16位下整商。余數取除數符號或為零。
求余數??n1?n2---
n1除以n2留下余數。余數取n2的符號或為零。除法運算為下整除。
求補??n---n2
在數摞頂上留下n的二進制補碼。
絕對值??n---│n│
求出n的絕對值│u│,并留在數摞的頂層。如果n的值為-32768,則具有相同的數值。
取大??n1?n2---?
將n1或n2兩者之一的較大數留在數摞頂上。
取小??n1?n2---
將n1或n2兩者之一的較小數留在數摞頂上。
3.2??雙精度算術運算
雙+??d1?d2---d1+d2
雙精度數d1與雙精度數d2相加,得出的雙精度結果留在數摞的頂層。
雙-??d1?d2---d1-d2
雙精度數d1減去雙精度數d2,得出的雙精度結果留在數摞的頂層。
雙絕對值??d---│d│
求出雙精度數d的絕對值│d│,并留在數摞的頂上。
雙求補??d1---d2
將雙精度數d1轉換成二進制補碼的雙精度數。
3.3??混合運算
★/??n1?n2?n3---[n1★n2]/n3
n1,n2相乘產生32位帶符號的中間結果,再被n3除,得到下整商留在數摞的頂層。
★/余商??n1?n2?n3---
n1,n2相乘產生32位帶符號的中間結果,然后被n3除,得到16位的余數和16位的下整商。余數取除數的符號或者為零。如果除數為零或大于16位則存在錯誤。
混★??n1?n2---d
留下單精度有符號數n1,n2相乘,留下雙精度帶符號乘積在數摞頂。
混/余商??dn---
有符號雙精度數d除以有符號單精度數n得到余數和商留在數摞的頂。
無符/余商??ud?u---
數摞上第二、三層為一個雙精度無符號數ud,頂層為一個單精度無符號數u,ud除以u得出單精度無符號余數和商。如果分母u為零或溢出16位,則存在錯誤條件。
無符混★??u1?u2---ud
兩個無符號16位數u1,u2相乘,在數摞頂上留下無符號32位乘積ud。
雙/余商??dn---
僅由“#”使用的混合級除。在應用中避免使用。
3.4??快速運算
1+??n1---n2
快速運算。將n1加1的結果留在數摞頂層。
1-??n1---n2
快速運算。將n1減1的結果留在數摞頂層。
2+??n1---n2
快速運算。將n1加2的結果留在數摞頂層。
2-??n1---n2
快速運算。將n1減2的結果留在數摞頂層。
2★??n1---n2
快速運算。將n1乘2的結果留在數摞頂層。
2/??n1---n2
快速運算。將n1除2的結果留在數摞頂層。
4邏輯運算
與??n1?n2---
對數摞上的n1,n2按位相與,其結果留在數摞頂上。
或??n1?n2---
對數摞上的n1,n2按位相或,其結果留在數摞頂上。
非??n1---n2
對數摞頂上的n1按位取反,其結果留在數摞的頂上。
異或??n1?n2---n3
對數摞上的n1,n2按位相異或,其結果留在數摞頂上。
(異或)??---
由位組合格式,以對的內容補數。
單轉雙??n---d
擴展n的符號,通過位15拷貝到雙精度數d位32上,使一個單精度數擴展為雙精度數。d的最高位有效位部分及符號為在數摞頂層。
5??比較運算
5.1??單精度比較運算
=??n1?n2---
如果n1,n2相等,則留下“真”標志,否則留下“假”標志。
<>?n1?n2---
如果n1,n2不相等,則留下“真”標志,否則留下“假”標志。
如果n1小于n2相等,則留下“真”標志,否則留下“假”標志。
>?n1?n2---
如果n1大于n2相等,則留下“真”標志,否則留下“假”標志。
0
如果n小于零(負數),留下“真”標志;否則留下“假”標志。
0<>?n---
如果n不等于零,留下“真”標志;否則留下“假”標志。
0=??n---
如果n等于零,留下“真”標志;否則留下“假”標志。
0>?n---
如果n大于零,留下“真”標志;否則留下“假”標志。
無符
留下兩個16位數的無符號“小于”的邏輯值。
無符>?u1?u2---
留下兩個16位數的無符號“大于”的邏輯值。
雙=??d1?d2---
如果d1,d2相等,則留下“真”標志,否則留下“假”標志。
雙
如果d1小于d2,則留下“真”標志,否則留下“假”標志。
雙
如果d1小于d2,則留下“真”標志,否則留下“假”標志。
雙>??d1?d2---
如果d1大于d2,則留下“真”標志,否則留下“假”標志。
6??存儲器操作
讀??---n
留下中的16位的內容在數摞頂層。
寫??n---
將16位的n寫入。
字節讀??---
在數摞頂層留下中的8位內容,數摞頂層的高8位為零。
字節寫??n---
把n的最低有效8位寫入中去。高8位自然丟失。
雙??讀---d
從讀取最高有效位,從+2讀取最低有效16位,以雙精度數的格式放在數摞上。
雙寫??d---
將數摞上的雙精度數d的最高有效16位寫入中,最低有效16位寫入+2中。
+寫?n---
將n加到中的數值上。
字節空出?n---
在詞典單元中分配n個字節。下一個可用詞典單元的地址被相應的更新。
填數?n---
將16位的n存入詞典單元指針的當前位置即“可用地址”處,然后指針移兩個字節。
填字節?n---
將16位的n的最低有效8位存入詞典單元指針的當前位置即“可用地址”處,然后指針移一個字節。
7??訪問磁盤
-->--?即
繼續解釋下一個磁盤屏幕。
編輯??---
啟動全屏幕編輯器。
屏裝載??n---
保存“輸入流→”和“塊號”中的內容,它們定位當前輸入流。隨后通過置“輸入流→”為零和“塊號”為n,使輸入流更換到屏幕n的開始處。屏幕被解釋。如果屏幕n的解釋不被明確終止,而輸入流被耗盡,則解釋被終止;同時“輸入流→”及“塊號”的原來內容復原。如果n為零,則為錯誤。參見“輸入流→”、“塊號”、“-->“塊地址”。
屏。??---?即
停止屏幕的解釋。
塊地址??u---
是含有存儲塊u第一個字節的賦值緩沖區地址。如果占有該緩沖區的存儲塊不是塊u,和已被更新的,則在被賦值該緩沖區前,被轉移到磁盤存儲器中。如果存儲塊u已經不在存儲器中,則它從磁盤存儲器中轉入賦值的塊緩沖區中。存儲塊不可以被賦值給幾個緩沖區。如果u不是可以利用的存儲塊號,則存在錯誤條件。只有用“塊地址”和“地址”引用過的緩沖區的內容才是有效的。
標記?---
標記最新引用的塊為已更新的。當它的緩沖區空間被不同塊存儲占用時,或是當執行“存緩沖區”或“塊存”時該塊隨后被自動地轉移到磁盤。
存緩沖區??---
將全部更新的磁盤緩沖區寫入磁盤,接著清除全部緩沖區的賦值。只要用戶更改屏幕文件,或用用“退出”命令回突主系統時,這個功能就由漢語編程系統自動完成。
塊存?---
將“標記”過的全部緩沖區內容寫入磁盤。全部塊緩沖區不再被標記為修改過的,但繼續被賦值給它們各自的磁盤塊。
塊號??---
含有正在被解釋的磁盤塊號的變量。若“塊號”中的值為零,則輸入取自終端輸入緩沖區。
8??字符處理與轉換
8.1??字符處理
字節傳送??---
把從開始的指定傳送到開始的區中,的內容首先被傳送,逐步移向高存儲地址。如果字節為零,沒有內容被傳送。
字節逆傳??---
把從開始的指定傳送到開始的區中。傳送開始將+-1的地址移到+-1,連續地移到向低地址傳送。如果字節數為零,無任何移動。
填充??<8位數>---
從開始,以一定的<8位數>填入存儲區。如果字節為零,無動作。
填0???n---
從開始的n個存儲字節設置為零,如果n為零,沒有動作。
填空格??---
從存儲區開始,用給定的ASCII碼空白符填充。
串相等??---
快速字符串比較。如果字符串相同,留下“真”標志,否則留下“假”標志(零)。
8.2??字符轉換
符轉數??n1---n2(轉換成功)
n1---(轉換失敗)
將ASCII碼(使用數基n1)轉換為它的等效二進制數n2,并伴有“真”標志。如果轉換失敗,僅留下“假”標志。
串轉數??+d1---d2
+d2是將文本中+1處開始的字符轉換成數字結果。轉換中它使用基數值。把+d1的每一位乘以基數值后累加到+d1中。轉換繼續到遇上一個不能轉換的字符為止。不能轉換字符的地址為留在數摞。
串變雙數---d
使用當前數基,將在中具有先行字符計數和結尾ASCII空格符(20H)或零的字符串轉換為帶符號的雙精度數。如果文本中遇到小數點,則它的位置將在“小數位”中給出,但不發生其他影響。如果數字轉換不可能,將給出錯誤信息。參見“串轉數”。
掃描??---
通過非破壞性地接收來自輸入流中的字符,產生一個計數字符串,直到遇到定界。先行定界符被忽略。整個字符串作為字節序列存入從開始的存儲器中。第一字節含有字符的數目。字符串后面的ASCII空格符不包括在計數之中。如果找到定界符,“輸入流→”中的內容就被調整定界符后面字符處。“輸入流長度→”不被改變。
查詞??---n
是計數字符串的地址,該字符串是在當前檢索次序中尋找的詞匯名稱。如果詞匯找不到,為計數字符串,而n為零。如果詞匯被找到,是該詞的編譯地址(屬性域地址),并且當詞匯不是立即執行詞時置n為-1,當詞匯是立即執行詞(優先位置1)時,置n為1。
等輸入??---
從操作者終端輸入80個字符文本(或直到遇見)。文本放置以“終端址”為首地址的區域內。把“輸入流→”置零,“輸入流長度”等于接收的字符數。
計字??---n
留下由開始的信息文本的字節計數n和字節。設的第一個字節含有文本字節數,而實際文本是從第二字節開始的。典型的應用在“計字”之后跟隨詞匯“印字串”。
8.3??字符串管理指針
終端址??---
具有輸入流中的當前字符偏移量的地址。參見“掃描”。
收字→??---
留下通過最后執行“收字符”實際收到和存儲的字符計數變量的地址。
輸入流長度??---
具有文本輸出緩沖區中字節數的變量的地址。注意,它不是緩沖區的長度,而是緩沖區中的當前存在的輸入流的長度。當“塊號”中的值為零時,“輸入流長度”是通過詞匯“掃描”訪問的。在執行“收字符”后通過“等輸入”把它置之與“收字→”的內容相等。
收字符??---
從終端將字符移到開始的區域,直到遇見或者全部已被接收。不存入存儲器。一個“空”字符被附加到文
本串的末端。實際接收到的和被存入存取器中的全部字符將被顯示。
收到的字符計數(不包括)被留在“收字→”中。
9??輸入輸出及格式
9.1?字符輸入
終端查詢??---
對終端鍵盤進行測試,以啟動所有的鍵?!罢妗睒酥颈砻鲉?#xff0c;并保留此“真”標志于任何呼叫,直到調用詞匯“等鍵”才讀入字符。
等鍵??---
操作前數摞上沒有數,操作后給數摞上留下8位的字符的代碼。
如果是ASCII碼,其代碼只占7位,而如果是漢字內碼,那么字符將占8位。
9.2??數字輸出
雙顯右齊??dn---
按照當前數基,以每字段為n個字符寬和從右對齊的格式打印一個帶符號的雙精度數d,如果d為負數,ASCII先行負號“-”被顯示,如果顯示d所需的字符大于n,就存在格式上錯誤。
雙顯??d---
打印32位二進制補碼的帶符號雙精度數。如果d為負數,ASCII先行字符“-”就被顯示,結尾空白符總是被顯示出來的。設定高16位是在數摞的最高可存取處。按照當前的數基轉換。
顯??n---
如果n為負數,則由帶有先行負符號的自由字段格式顯示n的絕對值。尾隨空格符也被顯示。
顯右齊??n1?n2---
以字段n2和右對齊的格式打印數字n1。不打印后邊尾隨的空白符。
無符顯?u---
以自由字段的格式顯示無符號數u。并顯示一個結尾空白符。
無符顯右齊?u?n---
以n個字符寬的右邊對齊的字段格式顯示u,前面用空格符填充。
9.3?字符輸出
印字符??---
將數摞上的數的低8位作為字符代碼,發送在終端上。如果是漢字內碼,那么要連續發送兩次才能將字型印出。
印字串??---
數摞上給定一個字符串的和,執行時將這些字符串發送在當前的字符顯示設備上。
顯“??---?編,即,
---?(編譯時)
使用形式:
顯“”
隨后的執行將顯示但不包括結尾定界符“″”(后引導)。
符號“顯″”之后的空格符不是的一不部分。
空格??---
在當前的字符輸出設備上將ASCII空格字符輸出。
個空格??n---
在當前的字符輸出設備上將n個ASCII空格字符輸出。
空格符??---
為一個常數,它在數摞頂層留下“空格符”的ASCII碼值32。
回車??---
發送回車和換行到選定的輸出設備,復位“輸出流→”內容為零。
9.4?輸出格式化
〖??---
使用下列詞編排圖形字符的輸出格式:
〖##剩余??插顯??插負號〗
#??+d1---+d2
將數基值除+d1的余數轉換成ASCII字符,并增補到格式輸出字符串的較低存儲地址中。+d2是商并留作進一步處理。典型地用于“〖”和“〗”之間。
+d---
通過清除+d終止數字輸出轉換。留下適于打印(印字符)的文本地址和字符計數。
#剩余??+d1---00
通過“#”的使用,在文本輸出緩沖區產生ASCII文本,直到商為零。
如果數值初始為零,將加一個“0”到輸出字符串中。典型地用于“〖”和“〗”之間。
插顯??---
用于“〖”和“〗”之間,將ASCII碼或漢字字符插入到圖象數字輸出串中,例如在十六進制下“2E插顯”將放置一個小數點“.”。
插負號??n---
當n為負數時,在文本輸出緩沖區中被轉換的數字輸出串之前存放一個ASCII符號“-”。n被舍棄。
輸出流→??---
為具有發送字符增量的變量,用戶可以變更和檢查“輸出流→”中的內容以控制顯示格式。
數輸出→??---
在數字輸出轉換過程中,保存文本最后字符地址的變量。
小數位??---
以雙字長整數輸入的小數點右邊位數的位置的變量。它也被用于在用戶指定的數據輸出格式中保持小數點的位置在列方向一致。單字長數輸入的約定值為-1。
暫緩區??---
留下保存中??間處理過程數據的暫存區的低地址?!皶壕弲^”的地址或內容可以改變,如果下一個可用地址單元的地址被改變,則這些數據被舍棄。“暫緩區”的最小容量為84個字節。
10??控制結構
10.1?轉移
就??---?(運動時)?編,即,
---??(編譯時)
在“編”定義中出現的形式:
就真部分…然后
就??真部分…否則??假部分…然后
在運行時,就按照數摞上給出的執行,如果為“真”(非零),前繼續執行“真”的部分。如果為“假”(零),則跳到“否則”及其假??部分是可選擇的,如果沒有該部分,則“假”部分的執行就跳到“然后”之后。
否則??---?編,即,
---(編譯時)
“編”定義中出現形式:
就…否則…然后
運行時,在執行“就”的“真”部分之后執行“否則”,“否則”迫使執行跳過其他的“假”部分,并執行“然后”部分。它不影響數
然后??---?編,即,
---?(編譯時)
使用形式:
就…否則…然后
或
就…然后
“然后”是在“否則”之后繼續執行之點;或沒有“否則”時,則它是在“就”之后繼續執行之點。
如和??n---?編,即,
“編”定義中使用的形式:
如和??…對應就
而和??…對應就
…
其余則…
而后
注意:“…對應就…而和…對應就…”可以按需要多次重復。在編譯時,“如和”保存“暫摞→”的當前值,再把“暫摞→”位置為數摞指針的當前位置。這個內容由“而后”用于解釋前面“其余則”留在數摞的向前引用。n留作錯誤檢查?!叭绾汀睕]有運行效果,不編譯代碼到詞典單元中。
對應就??n1?n2---n1(如不相符)??編,即,
n2?n2---?(如相符)
---n
在運行時,“對應就”檢查n1和n2是否相等。如果相等,n1和n2都從數摞被清除,并繼續執行直到下一個“而后”的代碼。在編譯時,“對應就”安置比較及“0跳轉”,并為在的偏移保留空間。有“而和”或“其余則”用于分辨偏移,n用于錯誤檢查。
而和??---??編,即,
n1---n2??(編譯時)
運行時,如果在最后的“對應就”處相符,“而和”將控制轉移到下一個“而后”后面的代碼。如果在最后的“對應就”處不相等,“而和”即為將執行轉移到達的位置。在編譯時,“而和”編譯一個“跳轉”,保留轉移偏移量,并留下參數和n2?!岸汀边€通過計算從到“可用地址”的偏移量,并將其存入中,以決定在“對應就”處的未決定前向“0跳轉”。
其余則---?編,即,
n1---n2?(編譯時)
運行時,如果在最后的“對應就”處相符,“其余則”將控制轉移到“而后”后面的代碼。如果在最后的“對應就”處不相等,“其余則”即為將執行轉移到達的位置,并執行到“而后”之間的內容。在編譯時,“其余”編譯一個“跳轉”,保留轉移偏移量,并留下參數和n2?!捌溆鄤t”還通過計算從到“可用地址”的偏移量,和將其存入中,以決定在“對應就”處的未決定前向“0跳轉”。在“如和…而后”的結構中“其余則”是最后必須出現的結構,它表明在沒有匹配項時,程序應該執行“其余則”部分。
而后??n---?(若不相符)??編,即,
---?(如果相符)
…n---??(編譯時)
在運行時,如果輸入值不等于任何“如和”、“而和”值,“而后”就清除該輸入值?!岸蟆辈⒊蔀榍懊嫠小岸汀被颉捌溆鄤t”的前向轉移目標。在編譯時,“而后”編譯“♀”,然后直至“而和”和“其余則”留下的所有地址被解析完,才計算前向轉移的偏移。最后,還原由“如和”保留的“暫摞→”數值。
10.2??循環
10.2.1?固定循環
+回環??n---?(運行時)??編,即,
---??(編譯時)
在“編”與“?!敝惺褂?#xff0c;其形式為:
循環…?n+回環
n被加到循環指數之上,如果新的指數被增大到“限定值-1”和“限定值”的邊界。循環被終止而循環控制被舍棄。當循環被終止時,控制結構轉移到相應的“循環”之后。
循環??n1?n2---?(運行時)??編,即,
---??(編譯時)
使用形式:
循環…回環
或
循環…+回環
開始運行由控制結構終止的循環。循環指數從n2開始,并按限定值n1終止。循環至少執行一次。
?循環??---??(運行時)??編,即,
---??(編譯時)
使用形式:
?循環…回環
或
?循環…+回環
開始運行由控制結構終止的循環。如果限定值與循環指數一開始就相等,不執行循環而且控制立即轉到相應的“回環”或“+回環”之后。
回環??---(運行時)??編,即,
---?(編譯時)
在“編”與“?!敝惺褂?#xff0c;其形式為:
循環…回環
固定循環指數是逐一遞增。如果遞增的指數超出“限定值-1”和“限定值”的邊界。循環被終止而循環控制被舍棄。當循環被終止時,控制結構轉移到相應的“循環”之后。
內環數??---n?編,
用于“循環…回環”之中,以拷貝最內層循環指數到數摞頂層。參見
“外環數”。
外環數??---n?編,
拷貝下一層循環的循環指數到數摞頂層。僅可用于下列嵌套的“循環…回環”中:
循環…循環…外環數…回環…回環
10.2.2??不定循環
環首??---?(運行時)??編,即,
---??(編譯時)
在“編”與“?!敝惺褂?#xff0c;其形式為:
環首…就出來
環首…回首
環首…就繼續…重復
運行時,“環首”標記一個可以被重復執行序列的開始。它也作為相應的“就出來”或“重復”的返回點。當執行“就出來”時,如果數摞頂為“假”,就返回到“環首”;而對于“回首”和“重復”則總是回到“環首”。
回首??n---?(編譯時)??編,即,
在“編”與“?!敝惺褂?#xff0c;其形式為:
環首…回首
在運行時,“回首”迫使執行返回到相應的“環首”,對數摞無影響。典型的使用條件是執行“終止”、“全復位”或“復位解釋”來終止此循環。
就出來---?(運行時)??編,即,
---?(編譯時)
在“編”與“。”中使用,其形式為:
環首…就出來
在運行時,“就出來”控制條件轉移回到相應的“環首”。如果為“假”,執行返回到“環首”之后;如果為“真”,繼續向前執行。
就繼續---??(運行時)??編,即,
---?(編譯時)
在“編”與“?!敝惺褂?#xff0c;其形式為:
環首…就繼續(真部分)…重復
在運行時,“就繼續”依照數摞上的邏輯選擇條件執行。如果為真(非零),“就繼續”執行“真”部分,直到“重復”,隨后由“重復”轉移返回“環首”。如果為“假”執行到“重復”之后的存在的程序結構中。
重復??---?(運行時)??編,即,
---?(編譯時)
在“編”與“。”中使用,其形式為:
環首…就繼續…重復
運行時“重復”無條件轉移回到相應的“環首”之后。
10.3?程序的退出
出循環??---
執行轉移至下一個“回環”或“+回環”外的代碼。循環被終止而循環參數被舍棄。僅可使用形式:
循環…出循環…回環
或:
循環…出循環…+回環
在上面的例子中,“循環”可以用于“?循環”取代,“出循環可以用于嵌套在固定循環中的其它控制結構中,在一個固定循環中可以有幾個“出循環”。
終止??---
終止執行當前“編”定義的詞??刂品祷氐较乱粋€外層“編”定義,
不可用在固定循環中。
復位解釋??---
清除暗摞,設置解釋狀態,接受從當前輸入設備來的新輸入,并開始文本的解釋。
全復位??---
清除數摞,并把控制轉移到“復位解釋”。
11??詞定義
編??---
使用形式:
編……。
選擇檢索詞匯支“支→→”與編譯詞匯支“編譯支→”相一致。在“編譯支→”中生成的詞典單元項目,并設置編譯模式。在輸入流中的后隨的非立即執行詞匯的編譯地址被存入詞典單元,當以后調用詞時,非立即執行詞時才被執行。立即詞則是一遇到就被執行。對新生成的詞匯定義在成功處理相應的“?!被颉?。匯編”之后才能從詞典單元中查出。如果某一詞匯在“支→→”和“漢語根”詞匯支中檢索后還找不到,則按當前數基進行數字的轉換和編譯,如果轉換再失敗,則存在錯誤條件并異常終止編譯。
。??---?編,即,
---?(編譯時)
停止一個“編”定義的編譯,使這個“編”定義的可以在詞典單元中合法的查出,設置解釋狀態并編譯“終止”。
建詞頭??---
定義詞匯使用形式:
建詞
生成的詞典單元項目。在生成之后,下一個可利用詞典單元就是的實體域中的第一個字節。隨后執行時,的實體域中的第一個字節的地址被留在數摞頂層?!敖ㄔ~”并不給的實體域分配空間。
動作??---??編,即,
---
定義一個詞在執行時動作,而該詞是由高級定義詞所生成的。其使用形式:
編……動作…。
隨后是:
其中是“建詞”或者執行“建詞”的任何用戶定義的詞匯。“動作”標記定義詞匯定義部分的結束。并接著開始對那些以后用定義的詞在執行時的動作進行定義。當以后執行時,的實體域地址被放在數摞頂層,執行“動作”和“。”之間的詞匯序列。
為??n---
定義詞匯的使用形式:
n為??
它生成詞匯,在它的實體域中含有常數n。當以后執行時,它將數值n放在數摞的頂層。
雙數為?d---
定義詞匯的使用形式:
d為
它生成詞匯,在它的實體域中含有常數d。當以后執行時,它將32位數值d放在數摞的頂層。
變量:??---
定義詞匯的使用形式:
變量:
執行變量時,它生成的定義并在它的實體域中分配兩個字節。
當以后執行時,實體域地址留在數摞的頂層。
雙變量:?---
定義詞匯的使用形式:
變量:
執行變量時,它生成的定義并在它的實體域中分配四個字節。
當以后執行時,實體域地址留在數摞的頂層。
12??匯編語言
(。匯編)---
由“。匯編”編譯的運行過程,它把最近定義的詞匯的屬性域地址重寫入指向隨后的機器代碼序列。參見“。匯編”。
。匯編??---?編,即,
使用形式:
編…建詞…。匯編…匯編。
停止編譯,終止對的定義而執行匯編程序部分。當用以下形式:
為定義新詞匯而執行,的執行地址將包括中“。匯編”后的機器代碼序列的地址。任何的執行都將使此代碼序列被執行。參見“匯編”和“動作”。
匯編?---
定義詞的使用形式:
匯編……匯編。
為生成一個詞頭,它是由后面的匯編語言詞序列定義的。如此定義的詞稱為代碼定義。
匯編。??---
終止一個代碼定義,并允許在詞典單元中找到對應代碼定義的。
13??詞典單元管理與解釋編譯
13.1??詞典單元管理
13.1.1??詞典單元管理
釋放??---
執行形式:
釋放
如果在編譯詞匯支中找到,從詞典單元中刪除詞,和在這個后面定義所有詞匯,不管它們的詞匯支。如果沒找到,顯示錯誤。
詞匯中定義---
使用形式:
詞匯中定義
把編譯詞匯支改為與當前檢索順序中第一個詞匯支相同。
漢語根??---??即,
主詞匯支的名稱。執行“漢語根”時它成為檢索順序中的第一個詞匯支?!皾h語根”是初始編譯詞匯支,并且是檢索順序中的第一個詞匯支。新定義成為“漢語根”詞匯支的一部分,直到不同的編譯詞匯支被建立。
13.1.2??詞典單元指針
暫摞→??---
它是暫時存放數摞指針位置的用戶變量。用于檢查編譯錯誤。
編譯支→??---
它把指定編譯詞匯支的用戶變量的地址留在數摞頂層。參見“詞匯中定義”。
支→→??---
含有指向詞匯支指針的變量,這個詞匯支是當前檢索順序中的第一個詞匯支。
固詞→??---
具有的用戶變量,在該地址以下的詞典單元內容不能用“釋放”刪除。若要去掉該地址以下的內容,用戶可以更改“固詞→”中的內容。
詞典→??---
典單元指針變量,它包含詞典單元中下一個自由存儲地址。其數值也可以由“可用地址”讀出并可以用“字節空出”更改。
13.1.3??地址域變換
>實體域??---
將屬性域地址(編譯地址)轉換為相應的實體域地址。
鏈域>名域??---
將連接域地址轉換為相應的名稱域地址。
名域>鏈域??---
將名稱域地址轉換為相應的連接域地址。
名稱>??---
將名稱域地址轉換為相應的屬性域地址。
鏈域>??---
將連接域地址轉換為相應的屬性域地址。
>鏈域??---
將屬性域地址轉換為相應的連接域地址。
13.2?解釋編譯及控制
13.2.1??詞的解釋編譯
(??---?即,
使用形式:()
以右括號“)定界符中的“”,被認為是注釋。對注釋不進行任何處理。左括號“(”后面的空格符不是“”的一部分。在解釋或編譯時可以隨意地使用“(”。“”中的字符數是從零直到輸入流中結束括號前所保留的字符數目。參見“顯(”。
顯(??---
---(編譯時)
使用形式:
顯()
在選定的當前輸出設備上顯示字符“”,但不包括右括號結尾定界符“)”。符號“顯(”之后的空格符不是“”的一部分。參見“顯″”。
編譯??---?編,
當執行含有“編譯”的詞匯時,在“編譯”之后的詞匯的執行地址被拷貝(編譯)到詞典單元的當前可用地址處。它允許在對執行地址(這是解釋程序所作的)簡單編譯中,加入對具體編譯狀態的處理。一般用于立即詞執行的詞匯。參見“如和”語句原碼的實例。
強編譯??---?編,即,
---?(編譯時)
“編”定義中使用的形式:
編…強編譯…。
其中已預先被標記為“立即詞”。“強編譯”將迫使對立即詞的編譯,否則立即詞將在編譯過程中執行。
找?---
使用形式:??找
留下詞典單元中該詞匯的屬性域地址。如果在當前的檢索順序中沒有找到就給出錯誤提示。
找編??---(運行時)??編,即,
---?(編譯時)
使用形式:
找編
的編譯地址作為數值被編譯。當后來執行定義時,把該留在數摞的頂層。如果在當前的搜索順序中未找到,則發出錯誤信息。
立即詞??---
標記最近作出的定義詞為立即詞。以便在編譯時一旦遇到這個定義就立即執行經,而不進行編譯,即在這個最新詞的名稱域地址單元中疫立了優選位。此方法允許定義處理非常編譯情況,而不是將它們建成基本可編譯詞。用戶可半“強編譯”放在被“立即詞”說明過的詞之前以迫使它們被編譯。
編解態??---
具有編譯或解釋狀態的變量。非零表示編譯,零表示解釋。
進編譯?---?編,即,
設置編譯狀態。隨后編譯來自輸入流的文本。參見“數編譯”、“進解釋”。
進解釋??---?即,
---?(編譯時)
設置解釋狀態。參見“數編譯”、“進編譯”。
屏蔽??---
在此后定義中,用于設置定義的名稱域中的“屏蔽位”。它防止在詞典單元檢索中取出不完整的定義,直到編譯完成無誤為之。
解屏蔽??---
使詞典單元檢索中可以訪問最近定義詞匯。一般在執行“。”時將這個詞賦予合法性。
執行??---
將數摞頂層的作為一個詞的屬性域地址去執行這個詞。屬性域地址也可以稱為編譯地址。
匹配否???n1?n2---
如果n1不等于n2,發出錯誤信息。該信息表明編譯條件不匹配。
全復位″“---?編,即,
---?(編譯時)
使用形式:
全復位″″
當以后執行時,如果為“真”,由后引導??“″”結尾符定界的將被顯示,接著執行“全復位”的異常終止順序。如果標志為“假”,除去而繼續向前執行?!叭珡臀弧濉敝蟮目崭穹皇堑囊徊糠?。
13.2.2??數的解釋編譯
立即數??---n?編
“立即數”是由數編譯的,其后隨有16位的數??值。在運行時,“立即數”將該16位數值留在數摞要面層。
數編譯??---n?編,即
n---(編譯時)
“編”定義中典型使用形式:
進解釋16b進編譯數編譯
編譯一個系統相關的操作,以便后來執行“編”定義的詞時半n留在數摞頂層。
雙數編譯??---d?編,即
d---??(編譯時)
在編譯“立即雙數”時,將留在數摞中的整體上雙精度整數編譯成“立即雙數”的參數。當以后執行時將雙精度數d留在數摞頂層。
編譯數?d---
將數摞頂層的一個雙精度數?d以立即數的形式編譯到當前可用的詞典童蠅去。如果“小數位”中的值為-1就以單精度的形式編譯,否則就以雙精度的形式編譯。編譯單精度數占用了兩個四個字節,前兩個字節為詞“立即數”的屬性地址,后一個字節為單精度數的二進制代碼。雙精度數的編譯占據六個字節,前兩個字節為“立即雙數”的屬性域地址,后四個字節為雙精度數的二進制代碼。
變立即數?d---N(“小數位”中的值為-1)
d---d??(“小數位”中的值為非-1)
將數摞頂層的雙精度數d按“小數位”中的單雙精度標志分別處理為單精度數n或雙精度數d放在數摞頂層。
立即雙數??---d?編,即
是“雙數編譯”的運行例行程序,它將一個32位數值放在數摞頂層。
ASCII??---
---?(編譯時)
使用形式:
ASCII?
其中的定界符是空格符。在解釋中,的ASCII碼值留在數摞頂層,其高8位為零。在編譯中,是作為文字被編譯的,
所以后來執行“編”定義時,的ASCII碼值被留在數摞頂層。
在詞典單元中編譯“立即雙數”的后四個字節是數值d。
14??系統管理
冷啟動??---
熱啟動??---
作為調整詞典單元指針到最低地址和通過“全復位”重新啟動的過程??梢詮慕K端調用,以除去應用程序和重新啟動。
摞出界???---
如果數摞超出了限定的范圍,發出錯誤信息。
類錯???n?---
如果為“真”,發出n類錯誤信息。
摞→寫??---
摞→讀?---
將數摞頂層地址送回到數摞頂層的與計算機相關的過程,所說的數摞頂層的地址是指在執行“摞→讀”之前的地址,例:
12摞→讀??讀??顯??顯??顯??將??打印??221
暗摞→寫?
按數摞值初始化暗摞指針。
暗摞→讀??---
將暗摞指針寄存器當前值留在明數摞頂層。
暗摞底??---
含有“暗摞指針”初始值的任務變量。參見“暗摞→寫”。
明摞底??---
含有“數摞指針”初始值的任務變量。參見“摞→寫”。
15??工具及顯示
看內存?---
以十六進制和ASCII碼顯示存儲到+中的內容。
看詞??---
列出當前檢索順序中第一個詞匯中的全部定義名稱。
16??端口操作
端口寫??X---
輸出參數X到的端口,其輸出可能是八位或十六位,要根據具體的機器和版本而定。
端口讀??---X
從輸入輸出口讀入一個參數X到數摞頂層。其讀入的數值可能是八位或十六位要根據具體機器和版本而定。
總結
以上是生活随笔為你收集整理的汉语计算机系统,汉语编程单片机的计算机系统的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 广告主做广告投放前,这些物料一定要准备好
- 下一篇: IC人物志-硅谷之父弗雷德里克·特曼(F