#assembly #lc3
#собрание #lc3
Вопрос:
Я пытаюсь реализовать базовую программу в сборке LC3, но ассемблер, похоже, не распознает одну из меток. Интересно, почему он не распознает только последний:
.ORIG 0x300 NUMBER: .FILL x0006 NUMBER2: .FILL x0003 R1MAGG: .FILL x0999 UGUALI: .FILL 0x500 R1MIN: .FILL x0001 LD R1, NUMBER LD R2, NUMBER2 ;I stored in R1 and R2 2 numbers ;Now I compare them NOT R2, R2 ADD R2, R2, #1 ADD R3, R1, R2 BRp R1MAGGIORE BRn R1MINORE LD R4, UGUALI JSR EOP R1MAGGIORE: LD R4, R1MAGG JSR EOP R1MINORE: LD R4, R1MIN JSR EOP EOP: .END
И это ошибка, которую он возвращает: СТРОКА 28: Нераспознанный код операции или синтаксическая ошибка в или перед». END»
Ответ №1:
Попробуйте EOP: HALT
, а затем .END
перейдите на следующую строку, как у вас есть. Подозреваю, что он жалуется на пропущенную инструкцию, но вы действительно должны завершить программу с HALT
помощью инструкции (trap) в любом случае.
Вы уверены, что хотите .ORIG
0x300, а не x3000?
Вы можете подумать о том, чтобы поместить свои данные после кода, чтобы симулятор не пытался выполнить ваши данные. В противном случае вы можете поместить a BR MAIN
в качестве первой инструкции (т. Е. Перед/перед данными) и метку MAIN:
, в которой у вас есть первые реальные инструкции для программ, чтобы она перескакивала с ваших данных на начальную точку вашей программы.
Комментарии:
1. Закрытие симулятора и его повторное открытие сделали это, но я все равно приму ваш ответ. P.S. Совет, данный по поводу добавления ГЛАВНОГО БР, заставил меня решить тонны предупреждений, спасибо