第一个程序
- virtualbox创建虚拟机,虚拟一块.vhd硬盘,写一个asm程序,
nasm -f bin 4-2.asm -o 4-2.bin,nasm将asm程序编译为bin二进制文件,可以通过hexView工具查看实际文件。有了vhd虚拟硬盘和bin文件,通过fixvhdwr工具将bin文件写入vhd硬盘的第一个扇区中,此时,启动虚拟机,出现asm字样.代码如下.1
2
3
4
5
6
7mov ax,0xb800
mov ds,ax
mov byte [0x00],'a'
mov byte [0x02],'s'
mov byte [0x04],'m'
times 510 - ($-$$) db 0
dw 0xaa55 ;引导扇区的结束符
8-1源码框架
1 | app_start equ 100 ;声明常数,将要从app_start扇区读取用户程序 |
8-2源码框架
1 | ;段重定位表 已经在mbr引导程序中将段表更新了,之后只需要直接调用段表名就可以得到每一个段的实际物理地址 |
检测点
- 9.2中
info ivt;显示所有的中断程序的段基址和偏移地址,info ivt [第几个中断向量],查看具体的中断程序的信息。也可以根据xp命令来计算某一个中断程序的入口地址,例如要查看0x70号中断的入口地址,其在中断向量表中的位置是0x1c0,xp/10 0x1c0可以查看70号中断的入口地址。查看之后,不用管低端和高端,直接读取。另一个不用管低端和高端的是u反汇编命令。报错信息
- 将8-1,8-2同时写入vhd硬盘时,用bochsdebug调试会出现ata0-0: could not open hard drive image file ‘.vhd’,删除vhd.lock文件即可运行.
15章源码框架
mbr
1 | ; 计算gdt所在的段地址 |
core
1 | ; sys_routine例程段中包含着put_string字符串显示例程。 |