正文 第三章 計算機中的程序(一)(2 / 3)

(1)傳送指令

執行一條傳送指令,可以使一個操作數由原來所在的寄存器或存儲單元,傳送至新的地方。也有的機器設置有數據塊傳送指令,一次可搬遷一個連續存放的數據塊^使用傳送指令可以從存儲器中讀取操作數,或者將操作數與運算結果存入存儲器。有的計算機將這類與存儲器打交道的傳送指令專稱為訪內指令,即訪問(讀或寫)內存儲器(即主存儲器)的指令。

(2)輸入輸出指令

這類指令用於控製輸入/輸出操作,可將信息由主機(CPU或主存)輸出到外圍設備,或將唐息由外圍設備輸入到主機中。所傳送的信息可能是數據,也可能是表示命令信息或狀態信息的數字化代碼。有些汁算機將輸入輸出指令歸並到傳送指令一類中,隻不過傳送的範圍不限於主機,還包括外圍設備罷了。

(3)算術邏輯運算指令

在低檔計算機中,常常隻設置:加、減、加、減,變反(求反碼)、變補、左移、右-多、邏輯與、邏輯或等指令(有關邏輯運算在第四章再作介紹)。功能強一些的機器,設置有乘、除、浮點運算等指令。前麵說過,複雜的運算可以轉換為簡單的基本運算,換句話說,可以用上述基本運算指令編成子程序段,用來實現複雜運算。例如求三角函數、指數運算、對數運算等。

(4)控製轉移類指令

如上所述,可以將一些常用的處理功能,編成公用的子程序,需要時直接調用有關子程序即可,免去重複編製程序。為此,計算機設置有調用子程序指令與返回指令,使用前者,可以由現在執行的程序序列暫時轉向某個子程序,將返回地址保存起來;子程序執行完畢,再通過執行返回指令,將返回地址取出,返回原來的程序序列,繼續往下執行。

在處理之前,程序員不一定防先知道處理的結果如何,所以編製程序時,常需要根據判斷結果決定下一步的操作,因此程序序列可能出現分支,有些情況需轉向別處執行相應的程序段。為此,計算機中設置有轉移指令,使程序執行順序轉向指定地方。通常包含無條件轉移指令與條件轉移指令,後者又可按轉移條件類型分成幾類。

在後續課程中,大家將會了解到程序組織中還有更複雜的控製管理方法,為此,可能還設置一些更複雜的控製類指令。

二、指令格式

一條指令的數字化形式就是一組二進製代碼,即一串由0或1表示的代碼(注意,它們隻是命令信息的數字化,不代表數值的大小,各位之間也沒有進位的關係)。一條指令通常包含兩大部分:操作碼段與操作數段,操作碼表明要求計算機執行什麼操作,例如加、減;在操作數段中大多是給出一些地址信息,它們是與本操作有關的操作數地址。

我們事先約定計算機能直接執行的基本功能有哪幾種,用一定位數的代碼去表示操作含意,為每一種操作分配一種代碼1所以這段指令代碼叫跋操作碼。

為了使計算機每次執行的運算不致太複雜,一般參與每次運算的操作數不超過二個。如果有多個操作數參與運算,就分成若幹次,執行若幹條指令來實現。由於常將一條指令的運算限製為不趙過兩個操作數的運算,所以在指令中應當指明:兩個操作數來自何處,運算結果送往何處,下一條指令(後繼指令)從何處取得。這樣,指令代碼既給出了本次操作有關的信息,又給出了程序序列如何繼續執行的後繼指令地址信息。相應的操作數段可能給出幾個地址,例如四個地址。為了使一條指令的代碼不致太長,即位數不太多,需要設法簡化地址的個數,如讓一些地址信息是隱含約定的,不在指令中直接出現。例如約定後繼指令所在存儲單元的地址碼,由程序計數器PU提供,指令就成為三地址指令,隻給出兩個操作數地址與一個存放結果地址。又如約定運算後保留一個操作數,另一個參與運算的操作數不再保留,原來存放該操作數的地方改用來存放運算結果,就成為二地址指令。規定操作數之一來自一個約定的寄存器,運算後結果也就放在這個寄存器中,則指令隻需給出一個操作數地址,這就成為一條單地址指令。

前麵講的是地址結構,此外需考慮導址方式問題。為了編程靈活方便,以及使指令中的地址信息代碼不太長,往往來用多種給出地址的方式。有直接給出的,有間接給出的,有經過某種變換後獲得地址碼的。這些尋找池址碼的方式稱為尋址方式,它是指令係統設計中的一個關鍵問題,也是我們學習掌握一種機器指令係統的關鍵所在。

三、指令代碼

指令信息的最終表示是一組數字代碼,它存放在主存儲器中,由程序計數器PC指令取出並加以執行。