Сборка MIPS - как принимать только целые числа от 1 до 15? - PullRequest
0 голосов
/ 22 ноября 2011

было интересно, какую инструкцию мне нужно будет сделать, чтобы убедиться, что целые числа, введенные пользователем с помощью 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 ]

1 голос
/ 22 ноября 2011

Вам не нужно 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
0 голосов
/ 22 ноября 2011

Процессоры 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
...