2015-02-16 7 views
1

Я пишу программу в MIPS с использованием Spim, и я хочу преобразовать температуру в/из Фаренгейта и Цельсия. Например:If/Else Statement MIPS

Enter a number to convert: 100 
Enter the Temperature: C 
100 C is the same as 212 F 

Так у меня возникают проблемы с получением программы для распознавания, если пользовательский ввод «С» или «F» и переход на соответствующую метку. Вот часть кода у меня возникают проблемы с:

li $v0, 8   # Loads System service to read string 
syscall 
move $s1, $v0  # Move value to register to save for later use 

beq $s1, 'C', Fahrenheit 
beq $s1, 'F', Celsius 

Программа просто проходит выстилает «Beq», ничего не делая. Любая помощь приветствуется!

ответ

2

В отличие от чтения целых чисел, строки чтения не читают ввод пользователя в регистр $v0. Регистр в MIPS составляет всего 4 байта, поэтому нет смысла хранить строку в одном регистре. Вместо этого MIPS будет считывать его в память, начиная с указанного адреса.

Посто строка системных вызовов в MIPS работает следующим образом:

  • $a0 является начальный адрес буфера в памяти, где строка должна быть (вам не нужно, чтобы выбрать это сами - вы просто выделите пространство с именем метки, а MIPS выберет для вас адрес)
  • $a1 - длина строкового буфера в байтах. Для одного символа вы хотите, чтобы это было 2, потому что строки используют свой последний байт как нуль-терминатор. Если это 1, syscall ничего не будет читать от пользователя, так как этот символ автоматически должен быть нулевым терминатором.

можно выделить 2 байта памяти для строки, включив это в .data разделе

myString: 
    .space 2 

Затем выполнить системный вызов в вашем .text разделе:

li $v0, 8 
la $a0, myString # myString is a label for the memory address 
la $a1, 2 
syscall 

Тогда прочитайте характер (один байт), который вы хотите ввести в регистр, используя lb

lb $s1, ($a0) 

Ваша инструкция beq должна работать так, как вы ожидаете.

+0

Sweet! Большое вам спасибо за то, что помогли мне и объяснили все так ясно! – Kyle2595

+0

@ Kyle2595 Рад, что вы нашли это полезным. :) – eigenchris

+0

@ Kyle2595 Это хороший учебник MIPS, который также объясняет системные вызовы, если вы ищете его. http://logos.cs.uic.edu/366/notes/mips%20quick%20tutorial.htm – eigenchris