我正在嘗試實作一個代碼,該代碼比較 2 個數字并將最大的存盤在暫存器 R1 中。以下代碼正在完成這項作業:
.ORIG 0x300
V1: .FILL 0x007
V2: .FILL 0x020
LD R2, V1 ;R2=V1
LD R3, V2 ;R3=V2
AND R4, R4, #0
ADD R4, R4, R2 ;R4=R2
AND R5, R5, #0
ADD R5, R5, R3 ;R5=R3
NOT R5, R5
ADD R5, R5, #1 ;R5=-R4
ADD R4, R4, R5
BRN SECOND_BIGGER
LD R1, V1
JSR END
SECOND_BIGGER:
LD R1, V2
END:
.END
但是當我嘗試替換我復制暫存器 R4 和 R5 上的 2 個值的部分時,它停止作業:
.ORIG 0x300
V1: .FILL 0x007
V2: .FILL 0x020
LD R2, V1 ;R2=V1
LD R3, V2 ;R3=V2
STR R4, R2, #0
STR R5, R3, #0
NOT R5, R5
ADD R5, R5, #1 ;R5=-R4
ADD R4, R4, R5
BRN SECOND_BIGGER
LD R1, V1
JSR END
SECOND_BIGGER:
LD R1, V2
END:
.END
代碼被執行但顯示錯誤的結果,知道原因嗎?
uj5u.com熱心網友回復:
使用帶直接形式的添加,例如: ADD R4, R2, #0。中的值R2將與 相加0并放入R4. 這是您注冊復制/移動的基本暫存器。
添加 0 比將一個暫存器復制到另一個暫存器所需的作業要多(例如,加法運算是無用的),但重用現有指令使硬體更簡單,即使理論上不涉及加法的可以運行得更快(通過放棄附加)可能不會改變整體周期時間,并且需要更多的硬體和可能占用的編碼。
加載和存盤僅用于在 CPU 暫存器和記憶體位置之間復制資料。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/369159.html
