⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 5.txt

📁 对I386硬件平台的详尽分析,对LINUX内核学习有很大帮助
💻 TXT
字号:
> ^^^^^^^ ^^^^^^^^^^^ ^^^ ^^^ ^^^ 
  > ↑ ↑ ↑ ↑ ↑ 
  > │ │ └──────93=可读写区段 
  > │ │ │ │ 
  > └───────────┴────0fffff+1=1MB (Limits) 
  > │ │ 
  > └─────────┴──12345678 (Base) 
  > 
  > 
  > 它所代表的意思是如下图所示∶(每组 8 byte) 
  > 
  > ┌──────────────────────┐ 
  > 1│ Limit bit 0-15 │ 0 byte 
  > ├──────────────────────┤ 
  > 3│ Base bit 0-15 │ 2 
  > ├──────────┬───────────┤ 
  > 5│ 存取权 │ Base bit 16-23 │ 4 
  > ├──────────┼────────w──┤ 
  > 7│ Base bit 24-31 │G│..│limit bit 16-19│ 6 
  > └──────────┴───────────┘ 
  > "G"代表 Limit 的单位是 Byte 或 PAGE(4K) 
  > 
  > 所以.... 
  > 
  > #0000 Segment not present. 
  > #0008 Base=000B8000 Limit=0000FFFF Flags=93 USE32 Byte granularity 
  > #0010 Base=12345678 Limit=000FFFFF Flags=93 USE32 Byte granularity 
  > ^^^^^Selector ^^存取权 
  > 
  > 
  > 
  > 设定完後 ,就是切入保护模式 ,只要将 CR0 暂存器的 Bit0 设为 '1' ,再用一个 
  > 跳越指令 ,就进入保护模式了。 
  > 
  > 
  > --------------------------------------------------------------------------- 
  > 讲不懂没关系 ,现在来看看实例 ,这样比较容易懂.. 
  > 
  > C:\>386MICE SAMPLE.EXE 
  > -G 1AE 
  > EAX=00044A1C EBX=00000003 ECX=00000000 EDX=00000100 
  > ESI=00000000 EDI=00000000 EBP=00000000 ESP=0000FFFE 
  > DS=4A1C SS=4A1C ES=4A1C FS=4A0C GS=4A0C 
  > -U 1AE 
  > 4A1C:000001AE CLI 
  > 4A1C:000001AF LGDT CS:[BX] ──→ DUMP CS:[BX] ──→ 
  > 4A1C:00000003 18 00 C9 A1 04 00 <--- GDT 表放在 0004A1C9 长度 18h 
  > 4A1C:000001B3 MOV 
  > EAX,CR0 │ 
  > 4A1C:000001B6 OR 
  > EAX,1 ↓ 
  > 4A1C:000001BA MOV CR0,EAX 
  > 4A1C:00000009 00 00 00 00 00 00 00 00-FF FF C0 A1 04 9B 00-00 
  > 4A1C:000001BD JMP 01C0 
  > 4A1C:00000010 FF FF 00 80 0B 93 00 00 (GDT表) 
  > 4A1C:000001BF NOP 
  > 4A1C:000001C0 MOV AX,0008H 
  > 4A1C:000001C3 MOV DS,AX 
  > 4A1C:000001C5 MOV WORD PTR DS:[0000H],7041h 
  > 
  > 
  > 由上面的 GDT 表知道 此程式共规划了三个区段 ,其中 0000 区段是不使用 
  > 故区段的表示方式如下∶ 
  > 
  > #0000 Segment not present. 
  > #0008 Base=0004A1C0 Limit=0000FFFF Flags=9B USE32 Byte granularity 
  > #0010 Base=000B8000 Limit=0000FFFF Flags=93 USE32 Byte granularity 
  > 
  > 
  > 
  > -G 1BD 
  > EAX=00000001 EBX=00000003 ECX=00000000 EDX=00000100 
  > ESI=00000000 EDI=00000000 EBP=00000000 ESP=0000FFFE 
  > DS=4A1C SS=4A1C ES=4A1C FS=4A0C GS=4A0C 
  > 4A1C:000001BD JMP 01C0 
  > 
  > -T (这儿就算是进入保护模式了) 
  > EAX=00000001 EBX=00000003 ECX=00000000 EDX=00000100 
  > ESI=00000000 EDI=00000000 EBP=00000000 ESP=0000FFFE 
  > DS=0000 SS=0000 ES=0000 FS=0000 GS=0000 
  > 0000:000001C0 MOV AX,0008H 
  > 0000:000001C3 MOV DS,AX 
  > 0000:000001C5 MOV WORD PTR DS:[0000H],7041h 
  > 
  > 
  > 
  > 因为进入保护模式 ,所以 Selector 的区段应该要去查 GDT 表格 ,这个例 
  > 子的 Selector 0010 的 Base = B8000 ,所以... 
  > 保护模式下的 0010:00000000 = 真实模式下的 B800:0000 ,这样您懂了吗? 
  > 
  > 在行号 1C5 的位址有一行写入 7041 的动作 ,就是在萤幕秀 'A' 反白字元. 
  > 
  > 最後要进入真实模式时 ,只要将 CR0 的 Bit0 设为 '0' ,再用一个跳越指 
  > 令就回到真实模式了.. 
  > 
  > -------------------------------------------------------------------------- 
  > 後记: 
  > 若有问题 ,烦在本站『站内信箱』留信给我....尽量避免使用网路信 , 
  > 且尽快提出 ,否则竣U来的课程将会更难懂 ,如果你是完全不懂 ,麻烦也留 
  > 信给我 ,我会再把这一章节再细细重新说明。至於对组合语言不懂 ,或是对 
  > 保护模式没兴趣的人 ,本人就帮不上忙了。 
  > 
  > A∶下一次笔者将继续解说 V86 模式下的工作切换 
  > B∶等级权限 / 拦 I/O 
  > 
  > ┌───────────────────────────────────┐ 
  > │ Soft Bugger 软体蛀虫 90:90/2 软体新技术的实行者 │ 
  > │ BBS:02-5955461 24HR ID:Werong Ho -- 软蛀 -- │ 
  > └──────────w────────────────────────┘ 
  > 
  
  
  
  > 
  > ┌┐┌┐∞ 
  > 【 80386 保护模式简介三 】 ┘└┘└┘ 
  > ========================================================================== 
  > 前言∶ 
  > 
  > 前面两集主要是要告诉各位有关 IDT.GDT 的用法 ,虽M这样已经可以简单的进 
  > 入保护模式 ,但是它还不足以让你撰写程式 ,因此笔者还必需往下继续叙说 ,不过再 
  > 往下讲之前 ,又有一票烦且杂的观念要说 ,本篇还是继续在"观念"上打转 ,读者千万 
  > 不要以为本篇又是「干古」 ,如果本篇不懂的话 ,後面的精彩文章您大概也看不懂 , 
  > 笔者会尽量把文章写到容易懂的范围。 
  > 
  > -------------------------------------------------------------------------- 
  > ┌────────┐ 
  > │80386 暂存器介绍│ 
  > └────────┘ 
  > 
  > 80386 的暂存器除了扩充成 32 位元以外 ,亦增加了许多新獐 s器 ,除了一般 
  > 使用者暂存器(AX.BX....SI.DI)各位已经了解以外 ,也增加了系统暂存器、以及扩充 
  > 的旗标 暂存器....等等。 
  > 
  > 
  > A.使用者暂存器 → EAX.EBX.E

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -