WZXZLY 发表于 2010-11-17 12:33

X86平台工程师进

我想问I386地址对齐问题。例如一条指令MOV EAX,(0001H)
这里用了直接寻址方法(ARM中好想没有这种寻址法,而是用伪指令LDRR0,=ADDR)这条指令就是说访问内存中从0001(16进制)开始的四字节,之所以为四字节因为是EAX,I386也是32位处理器,一次也是访问4字节倍数的地址,所以MOV要取内存中0001,0002,0003,0004,而000004属于下一个四字节,(0000-0003为4字节;0004-0007为下一四字节)这样一条指令难道执行时要寻址两次还是出错呢??很费解。麻烦给点解答
还有一个问题,保护模式下,对IO空间的地址访问。I386分IO空间与内存空间,如果把IO设备放在了内存空间就可以通过影射使用虚拟地址访问,但是如果不使用IO内存映射,直接把设备放在IO空间那么我们只能用IN,OUT指令访问,但是为什么保护模式下IN,OUT对IO空间的访问使用的是物理地址,是不是I386所谓保护模式只是针对内存空间》???

accessory 发表于 2010-11-18 03:01

1.我觉得是寻2次. 可以看看这篇: http://linux.chinaunix.net/bbs/thread-1145097-1-40.html

2. 物理地址和保护模式没有关系啊. 在保护模式下, LINUX 可以不让 USER LEVEL APP 访问 IO PORT. 虽然打开访问后, 使用的地址还是物理地址.

garyv 发表于 2010-11-18 16:21

回复 1# WZXZLY


    x86支持非4字节对齐访问方式,其他RISC体系大多不支持。

x86的内存空间和IO空间是两种不同的地址空间,IO空间直接用其物理地址访问,内存空间访问需做remap
页: [1]
查看完整版本: X86平台工程师进