ЛКМ меняет значение у
Это код в JavaScript, который я хочу преобразовать в код сборки LMC:
<!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, но не для любого другого значения, такого как 3,4 и т. Д.
Какие-нибудь мысли?
2 ответа
Прописью:
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
Вы можете увидеть этот код здесь: Shift влево в LMC Emulator.
То, что вы пытаетесь создать, - это программа сдвига битов, которая сдвигает значения, которые он оставил. Код ниже должен работать. (Не включайте многоточие или что-либо после многоточия)
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`