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