Pull to refresh

Comments 20

ну наверное самый правильный вариант собрать gcc для MIPS самому что то типа
./configure --target=mips-elf --enable-languages=c ... make
В общем вот здесь описано www.linux-mips.org/wiki/Toolchains
UFO just landed and posted this here
Нет. $ra будет иметь адрес уже следующей инструкции, это да. Но она не выполняется.
UFO just landed and posted this here
UFO just landed and posted this here
Ух ты. Вот что значит учиться на эмуляторах.
Спасибо.
Эмуляторы тоже реализуют delay-slot'ы.
Вот это мне всегда разрывало наглухо мозг в MIPS, особенно если пытаешься что-то дизассемблировать. Идет код, условие, джамп после джампа еще условие и попробуй угадаи — за первым джампом инструкция относится к первому условию или второму :-\ Я после x86 ассма ваще не могу так работать ))
ну это вообще то во многих RISC архитекторах. сделано чтобы не сбрасывать конвеер, и соответственно не терять лишние такты процессора
Да это понятно. Просто если надо чето-то где-то посмотреть в x86 — открыл, посмотрел, все как на ладоне. На уровне автомата, не задумываясь даже. Когда встречаешься с сабжем и надо чото где-то посмотреть и понять — тут уже приходится гуглить синтаксис, и вообще вникать в полную суть. Не привычно, короче говоря. Не плохо, не хорошо — просто не привычно.
Тут конечно согласен! Все дело привычки, сам когда то впервые столкнулся с delay слотами на SPARCe и долго не мог понять. И 86 ассемблер конечно более известен и привычен. Но в результате после некоторой медитации, risc и становятся более простыми и логичными чем 86, по крайней мере мне так кажется.
UFO just landed and posted this here
Да, верно, прошу прощения.
Перезалил картинку.
На счет syscall не очень понял. Если я правильно понимаю то это команда генерирующая системный вызов. Тогда почему это " используется для обращения к операционной системе для произведения действий, которые процессор сам не в состоянии выполнить'. И привели номера конкретных системных вызовов, может эти номера вызовов записаны в ABI и конкретно MARS их симулирует?
Сам сейчас занимаюсь переносом кода на MIPS нашего проекта, поэтому данная тема очень интересна. Спасибо за статью!
MARS эмулирует системные вызовы, он не делает их в реальности. Но процессы подготовки параметров и вывода результата близки к железным имплементациям.

Если бы использовали настоящий процессор, то выполняли бы системные вызовы к операционной системе, работающей на нашем процессоре.
Может тут всё же более «хардварный» вызов. Вроде «вызвать функцию номер 1...12». А что именно делает эта функция — уже забота ОС. В MARS может быть так, как вы описали. но другие вроде как не обязаны в точности следовать этому описанию, не?
Тут наверное нужно сказать так, что в отличие от вызова функции (по номеру или по имени) системный вызов транслируется ядру ОС, соответственно первое — не нужно знать адрес функции при линковке программы, второе — процессор переходит в защищенный режим (режим ядра). Если первое можно сделать программно то для второго и предназначена команда syscall
У вас неправильная информация о регистрах. не пойму откуда вы взяли описание. чтобы было понятней что я имею ввиду. регистр fp имеет $30 значение. а у вас это s8 — не порядок.
Sign up to leave a comment.

Articles