Почему мой код 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)) и никогда не входит в другие случаи. Поэтому и выкладываю эту тему. Заранее благодарим за ответы!

0 ответов

Другие вопросы по тегам