Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Asm для начинающих > MIPS ассемблер.


Автор: Vovo4ka 11.7.2007, 17:23
Через неделю экзкамен по ассемблеру для MIPS, а я только вчера начал заниматься. :( Экзамен, собственно, будет совсем не сложный, с заданиями типа "hello world", "найти простые числа в массиве" и тп. Но я почти ничего не знаю об ассемблерах, тк раньше никогда не сталкивался. Вобщем, ай нид хелп!

Первый вопрос, который тревожит меня больше всего, какими бывают регистры и чем они друг от друга отличаются? 

Вот например кусок кода
Код

    li    $15, 7        #пишем в регистр $15 значение 7
    move    $a0, $15    #копируем содержимое из $15 в $a0
    li    $v0, 1        #print integer service call
    syscall        #печать


Все работает и в консоль (в SPIM) выводится 7.

Но почему то же самое нельзя записать так?
Код

li    $a0, 7    
li    $v0, 1        
syscall    


или как-нибудь так:
Код

li    $a0, 7    
move    $15, $a0
li    $t2, 1    
syscall


Короче, для чего нужны те или иные регистры, сколько их всего?


ps: Есть ли какие-то доки по сабжу на русском?

Автор: Vovo4ka 12.7.2007, 00:15
В общем, немного разобрался. Регистров всего 32. Обращаться к ним можно как по номеру (типа $15), так и по имени ($t2). 

А дальше затык  smile 
Нашел некую таблицу "MIPS registers and the convention governing their use" из которой следует вот что:
Код

регистр            использование

zero               Constant 0 
at                 Reserved for assembler 
v0                 Expression evaluation and 
v1                 results of a function 
a0 - a3            Argument 1 
t0 - t9            Temporary (not preserved across call) 
s0 - s7            Saved temporary (preserved across call) 
k0 - k1            Reserved for OS kernel 
gp                 Pointer to global area 
sp                 Stack pointer 
fp or s8           Frame pointer 
ra                 Return address (used by function call)

Перевести я конечно могу, но вот смысл не совсем понимаю. Например, чем Temporary функционально отличается от Saved temporary, что такое Stack pointer, зачем нужен Return address?... Кто нибудь может "на пальцах" объяснить?

И остается открытым вопрос о документации на русском... 

Автор: JackYF 12.7.2007, 00:45
Цитата(Vovo4ka @  11.7.2007,  17:23 Найти цитируемый пост)
Есть ли какие-то доки по сабжу на русском?

поиск в гугле по "документация Assembler MIPS" ничего не дал?

Автор: Vovo4ka 12.7.2007, 01:12
Поиск дал статью-описание архитектуры этих процессоров и еще немного полезной информации, но конкретно ни документации, ни каких-либо учебных пособий по ассемблеру, ни хотя бы примеров с русскими комментариями я не нашел. :(

Автор: JackYF 12.7.2007, 02:01
н-да. Попробовал поискать сам. Русскоязычную литературу действительно не нашел.
А вот англоязычной немало по запросу, например "Assembler MIPS register description".

В частности, http://www.cs.uic.edu/~i366/notes/MIPS%20Quick%20Tutorial.htm и http://www.mrc.uidaho.edu/mrc/people/jff/digital/MIPSir.html

Также надыбал по тому же запросу вот http://www.eecs.harvard.edu/~ellard/Courses/cs50-asm.pdf.

Попробуй, авось поможет. Дальше копать все равно придется, наверное, самому.

Автор: Vovo4ka 12.7.2007, 12:04
Спасибо!
У меня в принципе уже много инфы на английском. Просто все ж таки язык не родной и изучение литературы на нем занимает гораздо больше времени, чем на русском. А время у меня осталось катострофически мало :(

Ну да ладно. "Hello world" я уже написал, а это главное! smile Процесс, вроде бы, идет....

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)