Текст функции
Код
/******* Вывод байта в порт *******/
void outportb(unsigned addr, // адрес регистра
unsigned char data) // данные для записи
{
asm(“mov %%eax, %2; \ // шаблон кода на ассемблере для
out %1, %%al;” // вывода байта в порт
: // выходных переменных нет
: “r” (addr), “r” (data) // список входных операндов
: “%%eax”, “%%al”); // используемые регистры
}
void outportb(unsigned addr, // адрес регистра
unsigned char data) // данные для записи
{
asm(“mov %%eax, %2; \ // шаблон кода на ассемблере для
out %1, %%al;” // вывода байта в порт
: // выходных переменных нет
: “r” (addr), “r” (data) // список входных операндов
: “%%eax”, “%%al”); // используемые регистры
}
1) Компилятор не желает передавать параметры через короткие регистры, даже для unsigned char (кто-нибудь знает какая, кстати, у него длина в Минималисте?). Поэтому используем eax.
2) Компилятор ругается на строчку с out (неправильный суффикс или операнд?), причём ругается именно на al (т.е. при замене out на mov - одно и тоже сообщение об ошибке). Непонятно

3) Тип void тоже почему-то не понимает... Придется вводить фиктивную выходную переменную типа int, например.
Плиз, помогите. Может у кого-нибудь были похожие ситуации и в другом gcc (не обязательно под Windows, для любого МК)? Передать, естеств., хотелось бы байт. Т.к. это для учебной лабы.