在学微机的时候,王爽《汇编语言》这本书上写著:从CPU的角度,可用将这些寄存器当作是埠,会对它们进行统一编址,从而建立了一个统一的埠地址空间,每一个埠在地址空间都有一个地址。我们在访问埠的时候其实是CPU通过埠地址来定位埠的,因为埠所在的晶元和CPU通过汇流排相连,所以埠地址和内存地址一样,通过地址汇流排来传送。

在学网路编程的时候,也就是计算机网路的时候,说埠号有65535个,那么65535个埠号对应著65535个计算机内部的寄存器吗


两个埠虽然文字描述相同,但实际上是完全不同的东西。

网路中所说的埠是TCP/IP协议的一部分,是软体(操作系统调用相关网路协议的服务程序)实现的。

而汇编里所说的埠,是硬体实现的,比如IN OUT 等汇编语句,会告诉CPU应该去什么物理地址读写数据。


各种存储器都和CPU的地址线、数据线、控制线相连,CPU在操控它们的时候都要把它们当作内存来对待,把它们总地会去看做是一个由若干存储单元组成的逻辑存储器,这个逻辑存储器,我们把它称为内存地址空间

在PC机系统当中,和CPU通过汇流排相连的晶元除了各种的存储器之外,其实还有些其他的晶元,比如说下面三种

  • 1、各种介面卡(比如,网卡、显卡)上的介面晶元,它们控制介面卡进行工作
  • 2、主板上面的介面晶元,CPU通过它们对部分外设进行访问
  • 3、其他晶元就是用来存储相关的系统信息,或者进行相关的输入输出的处理

其实在这些晶元当中,都是有一组可用由CPU进行读写的寄存器的,这些寄存器,它们在物理上可能处于不同的晶元当中,它们通过晶元和CPU的汇流排相连接,CPU对它们进行读或写的时候都通过控制线向它们所在的晶元发出埠读写命令

从CPU的角度,可用将这些寄存器当作是埠,会对它们进行统一编址,从而建立了一个统一的埠地址空间,每一个埠在地址空间都有一个地址

我们在访问埠的时候其实是CPU通过埠地址来定位埠的,因为埠所在的晶元和CPU通过汇流排相连,所以埠地址和内存地址一样,通过地址汇流排来传送

对于埠的读写操作我们不能使用mov、push、pop等内存读写的指令,埠的读写指令只有两条分别是in和out,分别是用于从埠读取数据和往埠写入数据

从埠读入一个位元组的数据,比如说从20h埠读入一个位元组的数据

in al,20h

执行这条指令和汇流排相关的操作如下所示

  • 1、CPU通过地址线将地址信息20h发出
  • 2、CPU通过控制线发出埠读命令,选中埠所在的晶元,并且去通知它,将要从中读取数据
  • 3、埠所在的晶元将20h埠中的数据通过数据线传入CPU

从埠写入一个位元组的数据,比如说从20h埠写入一个位元组的数据

out 20h,al

需要注意的是在in和out指令当中,只能使用ax或者是al来存放从埠中读入的数据或者要发送到埠中的数据,访问8位的埠的时候需要使用的就是al,访问16位埠的时候就是用的是ax


网路的埠是一个逻辑概念,并不是物理概念,就和你的电子邮箱地址一样

虽然王爽在书中将寄存器比作埠,但是其实他们完全是不搭边的东西。

CPU内部的寄存器相当于一个一个仓库的实体,用于存放程序临时的数据。

而TCP/UDP的埠是 TCP/UDP协议中用于数据包身份识别的一种方式方法。


你这个还是先了解一下计算机系统结构吧,这隔著好多层呢


两个埠真不是一个意思呢。

因为寄存器没有65535个,它们是cpu的一部分,也仅cpu可以访问。而网路上的埠却是外部网路访问计算机的通道,只是一个逻辑上的概念。


推荐阅读:
相关文章