#loops #assembly #lc3
Вопрос:
.ORIG x3000 ;clear registers AND R0, R0, #0 ; clear RO AND R1, R1, #0 ; clear R1 AND R2, R2, #0 ; clear R2 AND R3, R3, #0 ; clear R3 AND R4, R4, #0 ; clear R4 AND R5, R5, #0 ; clear R5 AND R6, R6, #0 ; clear R6 ;print "Enter Start Number(0-16):" and get the start number on the same line RESTARTS LEA R0, START PUTS GETC OUT ; move starting number value into a different register ADD R3, R0, #0 ; R0 data moved to R3 START .STRINGZ "nnEnter Start Number(0-16):" ;check bounds on start number LD R5, NASCII ; R5 loaded with #-57 ADD R6, R3, R5 ; R6 = R3 #-57 BRn RESTARTS ; when value is negative branch to restart LD R5, ADSCII ADD R1, R3, R5 BRp RESTARTS ;print "Enter End number(0-16):" RESTARTE LEA R0, END PUTS GETC OUT ; Check bounds LD R5, NASCII ADD R6, R4, R5 BRn RESTARTE LD R5, ADSCII ADD R1, R4, R5 BRp RESTARTE HALT END .STRINGZ "nnEnter End number(0-16):" ; move the end number into a different register ADD R4, R0, #0 ; R0 data moved to R4 ; R0 data now free ; check if number is within bounds ; reset R6 and R1 AND R1, R1, #0 AND R6, R6, #0 ; can use R6 and R1 cleared above ;convert register R3(start number) into a keyboard character (strip ascii) LD R1, NASCII ADD R3, R3, R1 ; R3 = -48 x ADD R4, R4, R1 ; R4 = -48 y NASCII .FILL #-48 ADSCII .FILL #-57 ; make the program find odd values between entered values ; add the odd numbers between the values entered ;print "the sum of every odd number between the two numbers is:" .END
Комментарии:
1. Ваш второй цикл, похоже, зависит от некоторого значения,
R4
которое вы не установили. Кроме того, почему вы размещаете строки в середине последовательности команд? Как процессор узнает, что он не должен интерпретировать строковые данные как набор инструкций (мусора) и пытаться их выполнить?2. Как говорит Майкл, не смешивайте код и данные. Переместите все данные в после всего кода.