彭民德:《電子計算60年》(8)DJS 21機的資料、指令和程式
在高階語言出現之前,用機者必須根據機器的資料規範組織資料。DJS 21機機器內部採用2進製表示數。每個42位的單元表示一個數,既可以用定點形式表示數,也可以用浮點形式表示數。採用定點表示時,其範圍是 2-34≤|x|<1 在機器中用低35位表示一個定點數,36至42位的高7位不用,置全0。低34位(0至33位)為數值部分,數值部分用該數的原碼錶示。35位是符號位,正數為0,負數為1。
定點數規定以16進位制形式書寫。例如:一個9位的16進位制數a, 可以是a=0.74 562 73。它對應機器表示時每4位表示一個16進位制數,最低只有兩位,可以認為還有兩個虛位,當末位x9<4時該兩個虛位為00,當末位在4與8之間時該兩個虛位寫01,大於等於8時則寫10。
初始十進位制數同樣按上述格式以原碼2-10進位制形式書寫,即逐個10進位制數位都用其對應的4個2進位制數表示。有現成的標準子程式可以引用進行數的2-10進位制的相互轉換。
我們看到在書寫121機的資料時,用了 、 這樣的數字,即在數字1至5的每個字的頭上頂著一條橫線,這是中國人的創造。在1上面那一橫代表10, 就是11, 就是13。用這樣的方法把10,11,12,13,14,15這6個數字分別濃縮為一個數字符號。 而不是像後來見到的西方機器上對應地用A、B、C、D、E、F來表示。因此,改革開放後引進西方新機器時,121機上寫的程式也無法直接用到新機器上。
121機的浮點數被表示成x=2p•q的形式,其中p為階碼,q為尾數,範圍是-64≤p≤63, 0≤|q|≤(1-2-34)。對x的表示範圍是 2-64≤|x|≤(1-2-34) ×263, 相當於十進位制的(0.542101086×10-19, 0.922337203×1019)。 浮點數在機器中以下列方式表示:
例如,a=1/2, 機器浮點表示為 a: 0000000010000000000000000000000000000000000 -a: 0000000110000000000000000000000000000000000 此時正a與負a的階碼部分為全0;數值部分是一樣的,都是高位為1,其它各個位都是0,二者唯一的區別只在數符位(從0開始編號為34位)不同,前者為0,後者為1。
在書寫與列印浮點數時,跟定點數格式一樣,只是階碼不為0。列印時,如果階為負,階符為1;階為正時,階符為0。對負數,數符為1;對正數,數符不打(為空)。
關於資料表示的一些規定,是讓計算機工作的基礎,程式設計之前必須搞清楚。指令系統也很繁瑣枯燥,但是隻能硬著頭皮去閱讀和掌握,循規蹈矩地跟著走,別無選擇。這是高階程式語言出現之前繞不過的坎。
121機採用一地址指令系統,每條指令都是在操作碼Q後只帶一個地址運算元D,有如下形式:
其中,6個二進位制位操作碼Q,可以區別26=64種不同操作,恰好能夠區分121機的59條指令。14位運算元可以表示214=16384個記憶體單元地址,跟121機記憶體容量相符。ε是變址特徵位,當它為0時,該條指令直接對記憶體地址D進行操作;為1時,所施加的操作要對“D+變址值”的一個新地址進行。每條指令的長度21位,本機每個單元42位,可以依序存放2條指令,分別稱作它的左指令和右指令。
採用單地址格式指令,可以簡化指令的儲存,加快指令的執行速度。設定變址指令,有利於程式控制,實現迴圈、轉移等功能。此外,121機還設立了3個暫存器,分別叫做暫存器Ⅰ、Ⅱ、Ⅲ,這也可以加速指令的執行。這些技術在後來的機器上也繼續沿用下來了。
DJS 21機的容量比第一代機有了較大擴充,所表示的數的範圍擴大了,約定用十六進位制數書寫指令(和資料)。6個二進位制位操作碼域對應十六進位制數的00到3 (請注意數字5上面還有一橫)。而且正好高兩位為0到3,低4位對應0到 (請注意數字5上面還有一橫)。下面根據操作碼粗略地看看121機的部分指令。
(1)01~05是傳送指令,用於在記憶體和暫存器間傳送資料和指令。
(2)07~0 ,18~1 (共17條,請注意數字5上面還有一橫)是算術運算指令,包括整乘、定點數的加減乘除、求餘數、浮點數的加減乘除、浮點數反減、浮點數積乘等。
(3)10、11、12、17邏輯運算指令,分別是邏輯乘、邏輯加、按位加和迴圈加。
(4)13~16比較指令,分別用於做全等比較,大於小於比較,以及比較暫存器Ⅰ與記憶體地址D的內容。
(5)20~26,34,35(共9條)為轉移指令,包括無條件轉移和幾種帶條件轉、開關轉、計算轉等。
(6)一組跟外設打交道的指令:2 電傳打字,2 光電輸入、2 列印(請注意數字3,4,5上面都頂著一橫)、33訪問磁鼓磁帶。
其它還包括送地址指令,移位指令,用於階碼操作的指令,將數規格化的指令,用於支援變址定址的指令等。因為121機是單使用者機,也有停機指令3 (請注意數字5上面還有一橫)。總體而言,121機的指令非常豐富。
下面是121機的一個迴圈程式例項。欲計算 S=∑ai, i=0,…,100 假定將a0,a1,…,a100依次存放在0300,0301,…,0364單元,單元s放結果。程式如下
上面的程式中,採用“k+n”形式書寫指令地址,而不是直接用某個記憶體單元地址,上機前適當時候再將k代真,具有靈活性。“K+4”等兩條全0指令是空指令,什麼操作都不做,這是留出新增指令用的空地方。K+7處是一條變址指令,指出控制迴圈用的終值為16進位制的64,即10進位制的100。
121機還提供了一組標準子程式,以支援程式設計。這些子程式包括sin(x),cos(x),tg(x),ctg(x),ln(x),ex,sin-1x,tg-1x。這些常用的數學函式,計算程式編寫精度高,執行速度快。每個子程式放在記憶體一塊固定區域,系統提供給程式設計人員一張《標準子程式單元分配表》。表中還給出了執行每個子程式所用到的工作單元。呼叫標準子程式時,只要把自變數x送到暫存器Ⅰ,接著用一條帶返指令034,轉到子程式入口。例如,sin(x)程式塊位於004 (請注意後一個數字4上面還有一橫),就可以用下列方式呼叫: 002(x) 將x的值傳至暫存器Ⅰ 034 004 轉向執行sin(x)的標準子程式 子程式執行完後會自動返回,指令034是帶返轉移,因此它返回時把求sin(x)的值放在暫存器Ⅰ中。
後來中科院數學所為國產DJS 21機設計開發了組合語言系統XHY。組合語言是一種助記符語言,同樣面向機器硬體,與機器指令一一對應。比如,加法操作用add,減法用sub表示,資料傳送指令為mov。有了文字形式的彙編指令,每條語句便有了明確的功能,給程式設計帶來了方便,組合語言程式的可讀性也大為提高了。
我國第二代電子計算機的主要用途是服務於兩彈一星的研製。接下去我將實際介紹在空空導彈研究設計中的計算機應用。
(與本文相關的更多內容,可參看彭民德《電子計算60年》第3章 三代計算併發共享 電子工業出版社)
相關文章
- 計算機網路(們)和 Internet (計算機網路的子類)計算機網路
- 計算機資料的表示計算機
- 如何用計算機電源竊取機密資料?計算機
- 美國第一臺電子計算機是由女程式設計師編寫的計算機程式設計師
- 計算機開放電子書2017歸檔計算機
- CSMBD21大資料與雲端計算大資料
- 適合時間序列資料的計算指令碼指令碼
- 量子計算機,開啟中國速度比人類歷史上第一臺電子管計算機和電晶體計算機執行速度快10—100倍計算機
- 強烈推薦|海量計算機程式設計相關電子書免費下載計算機程式設計
- 8-1 【Python0021】電子算盤Python
- 專訪丨摩杜雲彭一(Roby):雲端計算和大資料,讓城市更有溫度大資料
- 計算機指令集的相關概念計算機
- 指令集體系結構_計算機體系結構:指令程式碼計算機
- 不用電的計算機(二)計算機
- 電機扭矩計算
- 學做8位計算機計算機
- 雲端計算與21世紀的機器規則
- 電腦科學和Python程式設計導論(一) 計算機相關理論Python程式設計計算機
- 用python和計算機對話(計算機的語句)Python計算機
- 大學生電子設計競賽電源資料
- 圖解計算機中的資料表示形式圖解計算機
- 計算機網路中的資料交換計算機網路
- 電子計算機類比賽的“武林秘籍”-電賽光電設計大賽計算機設計大賽嵌入式晶片與系統設計競賽,你要的都在這裡!計算機晶片
- 論通訊子網在計算機網路中的地位和作用計算機網路
- 分享Flask電子書PDF及程式碼+資料Flask
- 程式設計師的計算機配置程式設計師計算機
- 高星⭐️!GitHub上發現一個計算機類電子書和學習資源下載寶藏庫Github計算機
- 計算機簡史第四章 電子時代之圖靈機計算機圖靈
- 簡單獲取電腦ip和計算機名計算機
- Flink大資料計算的機遇與挑戰大資料
- SQL 的後計算指令碼SQL指令碼
- 計算機程式的思維邏輯 (93) – 函式式資料處理 (下)計算機函式
- 自學程式設計和計算機科班出身的差別在哪?程式設計計算機
- 讀資料工程之道:設計和構建健壯的資料系統21資料獲取
- 計算機---Linux作業系統---C語言---C程式設計---微控制器---計算機網路---電腦保安---資訊保安Linux作業系統C語言C程式程式設計計算機網路
- 計算機原理:程式管理計算機
- 計算機網路 | 資料鏈路層計算機網路
- 計算機網路資料篇(一)——HTTP計算機網路HTTP
- 大資料計算生態之資料計算(二)大資料