LMC - Не вдаваться в негатив (маленький человечек компьютер) - PullRequest
0 голосов
/ 11 февраля 2012

Просто работаю с Little Man Computer здесь и столкнулся с проблемой, которая как бы меня беспокоит.Так как здесь нет «если» и т. Д., Мне трудно не допустить, чтобы нечетные числа переходили в отрицательные числа при вычитании из четного числа.Например, я беру 3 из 10 в цикле и ветви в ноль.Но это никогда не достигает нуля.Поэтому я хочу знать, как заставить приложение остановиться до того, как оно станет отрицательным, например, 3, вычтенное из 10 в цикле, будет 10, 7, 4, 1, -2.Но я хочу, чтобы он остановился на 1, поэтому не углублялся в минус и не преодолевал эту проблему.

Это то, что я имею до сих пор, и работает только для четных и четных чисел:

INP
STA DEC
INP
LOOP SUB DEC
OUT
BRZ QUIT
BRA LOOP
QUIT HLT
DEC DAT

(для начала, я думаю, было бы неплохо объявить второй вход как переменную, верно? Или нет?)

Буду очень признателен, если вы мне поможете.И придумайте постоянное решение этого вопроса.

Ответы [ 3 ]

1 голос
/ 11 февраля 2012

Я знаю, что пожалею об этом, но так как это кажется довольно простым, я попытаюсь сделать это, не имея возможности проверить: -)

INP
STA DEC
INP
LOOP SUB DEC
BRP OUTPUT
ADD DEC             <-- we went negative, so add back once
HLT
OUTPUT OUT
BRA LOOP
DEC DAT
0 голосов
/ 10 февраля 2014
INP
STA DEC
INP
LOOP SUB DEC
OUT
BRP LOOP 
HLT
DEC DAT 
0 голосов
/ 24 декабря 2012
INP
STA first
INP
LOOP SUB first
BRP yesrepeat
ADD one
HLT
yesrepeat OUT
BRA LOOP
first DAT
one dat 001
...