步骤:
1.直接操作显卡
2.使用硬盘
1.直接操作显卡
修改mbr.S为:
SECTION MBR vstart=0x7c00 ;起始地址编译在0x7c00 mov ax,cs mov ds,ax mov es,ax mov ss,ax mov fs,ax mov sp,0x7c00 mov ax,0xb800 ; ax为文本信号起始区 mov gs,ax ; gs = ax 充当段基址的作用 ;ah = 0x06 al = 0x00 想要调用int 0x06的BIOS提供的中断对应的函数 即向上移动即完成清屏功能 ;cx dx 分别存储左上角与右下角的左边 详情看int 0x06函数调用 mov ax,0600h mov bx,0700h mov cx,0 mov dx,184fh ;调用BIOS中断 int 0x10 ;新增功能 直接操作显存部分 ;预设输出Hell0ER. mov byte [gs:0x00],'L' ;低位字节储存ascii字符 小端储存内存顺序相反 mov byte [gs:0x01],0xA4 ;背景储存在第二个字节 含字符与背景属性 mov byte [gs:0x02],'H' mov byte [gs:0x03],0xA4 mov byte [gs:0x04],'e' mov byte [gs:0x05],0xA4 mov byte [gs:0x06],'l' mov byte [gs:0x07],0xA4 mov byte [gs:0x08],'l' mov byte [gs:0x09],0xA4 mov byte [gs:0x0A],'0' mov byte [gs:0x0B],0xA4 mov byte [gs:0x0C],'E' mov byte [gs:0x0D],0xA4 mov byte [gs:0x0E],'R' mov byte [gs:0x0F],0xA4 jmp $ ;于此处死循环 times 510 - ($ - $$) db 0 db 0x55,0xaa
保存后还是执行老步骤:
nasm -o mbr.bin mbr.S
dd if=mbr.bin of=hd60M.img bs=512 count=1 conv=notrunc
bin/bochs -f bochsrc.disk
记得再键入c,然后就会出现:
没问题,字符闪烁。
2.使用硬盘
标签:mbr,gs,操作系统,mov,还原,ax,byte,0xA4,真象 From: https://www.cnblogs.com/hell0er/p/17145643.html