汇编语言学习笔记(随笔记) 端口

端口就是一些芯片的存储器,这些芯片有各种接口卡(网卡,显卡)、主板上的芯片接口(CPU可以通过这些芯片对我们连接的外部设备进行访问)、用来存储相关的系统信息的一些芯片,如CMOS,或者是一些进行输入输出处理的芯片。

 

CPU对端口进行统一的编址,建立统一的一个端口地址空间,每一个端口在地址空间都有一个地址。端口地址范围是0-FFFF。

这边我们的端口地址是怎么设定的呢?

这边对端口的读写指令只能用IN和OUT两种指令。

比如我们访问端口(书上的例子)

IN AL,60H ;从60H号端口读入一个字节

这边,我们通过IN指令来给60H号的端口所在的芯片发出读取字节的命令,但是,是不是60号端口就是专门给端口设定的呢,60号端口所在的芯片的作用是什么呢,如果我们使用 MOV AL,[60H]这样的指令,控制总线会不会发出读取60H号端口的一个字节的指令并且是成功的读取呢,这边我们用debug试一下,测试如下:

mov al,[60]

得到的al寄存器的值是20H,可以。

那么我们试一下

IN AL,60H

得到的al的结果是AL=1C,这边也是可以的

 

但是,为什么会这样呢,这点就是我所不能理解的,为什么会这样呢,MOV AL,[60H]是从60H偏移地址中读入一个字节,IN AL,60H是从60号端口中读入一个字节,很明显的,这边我是把端口地址和内存偏移地址混淆了,以为是一样的,但是这个也就是关键了,为什么

 

不然我从段地址为0000:60中读入一个字节后,结果是:AL=0E,这边我还是很简单的认为端口地址是CUP地址空间中的前面的0000:0000-0000:FFFF对应的地址,这边是不是可以说明端口地址和我们的CPU的地址总线的地址是相互独立开来的呢?

这边如果有看到的朋友能够帮忙说明一下呢,不胜感激~                                          当然我也不会就这样放着的……

 

这边注意,CPU只能用AL,AX存放和端口互访的数据,如果是8为的,用AL,方位16位端口时用AX,

对访问100H-FFF端口的数据时,应该先将端口号寄存到DX中,如

MOV DX,13FH

IN AX,DX

OUT DX,AX

 

 

70H,71H为COMS的端口地址,70H存放要访问的CMOS RAM单元的地址,71H为数据端口,存放从选定的COMS RAM单元中读取的数据,或者要写入的数据。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值