Почему мой код IJVM калькулятора RPN не проверяет все условия?
Я пытаюсь создать программу IJVM, которая может выполнять простые вычисления с использованием вычисления в обратной польской нотации (RPN).
Для этого я создал простой псевдокод, чтобы затем перевести его в программу IJVM. Вот как это устроено:
while(true){
c = read character
if(c == '+'){
//add the values at the top of the stack
} if(c == '-'){
//subtract the values at the top of the stack
} if{ c == end-of-line){
//unpack a value, convert to ascii, display the result
}
}
Чтобы попытаться перевести этот псевдокод, я сначала импортировал в свою программу все константы, которые мог использовать, чтобы использовать их для сравнения.
.constant
one 1
start 32
enter 10
stop 126
plus 43
minus 45
space 32
.end-constant
Затем я записал свою программу:
.main
LDC_W start
read: IN
LDC_W enter
ISUB
IFEQ end
LDC_W plus
ISUB
IFEQ add
LDC_W minus
ISUB
IFEQ sub
GOTO read
add: POP //Delete the result of the subtraction of the carac + with the constant plus
IADD
GOTO read
sub: POP //Delete the result of the subtraction of the carac - with the constant minus
ISUB
GOTO read
end: POP //Delete the result of the subtraction of the carac "return to the line" with the constant enter
OUT
HALT
.end-main
Моя программа берет последний ввод пользователя и сравнивает его с '
+
','
-
' а также
the line feed
(клавиша ввода) путем вычитания кода ascii введенного символа и кода, предварительно записанного с помощью ограничений. Я использую «POP» после каждого сравнения, чтобы удалить результат, полученный вычитанием.
Моя проблема в том, что я использую симулятор MIC1MMV для тестирования программы с помощью простых вычислений:
1 2 +
*enter*
Моя программа выполняет только первое сравнение (сравнение
if(c==enter)
) и никогда не входит в другие случаи. Поэтому и выкладываю эту тему. Заранее благодарим за ответы!