x86 汇编语言 - 从实模式到保护模式 笔记
段地址:偏移地址
16 位寄存器
通用寄存器
AX 累加器(Accumulator)
BX 基址寄存器(Base Address Register)
CX 计数器(Counter)
DX 数据(Data)寄存器
SI 源索引寄存器(Source Index)
DI 目标索引寄存器(Destination Index)
BP 基址指针寄存器 (Base Pointer)
SP 栈寄存器 (Stack Pointer)
段寄存器
代码段(Code Segment,CS)
数据段(Data Segment,DS)
附加段(Extra Segment, ES)
栈段 (Stack Segment,SS)
指针寄存器
IP:指令指针(Instruction Pointer)
20 位的物理地址:1MB 的内存
16 位的段地址 << 4 + 16 位的偏移地址
算术逻辑单元 (arithmetic and logic unit) ALU
专业名词
动态随机访问存储器(Dynamic Random Access Memory,DRAM)
只读存储器(Read Only Memory,ROM)
软盘(Floppy Disk)
硬盘(Hard Disk,HDD)
“转/分钟”(Round Per Minute,RPM)
磁道(Track)
柱面(Cylinder)
扇区(Sector)
主引导记录(Master boot record,缩写为 MBR)
主引导扇区: 第一个扇区是 0 面 0 道 1 扇区,或者说是 0 头 0 柱 1 扇区
虚拟机(Virtual Machine,VM)
主引导扇
主引导扇区(Main Boot Sector,MBR)
显示存储器(Video RAM:VRAM),简称 显存
计算机启动
通电
读取 ROM 里面的 BIOS,用来检查硬件
硬件检查通过
BIOS 根据指定的顺序,检查引导设备的第一个扇区(即主引导记录),加载在内存地址 0x7C00
主引导记录把操作权交给操作系统
当时,搭配的操作系统是86-DOS。这个操作系统需要的内存最少是 32KB。我们知道,内存地址从 0x0000 开始编号,32KB 的内存就是0x0000~0x7FFF
。
8088 芯片本身需要占用0x0000~0x03FF
,用来保存各种中断处理程序的储存位置。(主引导记录本身就是中断信号 INT 19h 的处理程序。)所以,内存只剩下0x0400~0x7FFF
可以使用。
**为了把尽量多的连续内存留给操作系统,主引导记录就被放到了内存地址的尾部。**由于一个扇区是 512 字节,主引导记录本身也会产生数据,需要另外留出 512 字节保存。所以,它的预留位置就变成了:
计算机启动后,32KB 内存的使用情况如下。
+--------------------- 0x0| Interrupts vectors+--------------------- 0x400| BIOS data area+--------------------- 0x5??| OS load area+--------------------- 0x7C00| Boot sector+--------------------- 0x7E00| Boot data/stack+--------------------- 0x7FFF| (not used)+--------------------- (...)
在屏幕上显示文字
字符在屏幕上的显示原理
文本模式下显存到内存的映射
80×25 的文本模式。在这种模式下,屏幕上可以显示 25 行,每行 80 个字符,每屏总共 2000 个字符。
0xB8000~0xBFFFF 这段物理地址空间,是留给显卡
初始化段寄存器
标号
伪指令(pseudo Instruction)
DB: 声明字节(Declare Byte)
DW(Declare Word)用于声明字数据
DD(Declare Double Word)用于声明双字(两个字)数据
DQ(Declare Quad Word)用于声明四字数据
8086 处理器的寻址方式
寄存器寻址
立即寻址
内存寻址
直接寻址
基址寻址
BX
BP
变址寻址
SI
DI
基址变址寻址
硬盘和显卡的访问和控制
声明常数(const): 不占用任何汇编地址
端口
评论