认识计算机中的简单指令集
????????我們現在有了一個新的寄存器,叫做指令寄存器。它包含一個字節,不同的內容表示控制部分的不同操作模式。也被稱為指令代碼。指令寄存器是一個字節,因此可能有多達256條不同的指令。所有指令都涉及在總線上移動字節。指令將導致字節進出RAM,進出寄存器,有時通過ALU。下面我們來認識一下計算機中簡單的幾種指令集吧。
算術邏輯指令
????????第一類指令時使用ALU的類型,像前面提到的ADD,NOT,SHL等8種類型,有的類型有兩個字節的輸入,有的類型有一個字節輸出。所以ALU這類指令將選擇一個ALU操作和兩個寄存器。
????????指令代碼有8個bit,當第一個bit是1時候,表示這是一條ALU指令,然后接下來三bit告訴選擇ALU的哪個操作,接著兩bit是選擇的一個寄存器,在接著兩bit是選擇的另外一個寄存器。
????????因此如圖,ALU指令(1)將(000)寄存器2(10)和寄存器3(11)相加,并將答案放入寄存器3,將是:1000 1011。布線如下:
????????上面是算術邏輯指令的代碼,為了更好的記著這些CPU指令的含義,有這樣一個速記發明,它被稱為計算機語言,ALU指令產生的新語言的前八個單詞是如下,當一個人想要編寫一個計算機程序時,他可以直接在指令代碼中編寫,或者使用計算機語言。當然,如果你用計算機語言編寫一個程序,它必須被翻譯成實際的指令代碼,然后才能放入RAM并執行。
加載與存儲指令
????????加載和存儲指令非常簡單。它們在RAM和寄存器之間移動一個字節。
????????前面ALU指令是IR第一位打開,還有八種類型不是ALU指令,第一位關閉時候進入這八種類型指令,并使用IR的接下來三位來準確地告訴我們我們有哪種類型的命令。
????????本節介紹使用解碼器前兩個輸出的指令,即IR以0000或0001開頭時出現的指令。第一條指令將一個字節從RAM移動到寄存器,這稱為“加載”指令。另一個則相反,它將一個字節從寄存器移動到RAM,稱為“存儲”指令。
????????Load指令的指令代碼為0000,Store指令的指令碼為0001。在這兩種情況下,剩余的四位都指定了兩個寄存器,就像ALU指令一樣,但在這種情況下,一個寄存器將用于選擇RAM中的一個位置,另一個寄存器則將從該RAM位置加載或存儲到該RAM位置。
????????對于這兩個指令,步驟4是相同的。其中一個寄存器由IR位4和5選擇,并在總線上啟用。然后將總線設置為MAR,從而在RAM中選擇一個地址。
????????在步驟5中,IR位6和7選擇另一個CPU寄存器。對于Load指令,RAM被啟用到總線上,總線被設置到所選寄存器中。對于存儲指令,所選寄存器被啟用到總線上,總線被設置到RAM中。這些指令中的每一個只需要兩個步驟就可以完成,第6步什么不做。
數據指令
????????數據指令所做的只是將一個字節從RAM加載到寄存器中,就像上面的load指令一樣。但它的不同之處在于,它需要指令在RAM中的哪個位置獲得該字節。
????????在Data指令中,數據來自下一條指令的位置。所以你可以考慮這個指令實際上有兩個字節!第一個字節是指令,下一個字節是一些將被放入寄存器的數據。這個數據很容易找到,因為當我們在IR中有指令時,IAR已經更新了,所以它指向這個字節。
????????這是Data指令的指令代碼。第0位至第3位為0010位。第4位和第5位未使用。第6位和第7位選擇將加載第二字節數據的寄存器。
????????這條指令需要做的就是,在步驟4中,將IAR發送到MAR,在步驟5中,將RAM發送到所需的CPU寄存器。然而,還有一件事需要發生。由于指令的第二個字節只是可以是任何數據的數據,所以我們不希望將第二個字符作為指令執行。我們需要第二次向IAR添加1,以便它跳過這個字節并指向下一條指令。我們將以同樣的方式在步驟1和3中執行。在步驟4中,當我們將IAR發送到MAR時,我們將利用ALU正在計算IAR加上一些東西的事實,同時我們將打開“總線1”,并將答案設置為ACC。步驟5仍然將數據移動到寄存器,在步驟6中,我們可以將ACC移動到IAR。
????????這是數據指令形成的計算機語言:
總結
以上是生活随笔為你收集整理的认识计算机中的简单指令集的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 网易狂飙式增长,为什么说好戏还在后头?
- 下一篇: 100页PPT:从特斯拉看汽车智能化趋势