簡體   English   中英

Fetch - LMC 指令的執行周期

[英]Fetch - execute cycle for LMC instructions

我必須為每個 Little Man Computer 指令(ADD、SUB、BR、BRP 等)定義步驟,並且在分支指令和 COB(或 Halt 指令)方面遇到問題。 我了解每條指令開頭的獲取部分:

個人電腦 -> 三月

MDR -> 紅外線

但我不確定在執行部分添加什么以使指令真正正確。 誰能解釋一下如何為 BR、BRP、BRZ 和 COB 設置獲取執行周期? 任何幫助將不勝感激

首先,LMC是一個虛擬概念。 它有幾種解釋和實現,有時可能是相互矛盾的。 因此,哪個答案是正確的可能取決於您正在使用的課程材料。

為避免混淆,以下是我們可以使用的定義:

寄存器和 memory

  • MAILBOX:這是處理單元外的 memory。 它有 100 個條目用於存儲 3 位數字。
  • PC:程序計數器(兩位數)
  • MAR:Memory 地址寄存器:臨時保存郵箱的2位地址,用於獲取或存儲MDR中的值。
  • MDR:Memory 數據寄存器:臨時保存傳入或傳出郵箱的 3 位數據。
  • IR:指令寄存器:包括操作碼(1 位或 3 位),有時包括 2 位地址
  • ACC:累加器:3 位數值
  • N:負標志:打開或關閉。 這方面在原始 LMC 中沒有很好地定義。 一些模擬器允許 ACC 保存負值,因此不需要額外的標志,而其他模擬器會認為 ACC 嚴格限制為三位數,不支持負號。 由於真正的 CPU 通常有一個 N(負)標志,我認為將這個標志想象成一個單獨的東西是合理的。
  • Z:零標志:打開或關閉。 這是 ACC 是否具有零值的指示。 這是否真的應該作為一個單獨的標志存在比 N 標志更值得商榷,但我只是在這里將其列為一種可能性。

獲取步驟

fetch-execution 周期的 fetch 部分總是相同的——我更喜歡在相反的方向寫賦值:

  • 三月 <= PC
  • MDR <= 郵箱[MAR]
  • 紅外 <= 耐多葯
  • PC <= PC+1(使用計算器)

我們可以討論最后一步的確切順序。 PC 的更新可以在步驟 2 和 3 之前或同時進行。

執行步驟

獲取執行周期的執行部分取決於 IR 的內容:解釋操作碼(1 位,或 901 或 902 用於IN / OUT )。 例如:

  • BR (也稱為BRA ):

    PC <= IR(最后 2 位數字)

  • BRP

    如果未設置 N:
    PC <= IR(最后 2 位數字)

  • BRZ

    如果設置了 Z 標志:
    PC <= IR(最后 2 位數字)

  • COB

    程序執行停止。 在外部用戶觸發運行之前,不會有更多的 fetch-execution 循環。

根據您的課程材料,您可能不會提及 N 或 Z 標志。 在這種情況下,只需分別用“ACC 為負”和“ACC 為零”替換條件。

請注意,我沒有涉及這四個指令的 MAR 或 MDR 寄存器——直接將值從 IR 移動到 PC——因為 MAR 和 MDR 僅用於處理單元和 memory 之間的通信。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM