系统IO地址表

Posted by dohkoos on September 14th, 2005 (642 views)

PC机中仅使用A[0]--A[9]地址位来表示I/O地址,即可有1024个地址。前512个供系统电路使用,后512个供扩充插槽使用。当A[9]=0时表示为系统板上的I/O地址;A[9]=1 时表示为扩充插槽接口卡上的地址。

系统I/O地址使用情况
I/O地址范围 用途   I/O地址范围 用途
0000-001F 8237A DMA控制器1   00E0-00EF  
0020-003F 8259A中断控制器1   00F0 重置协处理器总线
0040-005F 8253/8254定时/计数器(PIT)   00F1 设置协处理器总线
0060-006F 8042键盘控制器(AT)   00F2-00F7  
0070-007F CMOS RAM与NMI屏蔽寄存器(AT)   00F8-00FF 协处理器
0080-009F DMA页寄存器   0100-01EF  
00A0-00BF 8259A中断控制器2   01F0-01F7 硬盘
00C0-00DF 8237A DMA控制器2   01F8-01FF  

扩充插槽I/O地址使用情况
I/O地址范围 用途   I/O地址范围 用途
0200-0207 游戏卡I/O   0360-036F 保留
0208-020F     0370-0377  
0210-0217 扩展部件(仅XT用)   0378-037F 并行口打印机1
0218-021F     0380-038F SDLC 通信及同步通信1
0220-024F 保留   0390-039F  
0250-0277     03A0-03AF 同步通信2
0278-027F 并行口打印机2   03B0-03BF MDA 单色显示器
0280-02EF     03C0-03CF 保留
02F0-02F7 保留   03D0-03DF 彩色图形适配器
02F8-02FF 串行口2   03E0-03EF  
0300-031F 试验卡   03F0-03F7 软盘适配器
0320-032F 硬盘适配器   03F8-03FF 串行口1
0330-035F        

Related Posts

People who read this, also read...

POSIX Conventions for Command Line Arguments

Posted by dohkoos on September 10th, 2005 (736 views)

1. An option is a hyphen followed by a single alphanumeric character, like this: -o.
2. An option may require an argument (which must appear immediately after the option); for example, -oargument or -o argument.
3. Options that do not require arguments can be grouped after a hyphen, so, for example, -lst is equivalent to -t -l -s.
4. Options can appear in any order; thus -lst is equivalent to -tls.
5. Options can appear multiple times.
6. Options precede other nonoption arguments: -lst nonoption.
7. The -- argument terminates options.
8. The - option is typically used to represent one of the standard input streams.

Related Posts

People who read this, also read...

操作系统分区类型大全

Posted by dohkoos on January 31st, 2005 (512 views)

大概是最全的操作系统分区类型列表了:)

分区类型 操作系统 分区类型 操作系统
0x0 UNUSED 0x80 Old Minix
0x1 DOS FAT12 0x81 Minix/Old Linux
0x2 Xenix root 0x82 Linux Swap
0x3 Xenix user 0x83 Linux EXT2
0x4 DOS FAT16 < 32MB 0x84  
0x5 DOS Extended 0x85 Linux EXT
0x6 DOS FAT16 >= 32M 0x86  
0x7 HPFS/NTFS 0x87  
0x8 AIX 0x88  
0x9 AIX bootable 0x89  
0xA OS/2 boot manager 0x8A  
0xB OS FAT32 0x8B  
0xC DOS FAT Cyl > 1024 0x8C  
0xE DOS FAT system 0x8E  
0xF DOS big Extended 0x8F  
0x13   0x93 Amoeba
0x14   0x94 Amoeba BBT
0x25   0xA5 FreeBSD
0x26 [Hidden] 0xA6 OpenBSD
0x27   0xA7 NeXT STEP
0x29   0xA9 NetBSD
0x37   0xB7 BSDI
0x38   0xB8 BSDI Swap
0x40 Venix 80286 0xC0  
0x41 PPC PReP boot 0xC1  
0x47   0xC7 Syrinx
0x51 Novell ? 0xD1  
0x52 MicroPort 0xD2  
0x5B   0xDB CP/M
0x61   0xE1 DOS access
0x63 GNU hurd 0xE3 DOS R/0
0x64 Novell NetWare 0xE4  
0x65 Novell NetWare 0xE5  
0x6B   0xEB BeOS
0x72   0xF2 DOS secondary
0x75 PC/IX 0xF5  
0x7F   0xFF BBT

Related Posts

People who read this, also read...

Inside Protected Mode

Posted by dohkoos on November 23rd, 2004 (466 views)

以下所说的书指的是杨季文的《80X86汇编语言程序设计教程》。

在P.380,他说是“在实方式下被预取,在保护方式下被执行”。我认为他说的不太正确。现在我就来说说在进/出保护模式时究竟发生了什么?

在实模式时,通过指令lgdt fword ptr vgdtr把vgdtr处6个字节的内容装入GDTR中(记住,仅仅只是装入)。然后打开A20地址线(打开A20地址线是为了能存取1M以上的内存,和进不进保护模式其实没有必然的联系,也就是说不打开A20也能进入保护模式,只不过这时在保护模式下就不能存取1M以上的内存了)。然后把CR0寄存器的PE位置1,这是告诉CPU开启保护模式。

说到这里,我们就要先来说一说shadow cache了。shadow cache的layout可以看P.388。在实模式下的时候有些位是只读的。大家还记的实模式下取址的方法吗?对,段寄存器值*16+offset。是直接由MMU这样做然后再取址的吗?不是,实际上是:当你往段寄存器(比如说CS)送值后,MMU同时会把CS*16的值放入到CS的shadow cache中。这样以后只要不改变CS的值,那么,在同一段代码段中的寻址将是offset+(shadow cache中的段基址部分)。明白了吗?好,我们再回到上面。

mov eax, cr0
or eax, 1
mov cr0, eax

这段代码究竟做了什么呢?其实它做的是开放段寄存器shadow cache的每个位(也就是每个位的值都能修改了,而在实模式下有些位是只读的)。还有就是告诉CPU开启保护模式。记住,这时候在shadow cache中的内容还没有变,还是原来实模式下的地址值。

现在我们再来说说保护模式下的寻址。在386以后的机器,保护模式下的寻址其实和在实模式下的寻址是一样的,也是offset+(shadow cache中的段基址部分)。这样就可以理解为什么把CR0的PE位置1后还能执行后面的指令了。因为把CR0的PE位置1虽然使系统进入了保护模式。但因为在shadow cache中的内容还是实模式下的内容,所以才能在保护模式下执行实地址处的指令。然后呢!我们来看看jump指令做了什么?

jump selector, offset

这个指令做了什么呢?他的意思就是要跳到选择子为selector的段的偏移为offset处,执行那里的指令。这时CPU究竟做了什么呢?因为是段间跳转(就是带selector的跳转啦)。又因为现在是在保护模式下,所以MMU根据selector从GDT(知道LDGT的作用了吧)来找到段的真实段基址,然后再把它放入到相应段的shadow cache中。接着MMU再把offset和(shadow cache中的段基址部分)相加。这样就得到了下一个指令的地址。同样的道理,从保护模式出来时用

mov eax,cr0
and eax,0xFFFFFFFF
mov cr0,eax

使各段的shadow cache中一部分位固定,并且宣告进入实模式,即以后的寻址将采用实模式方式。然后通过执行jump cs,offset来把CS*16的值装入shadow cache中。

Related Posts

People who read this, also read...