Linux汇编out语法,汇编 – x86中使用的IN&OUT指令是什么?

你知道内存寻址的工作原理吗?有一个地址总线,一条数据总线和一些控制线。 CPU将地址总线上的存储器的字节地址(或开始字节)放置在地址总线上,然后提高READ信号,并且一些RAM芯片希望通过升高或降低各个线路(对应于位)来返回该地址处的存储器的内容在数据总线上的字节)。这适用于RAM和ROM。

但是还有I / O设备:串行和并行端口,驱动程序用于PC的微小内部扬声器,磁盘控制器,声卡等。这些设备也可以读取和写入。它们还需要被寻址,以便CPU访问正确的设备和(通常)在给定设备内的正确的数据位置。

对于一些CPU型号,包括在大多数“现代”PC中发现的xxx86系列,I / O设备与内存共享地址空间。 RAM / ROM和IO设备都连接到相同的地址,数据和控制线。例如,COM1的串行端口从(hex)03F8开始寻址。但是在同一地址几乎肯定有记忆。

这里有一个非常简单的图:

[]

显然,CPU需要与存储器或I / O设备通信,而不是两者。为了区分两者,称为“M /#IO”的控制线之一断言CPU是想要与存储器(线=高)还是I / O设备(线=低)通信。

IN指令从I / O设备读取,OUT写入。当使用IN或OUT指令时,M /#IO不会置位(保持低电平),因此内存不响应,I / O芯片也会响应。对于面向存储器的指令,M /#IO被断言,因此CPU与RAM通信,IO设备停止通信。

在某些条件下,IO设备可以驱动数据线,RAM可以同时读取它们。反之亦然。它称为DMA。

传统上,串行和打印机端口,以及键盘,鼠标,温度传感器等是I / O设备。磁盘之间有一堆;数据传输将由I / O命令启动,但磁盘控制器通常将其数据直接存储在系统存储器中。

在诸如Windows或Linux的现代操作系统中,对I / O端口的访问远离“正常”用户程序,并且有多层软件,特权指令和驱动程序来处理硬件。因此在本世纪,大多数程序员不处理这些指令。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值