2015-09-21 4 views
0

Я пытаюсь проверить, введен ли введенный пользователем символ 0 для второго символа, например, если они вводят «A0123», тогда утверждение истинно. Мне удалось удалить знак равенства, однако, когда я запускаю свою программу, он не входит в ветвь, которая должна проверять, что второй символ равен 0.MIPS, если инструкция не указана

В регистре $ t2 я сохраняю точный ввод пользователей (с символом новой строки). и в $ s5 я сохраняю строку asciiz «0» с новой строкой. Затем я удаляю первый символ ввода пользователя.

Что происходит не так и как я могу это исправить?

.data 

zero: .asciiz "0\n" 


la $s5, zero 

addiu $t2,$t2,1  #remove equals sign 
beq $t2, $s5, zero2  #referencing 0 
beq $t2, $s6, one2 
j exit2 
zero2: 
    move $t2, $t0 
    j exit2 
+0

Помните, что есть [слот задержки филиал ] (https://en.wikipedia.org/wiki/Delay_slot#Branch_delay_slots) в MIPS. Я не делал сборку MIPS через некоторое время, но может быть полезно поставить 'nop' после любой команды перехода. –

ответ

1

$s5 и предположительно $t2 являются указателями, и они никогда не будут равны. Вы должны сравнить символы, на которые они указывают. Вы можете сделать что-то вроде:

la $s5, zero 
lb $s5, ($s5) 
lb $t3, 1($t2) 
beq $t3, $s5, zero2 

Конечно, вы действительно не нужен zero строку, вы можете просто использовать немедленно, например:

lb $t3, 1($t2) 
li $s5, '0' 
beq $t3, $s5, zero2 
+0

Я пробовал второй блок кода, и он все еще не входит – fosho

+0

nevermind, он работает :) – fosho

Смежные вопросы