已关闭。此问题需要超过focused。当前不接受答案。
**想要改进此问题吗?**更新此问题,使其仅关注editing this post的一个问题。
昨天关门了。
Improve this question
我正在为自己开发自己的学术处理器,出现了一个问题。我不知道如何实现从内存到寄存器的阅读数据。我可以在循环中精确地执行指令的顺序,但我如何获取任意地址,从其中读写数据?我需要这个,因为数据不适合寄存器。
我需要一个例子来说明这是如何在微控制器中至少在一个集成器级别上完成的,即在操作中使用1个操作数,而不是像RISC-V中那样使用3个操作数,因为这将在我的处理器中完成。
顺便说一下,处理器是8位的,寻址的最大存储器是256个字。字长很可能是14位(操作码为6位)。
1条答案
按热度按时间x7yiwoj41#
微控制器如何从RAM存储和检索数据?
一般来说,你会有某种“地址总线”(或者“地址链路”)来连接CPU(直接地,或者通过内存控制器间接地)到RAM。
地址总线将传输消息,消息将模糊地类似于“READ(地址、大小)”后接“读取_应答(大小、数据)",或类似于“WRITE(地址、大小、数据)”(可能带有“ACK()”应答?)。它可能是高速串行,所有内容都被分解为位。它可能是并行总线。它可能是组合(例如,8条并行线,但随后“一次一个字节串行”)。可能有用于各种目的的控制线。
同样的地址总线也可以处理根本不是RAM的东西-例如ROM、“IO端口空间”、空/无(如果有人只想安装128字节的RAM而不是256字节)、来自设备的IRQ请求等;并且还可以用于指令获取(指令也需要从某处加载,而不仅仅是数据)。
无论你决定硬件接口是什么,你的CPU都必须通过翻译指令来支持它(例如,可能是“LDX [y]”)转换成地址总线上的消息(例如,可能是“读取(来自寄存器Y的地址)”),然后(大概,对于简单的CPU)等待应答返回。对于读取(这更难)当回复回来时,你需要把数据放在某个地方(eidogg.把数据从RAM移到“寄存器X”)。
您还必须决定说明是什么。对于绝对最低限度,您可能(例如)具有带2个隐含操作数的“LDXY”指令(“将Y寄存器中地址处的数据读入X寄存器”),但您可能会有疯狂/复杂的东西(例如,“load x,[y + z〈〈256]”,以通过使用2个不同的寄存器作为地址来支持64 KiB的RAM),并且可能具有一些特殊用途的填充物(如POP、PUSH、CALL和RET,它们都使用堆栈指针作为地址的隐含操作数)。