系统IO地址表
PC机中仅使用A[0]--A[9]地址位来表示I/O地址,即可有1024个地址。前512个供系统电路使用,后512个供扩充插槽使用。当A[9]=0时表示为系统板上的I/O地址;A[9]=1 时表示为扩充插槽接口卡上的地址。
| 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地址范围 | 用途 | |
| 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
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...
操作系统分区类型大全
大概是最全的操作系统分区类型列表了:)
| 分区类型 | 操作系统 | 分区类型 | 操作系统 | |
| 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
以下所说的书指的是杨季文的《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中。

