learn x86 asm from real mode to protect mode.
本项目是学习李忠的《X86汇编语言 从实模式到保护模式》一书的笔记和代码。重点是测试和运行代码。
本次学习环境是基于vmware上的linux。并在linux中使用bochs。因此没有使用书中作者提供的工具。至于写汇编代码到磁盘文件,则直接使用linux的dd命令。参见环境搭建部分。
- 系统: debian
- 汇编器:nasm 2.11.05
- 模拟器:bochs 2.6.8
生成磁盘文件供bochs使用。
# gen c.img
bximage
# 1 #ENTER for create disk image
# ENTER hd default
# ENTER flat defalt
# ENTER 10MB defalt
# ENTER c.img defalt
# The following line should appear in your bochsrc:
# ata0-master: type=disk, path="c.img", mode=flat
bochs启动脚本: run_bochs.sh bochs配置文件: bochsrc
有如上配置后,当写好一个引导文件mbr.asm,命令:
./run_bochs.sh mbr.asm
即可启动测试。
本章因为有两个文件,并且用户程序需要加载到100号硬盘文件的扇区。 因此编写一个新的脚本来完成这个工作。脚本需要两个参数。分别是mbr代码,做为加载器。 另一个是被加载的用户程序。user_bochs.sh脚本如下:
#!/bin/bash
if [ $# -ne 2 ];then
echo -e "usage: \n\t$0 mbr_src.asm user_src.asm\n"
exit 1
fi
# disk c img
nasm -f bin $1 -o c.bin
echo ""
dd if=c.bin of=c.img bs=512 count=1 conv=notrunc
# user img
nasm -f bin $2 -o user.bin
echo ""
dd if=user.bin of=c.img bs=512 count=40 seek=100 conv=notrunc
# 通过seek=100来指定写放需要跳过的扇区数。
bochs
此脚本,第九章也可以使用。
从第十一章开始,各章程序越来越长,虽然书上已经有详细说明,以及部分配图。 但还是不易看懂。故每章都有彩色配图。即给出内存结构,也给出相应的数据结构。 以方便读懂程序。比较图可以更直观的获得最整体的印象和思路。
为避免首页文档大量图片。相关附图均放在各章目录下。