[英]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.