2010-08-26 2 views
2

, пожалуйста, помогите мне написать программу в сборке (MIPS) У меня есть слово «привет!». и мне нужно ПМО распечатывает следующая:Распечатайте буквы этого слова в MIPS

h 
he 
hel 
hell 
hello 
hello! 

Я попытался это:

.data 
lbl1: .asciiz "hello!" 
lbl2: .asciiz "h " 
end_line: .asciiz "\n" 

.text 
main: la $s0, lbl1 
     move $a0, $s0 
     addi $v0, $zero, 4 
     syscall jr $ra 

но он печатает мне все строки, и мне нужно только одно письмо или два.

спасибо за помощью

+5

.... Звучит как домашнее задание :) – Dutchie432

+1

Как распечатать с сборки будет зависеть от интерфейса вашей ОС для печати - какая ОС/среда это? Это будет просто определить константу строки и передать указатель на это в вызов ОС - но если вам нужно напечатать еще одну букву за такое время, вам придется либо изменить строку, либо число символов в зависимости от доступны вызовы ОС. – Rup

+0

Я пробовал: .data lbl1: .asciiz "привет!" lbl2: .asciiz "ч" end_line: .asciiz "\ п" .text главная: ла $ s0, lbl1 движение $ a0, $ s0 Адди $ v0, $ ноль , 4 syscall jr $ ra но он печатает мне всю строку, и мне нужна только одна буква или две. – Sergey

ответ

2

ОК, так что у вас есть системный вызов на печать завершается нулем строки. То, что вы будете иметь, чтобы затем либо

for i = 1 to 6 (length of "hello!")  
    read the character from position i in your string and store it safely 
    write a 0 into your string at position i 
    syscall to print the edited string 
    write the saved character back to position i 
    syscall to print the newline 
next 

или

allocate a buffer for a complete copy of your string 
for i = 1 to 6 
    copy the first i characters of your string into the buffer 
    append a newline and a zero to terminate the string 
    syscall to print the buffer 
next 

Надеюсь, вы знаете достаточно, чтобы закодировать один из них в качестве сборщика. Вы также можете реализовать первую, заменив новую строку в строке и вне ее, а также на нуль.

+0

Я тоже пробовал это, я продвигаю $ s0 на 1, поэтому mips печатает меня «ello!». без «h», если я продвигаюсь еще раз, это «llo!». и так далее. и мне нужно, чтобы он печатал меня в первую очередь «h», а затем «он», а затем «hel», «hello», «hello!». Можете ли вы показать мне код тоже? – Sergey

+0

Я действительно не знаю MIPS, но протокол здесь заключается в том, что мы не отправляем коды на домашние вопросы (или вопросы, которые, как мы подозреваем, являются домашними заданиями). Нет, вам нужно сделать больше: вам нужно либо отредактировать строку на месте, либо скопировать сокращенную форму в новый буфер, как я описал. иметь другой регистр (s1?), равный s0 + 1, прочитать байт оттуда, записать 0 в этот байт, syscall, записать байт назад, приращение s1 и цикл - пока вы не забудете байт, а затем остановите. – Rup

+0

Благодарю вас за ответ. , но если есть кто-нибудь, кто знает немного мифов, пожалуйста, дайте мне ключ. какой код или инструкция я должен использовать, чтобы загрузить одну букву из строки, например. "Здравствуйте". Мне нужно положить букву «h» для регистрации $ s0. код, который я уже пробовал, выше комментариев. – Sergey

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