Комментарии 20
Вот здесь — www.coursera.org/course/compilers компилятор генерирует код как раз для MIPS.
ну наверное самый правильный вариант собрать gcc для MIPS самому что то типа
В общем вот здесь описано www.linux-mips.org/wiki/Toolchains
./configure --target=mips-elf --enable-languages=c ...
make
В общем вот здесь описано www.linux-mips.org/wiki/Toolchains
НЛО прилетело и опубликовало эту надпись здесь
Нет. $ra будет иметь адрес уже следующей инструкции, это да. Но она не выполняется.
Вот это мне всегда разрывало наглухо мозг в MIPS, особенно если пытаешься что-то дизассемблировать. Идет код, условие, джамп после джампа еще условие и попробуй угадаи — за первым джампом инструкция относится к первому условию или второму :-\ Я после x86 ассма ваще не могу так работать ))
ну это вообще то во многих RISC архитекторах. сделано чтобы не сбрасывать конвеер, и соответственно не терять лишние такты процессора
Да это понятно. Просто если надо чето-то где-то посмотреть в x86 — открыл, посмотрел, все как на ладоне. На уровне автомата, не задумываясь даже. Когда встречаешься с сабжем и надо чото где-то посмотреть и понять — тут уже приходится гуглить синтаксис, и вообще вникать в полную суть. Не привычно, короче говоря. Не плохо, не хорошо — просто не привычно.
Тут конечно согласен! Все дело привычки, сам когда то впервые столкнулся с delay слотами на SPARCe и долго не мог понять. И 86 ассемблер конечно более известен и привычен. Но в результате после некоторой медитации, risc и становятся более простыми и логичными чем 86, по крайней мере мне так кажется.
НЛО прилетело и опубликовало эту надпись здесь
эх, времена Sony Playstation, Playstation 2
На счет syscall не очень понял. Если я правильно понимаю то это команда генерирующая системный вызов. Тогда почему это " используется для обращения к операционной системе для произведения действий, которые процессор сам не в состоянии выполнить'. И привели номера конкретных системных вызовов, может эти номера вызовов записаны в ABI и конкретно MARS их симулирует?
Сам сейчас занимаюсь переносом кода на MIPS нашего проекта, поэтому данная тема очень интересна. Спасибо за статью!
Сам сейчас занимаюсь переносом кода на MIPS нашего проекта, поэтому данная тема очень интересна. Спасибо за статью!
MARS эмулирует системные вызовы, он не делает их в реальности. Но процессы подготовки параметров и вывода результата близки к железным имплементациям.
Если бы использовали настоящий процессор, то выполняли бы системные вызовы к операционной системе, работающей на нашем процессоре.
Если бы использовали настоящий процессор, то выполняли бы системные вызовы к операционной системе, работающей на нашем процессоре.
Может тут всё же более «хардварный» вызов. Вроде «вызвать функцию номер 1...12». А что именно делает эта функция — уже забота ОС. В MARS может быть так, как вы описали. но другие вроде как не обязаны в точности следовать этому описанию, не?
Тут наверное нужно сказать так, что в отличие от вызова функции (по номеру или по имени) системный вызов транслируется ядру ОС, соответственно первое — не нужно знать адрес функции при линковке программы, второе — процессор переходит в защищенный режим (режим ядра). Если первое можно сделать программно то для второго и предназначена команда syscall
У вас неправильная информация о регистрах. не пойму откуда вы взяли описание. чтобы было понятней что я имею ввиду. регистр fp имеет $30 значение. а у вас это s8 — не порядок.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Изучаем MIPS-ассемблер