LC-3—MIO、MMIO
- MMIO
- MIO
- Caller Save、Callee Save
- 举个例子
MMIO
- MMIO(Memory Mapped I/O)是一种在系统内存中映射I/O端口的技术,它允许设备直接访问内存中的特定地址,从而实现I/O操作。MMIO技术可以提高I/O操作的效率,并减少CPU的负担。
- LC-3的MMIO技术可以提高I/O操作的效率,并减少CPU的负担。使用MMIO时,可以将特定的I/O端口映射到系统内存的特定地址,从而可以使用LD指令将数据从I/O端口加载到寄存器,或者用ST指令将数据从寄存器存储到I/O端口。
- 例如,假设我们想要从系统中的I/O端口0xFE00处读取一个字节的数据。我们可以将I/O端口0xFE00映射到系统内存的地址x3000,然后使用LD指令将x3000处的数据加载到R0中:LD R0, x3000。这样,R0中就包含了从I/O端口0xFE00处读取的数据。
- MIO(Machine I/O)是一种处理机I/O(输入/输出)操作的机制,用于从外部设备输入和输出数据。MIO可以使用专用指令从外部设备中读取和写入数据,这些指令通常是由处理器的硬件控制单元(HCCU)支持的。
MIO
- MIO和MMIO是不同的处理机I/O技术。MIO是具有专用指令的一种I/O技术,用于从外部设备读取和写入数据,而MMIO是一种使用内存映射I/O(MMIO)技术的I/O技术,它将硬件设备与内存空间映射,使处理器可以使用普通的读写指令来读取和写入硬件设备。
在LC3中,MIO指令是针对特定的I/O设备的,比如IN和OUT指令,它们可以直接与I/O设备进行交互,而MMIO指令则是将I/O设备映射到内存,以便使用LD和ST指令来读写内存,而不需要使用IN和OUT指令。 - 下面是一个使用LC-3汇编语言编写的程序,该程序使用MIO和MMIO的技术,用于从外部设备读取数据并将其存储在内存中:
; Program to read data from an I/O device
; R0 contains the I/O device address
IN R1, R0
STR R1, x3000
; R1 contains the data read from the device, which is stored in memory location x3000
; Program to write data to an I/O device
; R0 contains the I/O device address
; R1 contains the data to be written
MOV R2, R1
OUT R2, R0
; Data in R1 is written to the device
- MIO指令仅用于从外部设备读取数据,不能用于向外部设备写入数据。要向外部设备写入数据,需要使用MMIO指令。
- MMIO指令允许处理器向外部设备写入数据,而MIO指令则仅允许处理器从外部设备读取数据。MIO指令不支持向外部设备写入数据,因为这样会破坏物理硬件的一致性和稳定性。MMIO指令的设计更加安全,因此才能用于处理器与外部设备之间的数据交换。
- MIO.EN是一个特殊的LC-3指令,可用于启用/禁用处理器的MIO功能。当MIO.EN指令将MIO功能禁用时,处理器将不能从外部设备读取数据,但可以继续使用MMIO指令向外部设备写入数据
Caller Save、Callee Save
- 进入子程序前保存,子程序结束后恢复的是调用者保存Caller Save:
- 进入子程序后先保存,子程序结束前恢复的再返回原位置的,是被调用者保存Callee Save
举个例子
- 把对fib的函数调用看成整体而言的,R7在调用函数的内部总是会被修改为返回地址,所以R7在调用fib之前,需要由调用者保存。而R0和R2在调用过程中也会被修改,但是fib函数最后会还原这两个值
- 所以R7是Caller Save、R0R2是Callee Save