【问题标题】:Does reading an I/O port have any side effects? What about in Programmed I/O?读取 I/O 端口有副作用吗?那么在程序化 I/O 中呢?
【发布时间】:2012-05-25 20:33:00
【问题描述】:

读取 CPU 端口(通过in/out 指令)是否有任何副作用?

例如:

  1. 它是否“告诉”设备该端口已被读取?

  2. 不小心读取任意端口会造成伤害吗?

我假设它不应该,但是有些东西对我来说没有意义:

如果没有副作用,那么 ATA 驱动器如何在执行编程 I/O 时“知道”何时读取了一个字,以便提供下一个数据字?

【问题讨论】:

  • 也许我理解错了,但是读取 I/O 不就是副作用的定义吗?
  • @KilianFoth:这是一个输入端口......如果它只是读取电压,根据定义它不应该改变值,对吗?或许不是,这就是我问的原因……不管怎样,有些东西对我来说没有意义……
  • 不应该,但是 CPU 很复杂并且有各种专有的怪异之处。最好的办法是尝试一下,看看会发生什么。
  • @Polynomial:好吧,如果是这样的话,我可能不会尝试,因为我不想炒任何东西哈哈。这就是我问的原因之一,谢谢你的信息。 :P

标签: assembly x86 port cpu ata


【解决方案1】:

是的,读取端口可能会产生副作用,但是否有副作用(如果有,它们是什么)因设备而异。

我从未听说过读取端口会损坏设备。 少数(但大部分是旧的)可能会因写入不正确的值而损坏/造成损坏,但我不知道读取可能会造成损坏。在大多数情况下,阅读的副作用是相当轻微的。

阅读行为可以告诉设备它正在被阅读。要从设备中读取,您需要在总线上放置一个命令和一个地址。如果命令是“读取”并且地址对应于设备,则设备正在被读取。

【讨论】:

  • +1 好的,谢谢。关于 ATA 的任何答案? (我对端口的读取是否“告诉”驱动器该端口已被读取?或者它是否以其他方式发现?)
  • @Mehrdad:我在答案中添加了更多内容。
  • To read from a device, you place a command and an address on the bus. -> 太棒了,这似乎回答了我所有的问题,谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-04
  • 2015-05-24
  • 2011-02-17
  • 2019-02-13
  • 2013-01-04
  • 1970-01-01
相关资源
最近更新 更多