彭民德:《電子計算60年》(8)DJS 21機的資料、指令和程式

彭民德發表於2016-06-21

在高階語言出現之前,用機者必須根據機器的資料規範組織資料。DJS 21機機器內部採用2進製表示數。每個42位的單元表示一個數,既可以用定點形式表示數,也可以用浮點形式表示數。採用定點表示時,其範圍是 2-34≤|x|<1 在機器中用低35位表示一個定點數,36至42位的高7位不用,置全0。低34位(0至33位)為數值部分,數值部分用該數的原碼錶示。35位是符號位,正數為0,負數為1。

enter image description here

定點數規定以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)。 浮點數在機器中以下列方式表示:

enter image description here

例如,a=1/2, 機器浮點表示為 a: 0000000010000000000000000000000000000000000 -a: 0000000110000000000000000000000000000000000 此時正a與負a的階碼部分為全0;數值部分是一樣的,都是高位為1,其它各個位都是0,二者唯一的區別只在數符位(從0開始編號為34位)不同,前者為0,後者為1。

在書寫與列印浮點數時,跟定點數格式一樣,只是階碼不為0。列印時,如果階為負,階符為1;階為正時,階符為0。對負數,數符為1;對正數,數符不打(為空)。

關於資料表示的一些規定,是讓計算機工作的基礎,程式設計之前必須搞清楚。指令系統也很繁瑣枯燥,但是隻能硬著頭皮去閱讀和掌握,循規蹈矩地跟著走,別無選擇。這是高階程式語言出現之前繞不過的坎。

121機採用一地址指令系統,每條指令都是在操作碼Q後只帶一個地址運算元D,有如下形式:

enter image description here

其中,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放結果。程式如下

enter image description here

上面的程式中,採用“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章 三代計算併發共享 電子工業出版社)

相關文章