Сборка MIPS - как принимать только целые числа от 1 до 15?
Интересно, какую инструкцию мне нужно будет сделать, чтобы убедиться, что целые числа, введенные пользователем с помощью PCspim, позволят вводить только цифры 1-15, а если нет, отобразить сообщение об ошибке?
Я прочитал инструкции, такие как SLT, но я не совсем понимаю определение - "" Если $s меньше, чем $t, $d установлен в единицу. В противном случае он получает ноль."" Я не хочу печатать ноль....
Есть ли способ эффективно сделать больше 1, но меньше 15?
я бы сделал
beq $t0, 1, add_num #if content in $t0 = 1, branch to add numbers
beq $t0, 2, add_num
beq $t0, 3, add_num
beq $t0, 4, add_num
beq $t0, 5, add_num etc...right up to 15. but this is soo inefficient
2 ответа
Вам не нужен beq
для каждого возможного значения. Вы можете использовать проверку диапазона с чем-то вроде следующего (инструкция может потребовать небольших изменений):
blez $t0, error_msg ; disallow antyhing less than 1.
addi $t0, $t0, -15 ; subtract 15 from t0, now
; valid values are <= 0.
bgtz $t0, error_msg ; disallow anything greater than 15.
addi $t0, $t0, 15 ; re-adjust
... ; add the numbers here
Процессоры MIPS не имеют традиционных кодов условий. Вместо этого условные тесты устанавливают содержимое регистра в 1 или 0, как вы указали. Затем вы можете проверить регистр результата, используя beq против нулевого регистра.
slt $t5, $t3, $t4 set $t5 = 1 if $t3 < $t4
beq $t5, $zero, done branch if $t5 = 0
if here, $t3 < $t4