【发布时间】:2015-09-14 21:39:27
【问题描述】:
我得到了一个用 LC3 编写的程序的一部分,并被告知要添加缺少的部分。幸运的是,我能够在网上找到答案,但这并不能帮助我理解为什么答案是这样的,或者我怎么知道要写一个具体的指令。这是代码(带有答案),我将用字母 (a) - (e) 标记我们要添加的行。程序判断一个字符串是否为回文。
.ORIG x3000
LEA R0, PTR
ADD R1, R0, #0
AGAIN LDR R2, R1, #0
BRz CONT
ADD R1, R1, #1
BRnzp AGAIN
CONT ADD R1, R1, #-1 --> (a)
LOOP LDR R3, R0, #0
LDR R4, R1, #0 -->(b)
NOT R4, R4
ADD R4, R4, #1
ADD R3, R3, R4
BRnp NO
ADD R0, R0, #1 --> (c)
ADD R1, R1, #-1 --> (d)
NOT R2, R0
ADD R2, R2, #1
ADD R2, R1, R2
BRnz YES
BR LOOP --> (e)
YES AND R5, R5, #0
ADD R5, R5, #1
BRnzp DONE
NO AND R5, R5, #0
DONE HALT
PTR .FILL X4000
.END
我认为这里唯一显而易见的是 (e),因为没有 BR LOOP 可以将您带回循环的顶部。任何人都可以帮助解释为什么这些命令有效以及如何考虑提出它们吗?例如,我怎么知道在(b)部分中添加“LDR R4,R1,#0”?谢谢
【问题讨论】: