回覆列表
  • 1 # 使用者5083996514885

    西門子CPU暫存器的使用介紹

      1.引言


      CPU暫存器狀態字的各位給出了有關指令狀態或結果的資訊以及所出現的錯誤,我們可以將二進位制邏輯操作狀態位訊號狀態直接整合到程式中,以控制程式執行的流程。


      2.狀態字暫存器


      先簡單介紹一下CPU中狀態字。


      ● 首次檢查位:狀態字的0位稱作首次檢查位,如果/FC 位的訊號狀態為“0”,則表示伴隨著下一條邏輯指令,程式中將開始一個新的邏輯串。FC前面的斜槓表示對FC取反。


      ● 邏輯運算結果:狀態字的第1位為RLO 位(RLO= “邏輯運算結果”),在二進位制邏輯運算中用作暫時儲存位。比如,一串邏輯指令中的某個指令檢查觸點的訊號狀態,並根據布林邏輯運算規則將檢查的結果(狀態位)與RLO位進行邏輯閘運算,然後邏輯運算結果又存在RLO位中。


      ● 狀態位:狀態位(第2位)用以儲存被定址位的值。狀態位總是向掃描指令(A,AN,O,…)或寫指令(=,S,R,)顯示定址位的狀態(對於寫指令,儲存的定址位狀態是本條寫指令執行後的該定址位的狀態)。


      ● OR位:在用指令OR執行或邏輯操作之前,執行與邏輯操作的時候,就需要用到OR這一狀態位。OR位表示先前執行的與邏輯操作產生的值為“1”,於是,邏輯操作或的執行結果就已被確定為“1”。


      ● OV位:溢位表示算術或比較指令執行時出現了錯誤。根據所執行的算術或邏輯指令結果對該位進行設定。


      ● OS位:溢位儲存位是與OV位一起被置位的,而且在更新算術指令之後,它能夠保持這種狀態,也就是說,它的狀態不會由於下一個算術指令的結果而改變。 這樣,即使是在程式的後面部分,也還有機會判斷數字區域是否溢位或者指令是否含有無效實數。OS位只有透過如下這些命令進行復位:JOS(若OS = 1,則跳轉)命令,塊呼叫和塊結束命令。


      ● CC1及CC0位:CC1和CC0(條件程式碼)位給出有關下列結果的相關資訊:


      • 算術指令結果


      • 比較指令結果


      • 字邏輯指令


      • 在移位功能中,移出位相關資訊。


      可以用以下指令來檢查條件程式碼CC1和CC0。


      CC1 CC0 檢查完成後,如果:


      0 0 A == 0 結果 =0


      1 0 A > 0 結果 > 0


      0 1 A < 0 結果 < 0


      ● BR位:狀態字的第8位稱為二進位制結果位。它將字處理程式與位處理聯絡起來,在一段既有位操


      作又有字操作的程式中,用於表示字邏輯是否正確。將BR位加入程式後,無論字操作結果如何,都不會造成二進位制邏輯鏈中斷。在梯形圖的方塊指令中,BR位與ENO位有對應關係,用於表明方塊指令是否被正確執行:如果執行出現了錯誤,BR位為0,ENO位也為0;如果功能被正確執行,BR位為1,


      ENO位也為1。在使用者編寫的FB/FC程式中,應該對BR位進行管理,功能塊正確執行後,使BR位為1,否則使其為0。使用SAVE指令將RLO存入BR中,從而達到管理BR位目的。


      狀態字的9-15位未使用。


      3.具體使用


      下面我們結合STEP7中的指標程式設計來具體介紹條件碼CC0/CC0的用法。


      不同的指令在CPU中執行時間是不同的。浮點數比定點數執行時間要長;字邏輯指令比位邏輯指令執行時間要長;在某些程式中適當使用狀態字來進行程式設計可以減少CPU程式的執行時間。


      例1:比如說要比較一個DB中塊的DBBO-DBB99這100個位元組是正數是負數還是0,正數用1來表示;負數用-1來表示;0用0來表示。並且將對應結果存入MB200開始的100個位元組中。我們通常的做法可能為:


      如果利用條件碼來進行程式設計,既可以減少程式的大小還會減少一定的指令執行時間,我們只需要將


      中間的比較程式加以最佳化,即可以達到目的。


      例2:根據狀態位C0和CC1的狀態而跳轉的跳轉功能指令JZ不改變任何狀態位的狀態,而且邏輯操作結果RLO值也會“隨著”該跳轉功能帶到跳轉程式段中,供使用者程式其它邏輯操作之用(不改變/FC狀態)。


      示例 兩個整數相減並需進行連續判斷:


      L MW2


      L MW8


      -I


      JZ ZERO // 如果結果等於“0”,則跳轉至標號ZERO處


      // 結果不等於“0”時所執行的指令


      ZER // 結果等於“0”時,所要執行的指令


      如果使用者不熟悉JZ指令和狀態位C0和CC1的具體含義,程式設計時就需要透過比較指令將比較結果存入一個二進位制位中,再根據這個二進位制位透過JC/JCN指令來控制程式的執行了

  • 中秋節和大豐收的關聯?
  • 產銷差率與漏損率的區別?