鱼C论坛

 找回密码
 立即注册
查看: 8025|回复: 6

汇编语言中8位端口与16位端口的理解问题~~

[复制链接]
发表于 2017-10-28 15:37:11 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 兰陵月 于 2017-10-28 15:50 编辑

[b]汇编语言中8位端口与16位端口的理解问题~~
王爽《汇编语言》(第3版)第14章 端口 P266页
……
在in和out指令中,只能使用ax或al来存放从端口读入的数据或要发送到端口中的数据。访问8位端口时用al,访问16位端口时用ax。
对0~255以内的端口进行读写时:
in al,20h                                ;从20h端口读入一个字节
in 20h,al                                ;往20h端口写入一个字节
对256~65535的端口进行读写时,端口号放在dx中:
mov dx,3f8h                        ;将端口号3f8h送入dx
in al,dx                                ;从3f8h端口读入一个字节
out dx,al                                ;向3f8h端口写入一个字节
……
上面有几个问题没有弄清,脑袋已经被弄糊涂了。有关“8位端口与16位端口的区别”相关说法。
说法1:搜索百度时,有的人说8位端口就是编号0~255以内的端口,16位端口就是编号256~65535的端口。我想这是从端口地址的编号位数来说的8位和16位端口。但是实际上会是这么简单吗?如果仅仅是从地址编号位数来区别某个端口是8位端口还是16位端口,这似乎显得太儿戏,而且实际意义也不大。但我也不能肯定这个说法正确与否,或许这个东西本来意义就是这个,只是我想的太复杂?!

说法2:有的人说,I/O端口本来没有多少位这个说法,I/O端口就像一个内存单元一样,用地址总线来选择单元,用数据总线传输数据。前面已经说了,在PC系统中,端口地址是16位,数据是8位。端口地址就是端口号,是用16位二进制数表示的,在I/O指令中,小于等于255的端口号可以用8位立即数表示,省略高8位。

说法3:还有人说,用十六位来存放3f8h的端口号,但不能说明这个端口就是十六位的,这话要搞清楚,否则很容易造成混淆。

说法4:
有一个百度问答内容:
问:I/O端口的位宽是指什么?比如8位的端口和16位的端口的区别是什么?
答:I/O端口的位宽是指I/O端口一次能传递的数据宽度
      8位的端口一次能传输1字节
     16位的端口一次能传输2字节

我的理解: “访问8位端口时用al,访问16位端口时用ax。”,既然有这句话,同时还有 “只能使用ax或al来存放从端口读入的数据或要发送到端口中的数据”这句话,那是不是也就代表从某端口读来的(或往某端口写入的)数据有8位和16位之分。也就是说这个端口是8位端口还是16位端口,不是从端口编号来说的,而是从端口存放的数据(或者说叫寄存器?)来说的?

请各位解惑~~~~~~
[/b]

同时还有如下的例子解释,这些解释,又与我上面的理解不同
      
       IN AL,21H;表示从21H端口读取一字节数据到AL
  IN AX,21H;表示从端口地址21H读取1字节数据到AL,从端口地址22H读取1字节到AH
  MOV DX,379H
  IN AL,DX ;从端口379H读取1字节到AL
  OUT 21H,AL;将AL的值写入21H端口
  OUT 21H,AX;将AX的值写入端口地址21H开始的连续两个字节。(port[21H]=AL,port[22h]=AH)
  MOV DX,378H
  OUT DX,AX ;将AH和AL分别写入端口379H和378H


两行的红色例子解释,似乎又在表明,每次读取或者写入的都是一个字节(8位),不存在一个读取或者写入两个字节(16位)的情况

貌似又反证明了8位端口就是编号地址0~255的端口,16位端口就是编号地址256~65535的端口,

证明了8位和16位的区别其实就是编号地址长度的区别这么简单而已



实在是搞糊涂了~~~~~~~~~~

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-10-28 15:53:28 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-10-30 17:15:02 | 显示全部楼层
竟然没一个人鸟我
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-10-31 10:21:11 | 显示全部楼层
今天还是没人?我自己都琢磨得差不多了。。。。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-6 21:38:13 | 显示全部楼层
mov dx,3f8h                        ;将端口号3f8h送入dx
in al,dx                                ;从3f8h端口读入一个字节
out dx,al                                ;向3f8h端口写入一个字节

为什么不是
mov dx,3f8h                        ;将端口号3f8h送入dx
in ax,dx                              
out dx,ax                               ;就是ax和al
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-6 22:59:42 | 显示全部楼层
我居然现在才看到这个问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-3 16:24:04 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-24 02:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表