繁体   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