升级 2

 
  

还记得我们之前的步骤吗?
写到汇编代码,用EditPlus编译。
再打开引导区文件修改工具,把编译后的.bin文件修改成512个字节大小,并且最后两个字节修改成0x55和0xAA.


再用虚拟机硬盘写入工具,把修改后的.bin文件写入到Geek.vhd中。
要是直接看效果的话,启动虚拟机。
如果要调试的话,就得启动Bochs-2.11 BUG 里面的 bochsdbg进行调试。

并且用b 0x07000下断点
c 执行到断点位置。
n 开始单步执行
info r 查看寄存器

……


实在实在是太繁琐了。



mov ax,0xb800
mov es,ax

 

;下面的代码代表屏幕上输出Hello  注释

mov byte[es:0x0000],'H'
mov byte[es:0x0001],0x01 ;黑底白字 0000 0110
mov byte[es:0x0002],0x65 ;字母e的16进制
mov byte[es:0x0003],0x07 ;黑底白字
mov byte[es:0x0004],'l'
mov byte[es:0x0005],0x07
mov byte[es:0x0006],'l'
mov byte[es:0x0007],0x07
mov byte[es:0x0008],'o'
mov byte[es:0x0009],0x07
AA: jmp near AA

times 510-($-$$) db 0
db 0x55,0xaa

 

所以,times 510-($-$$) db 0 表示填充 510-($-$$) 这么多个字节的0
这里面的$表示当前指令的地址,$$表示程序的起始地址(也就是最开始的7c00),所以$-$$就等于本条指令之前的所有字节数。510-($-$$)的效果就是,填充了这些0之后,从程序开始到最后一个0,一共是510个字节。再加上最后的dw两个字节(0xaa55是结束标志),整段程序的大小就是512个字节,刚好占满一个扇区。

posted @ 2017-07-05 18:10  随意就好欧巴  阅读(252)  评论(0编辑  收藏  举报