0

这是我要转换为 LMC 汇编代码的 JavaScript 代码:

<!DOCTYPE html>
<html>
<body>
<script>
var temp = 14;
var y = 2;
temp <<= y;
document.write(temp);
</script>
</body>
</html>

我的任务是为 LMC 编写一个程序,它会产生相同的结果来更改 y 值。

这是我到目前为止所拥有的:

LOOP LDA COUNT
ADD ONE
STA COUNT
LDA TOTAL
ADD TEMP
STA TOTAL
LDA Y
SUB COUNT
BRZ ENDLOOP
BRA LOOP
ENDLOOP LDA TOTAL
STA TEMP
LDA TEMP
ADD TEMP
OUT
HLT
ONE DAT 001
COUNT DAT
TOTAL DAT
TEMP DAT 14
Y DAT 2

它适用于 2 的 ay 值,但不适用于 3,4 等任何其他值

有什么想法吗?

4

2 回答 2

1

用一句话来说:

Read R0 and R1 from Input
while R1 > 0 {
    Subtract 1 from R1
    Add R0 to itself
}
Output R1

在 LMC 汇编器中:

     INP
     STA R0
     INP
     STA R1
LOOP LDA R1
     BRZ END
     SUB ONE
     STA R1
     LDA R0
     ADD R0
     STA R0
     BRA LOOP
END  LDA R0
     OUT

R1   DAT
R0   DAT
ONE  DAT 1

您可以在此处看到此代码运行:在 LMC Emulator 中向左移动

于 2016-04-20T02:25:25.633 回答
0

您正在尝试生成的是一个位移程序,它将值向左移动。下面的代码应该可以工作。(不要包括省略号或省略号后的任何内容)

     inp 
     sta value 
     inp 
     sta shift 
     brz done ... do nothing 
     loop lda value .... return here to shift one bit to the left 
     add value 
     sta value 
     lda shift ... decrement and test bit shift counter 
     sub one 
     sta shift 
     brz done ... done if count is zero 
     bra loop ... else shift at least one more bit 
     done lda value .... arrive here when all shifts are done 
     ... output, halt and data definitions follow `enter code here`
于 2016-04-18T09:47:11.040 回答