作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在研究计算机体系结构时,我了解了控制I/O设备的不同方法,这些方法包括:
最佳答案
这些术语大部分是独立的,而不是相互排斥的。
下面,我将使用伪汇编代码来使示例更清楚,它是说明性代码,而不是实际代码。
如何访问设备?
如果可以在与地址空间或内存分开的专用地址空间中访问设备,则IO的类型称为端口映射的IO 或隔离的IO 。
如果设备可以作为唯一地址空间(也可以在其中放置内存)的一部分进行访问,则IO的类型称为内存映射的IO 。
例如,某些嵌入式 Controller 和某些主流体系结构具有访问IO地址空间的特殊指令。
in r0, 0x34 #Read address 0x34 from IO address space
ld r0, 0x34 #Read address 0x34 from memory address space
ld
类型与用于访问内存的相同,因此例如
ld r1, 0x1000
可以访问内存而不是设备。
#Setup read parameters omitted
movi r0, $0x20 #r0 = 0x20 (say it's READ_SECTORS command)
out 0x102, r0 #Tell the device to start reading
movi r1, 512 / 4 #r1 = number of words in a sector
_read:
in r0, 0x103 #Read a word (32-bit)
...
decbnz r1, _read #Decrement r1 and branch back if not zero
#Setup read parameters omitted
movi r0, $0x21 #r0 = 0x21 (say it's READ_DMA_SECTORS command)
out 0x102, r0 #Tell the device to start reading
#Done, the software can do something else
#Setup isr
la r0, myISR
call setup_isr
#Example of device configuration
in r0, 0x100
or r0, 0x80
out 0x100, r0 #Set bit7 to enable generation of interrupt
#Done, myISR is called whenever new data arrives
_check_data:
in r0, 0x102 #Say 102 is a status resister
btbz r0, 7, _check_data #Test if bit7 of r0 is set, if not jump back
#New data is available
关于computer-science - 内存映射的IO和编程的I/O之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41438223/
我是一名优秀的程序员,十分优秀!