• 升级 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个字节,刚好占满一个扇区。

  • 相关阅读:
    虚拟机CentOS 7 网络连接显示"线缆被拔出"
    sqlplus下删除退格,出现^H^H
    “服务器发送了一个意外的数据包。received:3,expected:20“问题的解决方法
    Oracle 12c创建PDB用户并设置默认表空间
    今日进度
    今日进度
    给王老师的建议
    今日进度
    今日进度
    每周总结
  • 原文地址:https://www.cnblogs.com/xiaodaxiaonao/p/7122818.html
Copyright © 2020-2023  润新知