STR 指令失败,它没有存储它要存储的值
STR Instruction fails, it doesn't store the value it's meant to store
我正在尝试实现一个代码来比较 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
代码执行但显示错误结果,知道原因吗?
使用直接形式的加法,例如:ADD R4, R2, #0
。 R2
中的值将与 0
相加并放入 R4
中。这是您要注册的基本注册 copy/move.
相加 0 比将一个寄存器复制到另一个寄存器需要做更多的工作(例如,加法操作是无用的),但是重复使用现有指令会使硬件更简单,即使理论上不涉及加法的指令也可以运行 更快(通过放弃添加)可能不会改变整体循环时间,并且需要更多硬件并可能占用编码。
加载和存储仅用于在 CPU 个寄存器和内存位置之间复制数据。
我正在尝试实现一个代码来比较 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
代码执行但显示错误结果,知道原因吗?
使用直接形式的加法,例如:ADD R4, R2, #0
。 R2
中的值将与 0
相加并放入 R4
中。这是您要注册的基本注册 copy/move.
相加 0 比将一个寄存器复制到另一个寄存器需要做更多的工作(例如,加法操作是无用的),但是重复使用现有指令会使硬件更简单,即使理论上不涉及加法的指令也可以运行 更快(通过放弃添加)可能不会改变整体循环时间,并且需要更多硬件并可能占用编码。
加载和存储仅用于在 CPU 个寄存器和内存位置之间复制数据。