一.基础
8086显存在内存中的结构图(8086可以访问1兆字节的内容)
二.代码
编写新的汇编指令编译,写入虚拟硬盘主引导扇区(代码如下)
start: ;标号
mov ax, 0xb800 ;0xb800是文本模式下显存的地址 第一条指令地址的物理地址为0x7c00
mov ds, ax
mov byte [0x00], 0x41 ;字符A的ASCII编码
mov byte [0x01], 0x04 ;黑底红字,无闪烁
mov byte [0x02], 's' ;等同于 mov byte [0x02], 0x73
mov byte [0x03], 0x04
mov byte [0x04], 's'
mov byte [0x05], 0x04
mov byte [0x06], 'e'
mov byte [0x07], 0x04
mov byte [0x08], 'm'
mov byte [0x09], 0x04
mov byte [0x0a], 'b'
mov byte [0x0b], 0x04
mov byte [0x0c], 'l'
mov byte [0x0d], 0x04
mov byte [0x0e], 'y'
mov byte [0x0f], 0x04
mov byte [0x10], '.'
mov byte [0x11], 0x04
jmp 0x0000:0x7c00 ; jmp 段地址:偏移地址(形成循环)跳到新段执行,段间跳转
current: ;标号
times 510-(current-start) db 0
db 0x55, 0xaa
三.bochs
启动bochsbg,如出现下图情况
找到你的虚拟硬盘目录删掉.lock文件如图
重新启动bochsbg
输入xp /512xb 0x7c00如图 此时还未写入
执行两次s指令执行前两条指令
设置断点键入c
重新键入xp /512xb 0x7c00如图 ROM BIOS已经把主引导扇区读取到0x7c00处
此时执行xp /16xb 0xb8000 指令对应显示内容如图
由于s不能直接看到显示 可用n或next观察到显示如图输入四次n 如同
继续键入n到如图位置可看到bochs屏上的图中的Assembly.
至此结束调试
但也可使用另一种方法----用u指令显示32条反汇编这样可以直接设置断点执行 不用重复键入n 如图
如需查看bochs指令大全 请键入help 如需查看某条指令键入help 指令