写点什么

x86 汇编语言 - 从实模式到保护模式 笔记

作者:贾献华
  • 2022 年 7 月 03 日
  • 本文字数:1266 字

    阅读完需:约 4 分钟

段地址:偏移地址


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),简称 显存

计算机启动


  1. 通电

  2. 读取 ROM 里面的 BIOS,用来检查硬件

  3. 硬件检查通过

  4. BIOS 根据指定的顺序,检查引导设备的第一个扇区(即主引导记录),加载在内存地址 0x7C00

  5. 主引导记录把操作权交给操作系统


当时,搭配的操作系统是86-DOS。这个操作系统需要的内存最少是 32KB。我们知道,内存地址从 0x0000 开始编号,32KB 的内存就是0x0000~0x7FFF


8088 芯片本身需要占用0x0000~0x03FF,用来保存各种中断处理程序的储存位置。(主引导记录本身就是中断信号 INT 19h 的处理程序。)所以,内存只剩下0x0400~0x7FFF可以使用。


**为了把尽量多的连续内存留给操作系统,主引导记录就被放到了内存地址的尾部。**由于一个扇区是 512 字节,主引导记录本身也会产生数据,需要另外留出 512 字节保存。所以,它的预留位置就变成了:


0x7FFF - 512 - 512 + 1 = 0x7C00
复制代码


计算机启动后,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 这段物理地址空间,是留给显卡

初始化段寄存器

标号

lst 列表文件

伪指令(pseudo Instruction)

  • DB: 声明字节(Declare Byte)

  • DW(Declare Word)用于声明字数据

  • DD(Declare Double Word)用于声明双字(两个字)数据

  • DQ(Declare Quad Word)用于声明四字数据

8086 处理器的寻址方式

  • 寄存器寻址

  • 立即寻址

  • 内存寻址

  • 直接寻址

  • 基址寻址

  • BX

  • BP

  • 变址寻址

  • SI

  • DI

  • 基址变址寻址

硬盘和显卡的访问和控制

声明常数(const): 不占用任何汇编地址


equ
复制代码



端口



inout
复制代码


用户头像

贾献华

关注

及时当勉励 岁月不待人 2018.06.04 加入

https://2022.iosdevlog.com

评论

发布
暂无评论
x86汇编语言-从实模式到保护模式 笔记_7月月更_贾献华_InfoQ写作社区