2

我写了一些代码来写入引导扇区并显示'L'.

mov ax,0xb800
mov es,ax
mov byte [es:0x00],'L'
mov byte [es:0x01],0x07

该段0xb800是用于显存的,所以我放入'L'它并将'L'显示。

如果我使用 VirtualBox,它会很好用,但如果 bochs 会显示。

nasm -f bin boot.asm -o boot.bin用来构建引导加载程序。

  1. 我在windows 7和windows 8上运行,没问题。

-我创建了一个VHD磁盘映像,然后构建代码并将其写入磁盘映像,之后我在 VirtualBox 中启动并且它工作。

2.我在带有 Bochs 的 Ubuntu 14.04 i386 虚拟机上运行,​​它不起作用。我的bochs设置:(Bochs x86 Emulator 2.4.6

megs:32
romimage: file=/usr/share/bochs/BIOS-bochs-latest
vgaromimage:file=/usr/share/bochs/VGABIOS-lgpl-latest
floppya:1_44=floppy.img,status=inserted
boot:a
mouse:enabled=0
display_library:sdl

我用 构建代码NASMfloppy.imgdd if=boot.bin of=floppy.img. 启动 Bochs 后,什么都没有显示,只是光标快速闪烁。

这些我的完整代码:

         mov ax,0xb800                 
         mov es,ax

         ;just display string "Label offset:"
         mov byte [es:0x00],'L'
         mov byte [es:0x01],0x07
         mov byte [es:0x02],'a'
         mov byte [es:0x03],0x07
         mov byte [es:0x04],'b'
         mov byte [es:0x05],0x07
         mov byte [es:0x06],'e'
         mov byte [es:0x07],0x07
         mov byte [es:0x08],'l'
         mov byte [es:0x09],0x07
         mov byte [es:0x0a],' '
         mov byte [es:0x0b],0x07
         mov byte [es:0x0c],"o"
         mov byte [es:0x0d],0x07
         mov byte [es:0x0e],'f'
         mov byte [es:0x0f],0x07
         mov byte [es:0x10],'f'
         mov byte [es:0x11],0x07
         mov byte [es:0x12],'s'
         mov byte [es:0x13],0x07
         mov byte [es:0x14],'e'
         mov byte [es:0x15],0x07
         mov byte [es:0x16],'t'
         mov byte [es:0x17],0x07
         mov byte [es:0x18],':'
         mov byte [es:0x19],0x07

         mov ax,number                 
         mov bx,10

         ;set base address to ds
         mov cx,cs
         mov ds,cx

         ;below codes just display the offset of label "number" in decimal base
         mov dx,0
         div bx
         mov [0x7c00+number+0x00],dl   

         xor dx,dx
         div bx
         mov [0x7c00+number+0x01],dl   

         xor dx,dx
         div bx
         mov [0x7c00+number+0x02],dl   

         xor dx,dx
         div bx
         mov [0x7c00+number+0x03],dl   

         xor dx,dx
         div bx
         mov [0x7c00+number+0x04],dl   

         mov al,[0x7c00+number+0x04]
         add al,0x30
         mov [es:0x1a],al
         mov byte [es:0x1b],0x04

         mov al,[0x7c00+number+0x03]
         add al,0x30
         mov [es:0x1c],al
         mov byte [es:0x1d],0x04

         mov al,[0x7c00+number+0x02]
         add al,0x30
         mov [es:0x1e],al
         mov byte [es:0x1f],0x04

         mov al,[0x7c00+number+0x01]
         add al,0x30
         mov [es:0x20],al
         mov byte [es:0x21],0x04

         mov al,[0x7c00+number+0x00]
         add al,0x30
         mov [es:0x22],al
         mov byte [es:0x23],0x04

         mov byte [es:0x24],'D'
         mov byte [es:0x25],0x07

   infi: jmp near infi                 

  number db 0,0,0,0,0

  times 203 db 0
            db 0x55,0xaa
4

0 回答 0