答案 0 :(得分:3)
I / O端口类似类似于内存地址,但使用IN和OUT指令以不同方式访问。关于现代硬件的完整故事非常复杂,但在实模式下访问传统设备非常简单。以下是如何从键盘(技术上,键盘控制器)读取扫描代码的示例。
Wait:
IN AL, 64H ; read keyboard status port
AND AL, 1 ; a key is ready when bit 0 is set
JZ Wait
IN AL, 60H ; read scan code
端口号60H和64H是由IBM在您出生之前的某个时间建立的,但从那时起,每台PC都以向后兼容的名义模仿了这种行为。其他传统设备也有固定的端口号。如果你有一个软盘驱动器,这是一个有趣的:
MOV DX, 3F2H ; 3F2 is the floppy controller's control port
MOV AL, 10H ; turn on bit 4
OUT DX, AL ; start the floppy motor!
对于大于8位的端口号(例如3F2),您必须先将端口号放在DX中(只是指令集的一个怪癖)。同样,随着IBM PC的推出,3F2的分配在很久以前得到了解决。
在现代公交车上访问今天的设备要复杂得多。
答案 1 :(得分:0)
Hardwareports是硬件接口。每个端口号都映射到特定设备。 在保护模式下,您无法访问端口,这必须在内核模式下完成。
在DOS模式下,你可以这样做。
答案 2 :(得分:0)
无法以与内存相同的方式处理I / O.
I / O和内存有一个公共地址总线。但是,您是否访问内存或I / O取决于您使用的说明。有M / IO引脚决定一个或另一个。 然而,整个机制要复杂得多,并且在一定程度上取决于系统的设计。对于我最喜欢的设计 - 如果你想使用mov指令编程设备,你需要编程设备地址解码器,以便设备开始响应这些地址范围。