簡體   English   中英

X86匯編指令轉換為MIPS指令(端口,IN,I / O)

[英]X86 assembly instruction to MIPS instruction (Port, IN, I/O)

在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

我想在MIPS中編寫自己的IN指令。
如何才能做到這一點?
我們正在使用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;  
}

進/出和內存訪問指令之間的重要區別在於硬件的行為方式。 軟件無法使使用I / O映射的I / O的系統與內存指令一起工作,反之亦然。 由於MIPS系統僅使用內存映射的I / O,因此無法使用in / out指令。

x86系列的前輩(8080和8085處理器)僅具有16位地址總線,因此只能使用總共64 kB的內存。

為設備保留一些此類空間被認為是有問題的,因為它進一步限制了少量的內存。 因此,處理器通過使用IN和OUT指令(而不是加載和存儲)獲得了第二個地址空間(I / O空間)和額外的64 kB。 區別是從外部作為特殊引腳出現的,本質上為CPU提供了第17個地址位。

英特爾設計8086時,他們遵循了8085的這種設計,因為它具有某種有限的向后兼容性。 盡管如此,原始PC仍為使用內存映射I / O的設備保留了640 kB和1 MB之間的空間。 例如,視頻板出現在該空間中。

MIPS系列的設計人員無需擔心前代產品,從一開始就擁有千兆字節的地址空間,因此他們對使用大約64 kB的空間用於設備沒有任何問題。 這樣,他們也只需要提供加載和存儲指令,就可以跳過輸入和輸出。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM