Инструкция по сборке X86 к инструкции MIPS (порт, IN, I / O) - PullRequest
0 голосов
/ 05 мая 2018

В X86 есть инструкция IN:
https://c9x.me/x86/html/file_module_x86_id_139.html https://en.wikipedia.org/wiki/X86_instruction_listings

MIPS не имеет этой инструкции:
http://www.mrc.uidaho.edu/mrc/people/jff/digital/MIPSir.html

Я хочу написать свою собственную инструкцию IN в MIPS.
Как это можно сделать?
Мы пишем операционную систему с использованием C и MIPS:
https://github.com/uu-os-2018/project-iota

Эта функция приводит к:
Ошибка: нераспознанный код операции inb $2,lo

static inline uint8_t inb(uint16_t port)  {  
     uint8_t ret;  
    asm volatile ( "inb %1, %0"  
                   : "=a"(ret)  
                   : "Nd"(port) );  
    return ret;  
}

Ответы [ 2 ]

0 голосов
/ 06 мая 2018

Предшественники семейства x86 (процессоры 8080 и 8085) имели только 16-битную адресную шину и, следовательно, могли использовать только 64 КБ памяти.

Резервирование части этого пространства для устройств было сочтено проблематичным, поскольку ограничивало небольшой объем памяти еще больше. Таким образом, процессоры получили второе адресное пространство (пространство ввода / вывода) с дополнительными 64 КБ, используя вместо команд загрузки и сохранения инструкции IN и OUT. Внешнее различие выглядело как специальный вывод, по сути, давая процессору 17-й адресный бит.

Когда Intel разработала 8086, они следовали этому дизайну из 8085 как своего рода ограниченная обратная совместимость. Несмотря на это, оригинальный компьютер зарезервировал пространство между 640 кБ и 1 МБ для устройств, использующих ввод-вывод с отображением в памяти. Например, в этом месте появилась видеоплата.

Разработчики серии MIPS не беспокоились о предшественниках, и, имея гигабайты адресного пространства с самого начала, они не видели проблемы в использовании 64 КБ этого пространства для устройств. Таким образом, они также должны были только предоставлять инструкции по загрузке и хранению и могли пропускать IN и OUT.

0 голосов
/ 05 мая 2018

Существенная разница между инструкциями ввода / вывода и доступа к памяти заключается в том, как аппаратное обеспечение ведет себя. Программное обеспечение не может заставить систему, использующую I / O-отображаемый I / O, работать с инструкциями памяти или наоборот. Поскольку в системах MIPS используется только ввод-вывод с отображением в память, невозможно использовать команды ввода / вывода.

...