LMC - Не уходит в минус (маленький человечек-компьютер)

Просто работаю с Little Man Computer здесь и столкнулся с проблемой, которая меня немного беспокоит. Поскольку нет if и т. Д., Мне трудно остановить нечетные числа, превращающиеся в отрицательные числа при вычитании из четного числа. Например, я беру 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

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

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


person Deany    schedule 10.02.2012    source источник


Ответы (1)


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

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
person Joachim Isaksson    schedule 10.02.2012
comment
что произойдет, если начальное число равно 10, а уменьшение равно 3? (10,7,4,1,-2 - все еще не работает) Кажется, у ОП неразрешимая проблема. - person KevinDTimm; 11.02.2012
comment
@KevinDTimm Впервые слышу о LMC, поэтому, скорее всего, я пропустил что-то важное, но я не вижу проблемы с другими значениями, если все работает так, как я понял ...? Вычитание и прибавление в конце может быть некрасивым, но я стремился к прямолинейности. - person Joachim Isaksson; 11.02.2012
comment
Вы и я оба, но я не думаю, что решение его проблемы простое - пример OPs дойдет до -2, одно приращение не сработает, потребуется 2 приращения, чтобы добраться до нуля - вообразите перестановки на Пятничный день заставляет мой мозг плакать. (отсюда и "несостоятельный" комментарий) - person KevinDTimm; 11.02.2012
comment
@KevinDTimm Я не уверен, что понимаю, что вы имеете в виду :) DEC - это переменная, а не инструкция, это причина путаницы? Во всяком случае, нашел симулятор на atkinson.yorku.ca/~sychen/ research/LMC/LittleMan.html, кажется, работает при моделировании :) - person Joachim Isaksson; 11.02.2012
comment
Отлично работает дружище. Большое тебе спасибо. И я понимаю, что вы, ребята, имеете в виду, маленький человечек-компьютер — это очень, позвольте мне сказать, расплывчатый язык, и такая расплывчатость имеет свои положительные и отрицательные стороны, вам нужно чертовски много работать. - person Deany; 11.02.2012
comment
@Deany Если это решило вашу проблему, отметьте вопрос как решенный. Это один из способов, чтобы люди в целом были счастливы здесь :) - person Joachim Isaksson; 11.02.2012
comment
Извините, совсем забыл. Кроме того, не могли бы вы объяснить эту строку: BRP OUTPUT, т.е. почему это OUTPUT. Это просто сделать OUT как переменную? Извините, я просто не понял эту строчку. - person Deany; 11.02.2012
comment
@Deany OUTPUT - это просто ярлык, на который он может перейти, вы можете назвать это как угодно. Просто назвал его OUTPUT, чтобы обозначить, что я хочу перейти к месту вывода данных, если значение было положительным. - person Joachim Isaksson; 11.02.2012
comment
NB: нет необходимости делать ADD DEC непосредственно перед HLT. Вы можете просто сделать HLT. - person trincot; 23.11.2019