LINUX.ORG.RU

mips assembler - хочу уточнить логику.

 ,


0

1

Вроде бы как в нотации ATT $ перед операндом указывает на то, что надо использовать содержимое регистра, например: add $2, $9, $8 Т.е. содержимое регистра 8 сложили с содержимым регистра 9, результат поместили в регистр 2.

Без амперсанда указывается непосредственно операнд, типа: addiu $2, $9, 8 Т.е. 8 сложили с содержимым регистра 9, результат поместили в регистр 2.

Но с некоторыми командами сразу и не поймешь, что да как. Пример из доки:

unsigned mips_cycle_counter_read()
{
unsigned cc;
asm volatile("mfc0 %0, $9" : "=r" (cc));
return (cc << 1);
}

Получается, что $9 это указание читать из регистра номер 9 CP0? Т.е. я указываю не адрес/номер/смещение регистра из CP0, а именно его имя? Аналогично применяются команды mfc1, mfc2, rdhwr?

Просто, когда читаешь в доке, например, описание команды rdhwr, то складывается впечатление, что надо указывать номер загружаемого регистра. Я то и пробовал этот номер указывать либо непосредственно, либо через какой-нибудь регистр в ЦПУ. Таким макаром что-то не очень получалось.

Ответ на: комментарий от sf

О, спасибо за ссылочку. Наконец то четко описано, как это устроено. Странно, что пользуясь официальной документацией по MIPS, приходится самому додумывать, что там и как.

zloy_starper ★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.