如何用NASM调用位于后两个扇区的代码?
How to call code located at second two sectors with NASM?
也许我很愚蠢,什么都不知道,但我认为我做对了。我有两个文件,一个 boot.asm
,第二个 code.asm
。在 boot.asm
我只是启用了蓝色的视频模式填充屏幕并尝试加载位于两秒扇区的代码,但是当我尝试它时什么都没有发生并且无法获得找出我做错了什么,也许我读错了或者 code.asm
编码错误或者 boot.asm
编码错误.为什么我不能调用存储在两个第二扇区中的代码来完成它们。
有关更多信息,我将从 MBR 加载此代码,并且我想在两个第二扇区调用我的代码,因为我无法将它们全部放在一个扇区中,所以我问这个问题。
boot.asm
;bootloader
bits 16
org 0x7c00
;Here i try to load code located at second two sectors
Load_Code:
;---Setup segments
xor ax, ax ; AX=0
mov ds, ax ; DS=ES=0 because we use an org of 0x7c00 - Segment<<4+offset = 0x0000<<4+0x7c00 = 0x07c00
mov ax, es
mov ax, ss
mov sp, 0x7c00 ; SS:SP= 0x0000:0x7c00 stack just below bootloader
;---Read 2 sectors
mov bx, buffer ; ES: BX must point to the buffer
mov dh,0 ; head number
mov ch,0 ; track number
mov cl,2 ; sector number
mov al,2 ; number of sectors to read
mov ah,2 ; read function number
int 13h
;Graphics mode
Set_Video:
mov ax, 12h ; Graphics mode (640x480x16)
int 10h ; BIOS draw function
mov ah, 06h ; Scroll up function
xor al, al ; Clear entire screen
xor cx, cx ; Upper left corner CH=row, CL=column
mov dx, 3FFFh ; fill whole screen
mov bh, 11h ; blue background
int 10h ; BIOS draw function
call buffer
;Endless loop
.endloop:
hlt
jmp .endloop
;Fake MBR signature
MBR_Signature:
times 510 - ($ - $$) db 0
dw 0xAA55
buffer:
code.asm - second two sectors that contains this code - (this is just example code)
mov al, 15 ; color - white
mov ah, 0ch ; set pixel
mov cx, 0 ; x co-ordinate
mov dx, 0 ; y co-ordinate
int 10h ; BIOS draw function
mov al, 15 ; color - white
mov ah, 0ch ; set pixel
mov cx, 1 ; x co-ordinate
mov dx, 1 ; y co-ordinate
int 10h ; BIOS draw function
mov al, 15 ; color - white
mov ah, 0ch ; set pixel
mov cx, 2 ; x co-ordinate
mov dx, 2 ; y co-ordinate
int 10h ; BIOS draw function
mov al, 15 ; color - white
mov ah, 0ch ; set pixel
mov cx, 3 ; x co-ordinate
mov dx, 3 ; y co-ordinate
int 10h ; BIOS draw function
mov al, 15 ; color - white
mov ah, 0ch ; set pixel
mov cx, 4 ; x co-ordinate
mov dx, 4 ; y co-ordinate
int 10h ; BIOS draw function
mov al, 15 ; color - white
mov ah, 0ch ; set pixel
mov cx, 5 ; x co-ordinate
mov dx, 5 ; y co-ordinate
int 10h ; BIOS draw function
mov al, 15 ; color - white
mov ah, 0ch ; set pixel
mov cx, 6 ; x co-ordinate
mov dx, 6 ; y co-ordinate
int 10h ; BIOS draw function
mov al, 15 ; color - white
mov ah, 0ch ; set pixel
mov cx, 7 ; x co-ordinate
mov dx, 7 ; y co-ordinate
int 10h ; BIOS draw function
mov al, 15 ; color - white
mov ah, 0ch ; set pixel
mov cx, 8 ; x co-ordinate
mov dx, 8 ; y co-ordinate
int 10h ; BIOS draw function
mov al, 15 ; color - white
mov ah, 0ch ; set pixel
mov cx, 9 ; x co-ordinate
mov dx, 9 ; y co-ordinate
int 10h ; BIOS draw function
mov al, 15 ; color - white
mov ah, 0ch ; set pixel
mov cx, 10 ; x co-ordinate
mov dx, 10 ; y co-ordinate
int 10h ; BIOS draw function
mov al, 15 ; color - white
mov ah, 0ch ; set pixel
mov cx, 11 ; x co-ordinate
mov dx, 11 ; y co-ordinate
int 10h ; BIOS draw function
mov al, 15 ; color - white
mov ah, 0ch ; set pixel
mov cx, 12 ; x co-ordinate
mov dx, 12 ; y co-ordinate
int 10h ; BIOS draw function
mov al, 15 ; color - white
mov ah, 0ch ; set pixel
mov cx, 13 ; x co-ordinate
mov dx, 13 ; y co-ordinate
int 10h ; BIOS draw function
mov al, 15 ; color - white
mov ah, 0ch ; set pixel
mov cx, 14 ; x co-ordinate
mov dx, 14 ; y co-ordinate
int 10h ; BIOS draw function
mov al, 15 ; color - white
mov ah, 0ch ; set pixel
mov cx, 15 ; x co-ordinate
mov dx, 15 ; y co-ordinate
int 10h ; BIOS draw function
mov al, 15 ; color - white
mov ah, 0ch ; set pixel
mov cx, 16 ; x co-ordinate
mov dx, 16 ; y co-ordinate
int 10h ; BIOS draw function
mov al, 15 ; color - white
mov ah, 0ch ; set pixel
mov cx, 17 ; x co-ordinate
mov dx, 17 ; y co-ordinate
int 10h ; BIOS draw function
mov al, 15 ; color - white
mov ah, 0ch ; set pixel
mov cx, 18 ; x co-ordinate
mov dx, 18 ; y co-ordinate
int 10h ; BIOS draw function
mov al, 15 ; color - white
mov ah, 0ch ; set pixel
mov cx, 19 ; x co-ordinate
mov dx, 19 ; y co-ordinate
int 10h ; BIOS draw function
mov al, 15 ; color - white
mov ah, 0ch ; set pixel
mov cx, 20 ; x co-ordinate
mov dx, 20 ; y co-ordinate
int 10h ; BIOS draw function
mov al, 15 ; color - white
mov ah, 0ch ; set pixel
mov cx, 21 ; x co-ordinate
mov dx, 21 ; y co-ordinate
int 10h ; BIOS draw function
mov al, 15 ; color - white
mov ah, 0ch ; set pixel
mov cx, 22 ; x co-ordinate
mov dx, 22 ; y co-ordinate
int 10h ; BIOS draw function
mov al, 15 ; color - white
mov ah, 0ch ; set pixel
mov cx, 23 ; x co-ordinate
mov dx, 23 ; y co-ordinate
int 10h ; BIOS draw function
mov al, 15 ; color - white
mov ah, 0ch ; set pixel
mov cx, 24 ; x co-ordinate
mov dx, 24 ; y co-ordinate
int 10h ; BIOS draw function
mov al, 15 ; color - white
mov ah, 0ch ; set pixel
mov cx, 25 ; x co-ordinate
mov dx, 25 ; y co-ordinate
int 10h ; BIOS draw function
mov al, 15 ; color - white
mov ah, 0ch ; set pixel
mov cx, 26 ; x co-ordinate
mov dx, 26 ; y co-ordinate
int 10h ; BIOS draw function
mov al, 15 ; color - white
mov ah, 0ch ; set pixel
mov cx, 27 ; x co-ordinate
mov dx, 27 ; y co-ordinate
int 10h ; BIOS draw function
mov al, 15 ; color - white
mov ah, 0ch ; set pixel
mov cx, 28 ; x co-ordinate
mov dx, 28 ; y co-ordinate
int 10h ; BIOS draw function
mov al, 15 ; color - white
mov ah, 0ch ; set pixel
mov cx, 29 ; x co-ordinate
mov dx, 29 ; y co-ordinate
int 10h ; BIOS draw function
mov al, 15 ; color - white
mov ah, 0ch ; set pixel
mov cx, 30 ; x co-ordinate
mov dx, 30 ; y co-ordinate
int 10h ; BIOS draw function
mov al, 15 ; color - white
mov ah, 0ch ; set pixel
mov cx, 31 ; x co-ordinate
mov dx, 31 ; y co-ordinate
int 10h ; BIOS draw function
mov al, 15 ; color - white
mov ah, 0ch ; set pixel
mov cx, 32 ; x co-ordinate
mov dx, 32 ; y co-ordinate
int 10h ; BIOS draw function
mov al, 15 ; color - white
mov ah, 0ch ; set pixel
mov cx, 33 ; x co-ordinate
mov dx, 33 ; y co-ordinate
int 10h ; BIOS draw function
mov al, 15 ; color - white
mov ah, 0ch ; set pixel
mov cx, 34 ; x co-ordinate
mov dx, 34 ; y co-ordinate
int 10h ; BIOS draw function
mov al, 15 ; color - white
mov ah, 0ch ; set pixel
mov cx, 35 ; x co-ordinate
mov dx, 35 ; y co-ordinate
int 10h ; BIOS draw function
mov al, 15 ; color - white
mov ah, 0ch ; set pixel
mov cx, 36 ; x co-ordinate
mov dx, 36 ; y co-ordinate
int 10h ; BIOS draw function
mov al, 15 ; color - white
mov ah, 0ch ; set pixel
mov cx, 37 ; x co-ordinate
mov dx, 37 ; y co-ordinate
int 10h ; BIOS draw function
mov al, 15 ; color - white
mov ah, 0ch ; set pixel
mov cx, 38 ; x co-ordinate
mov dx, 38 ; y co-ordinate
int 10h ; BIOS draw function
mov al, 15 ; color - white
mov ah, 0ch ; set pixel
mov cx, 39 ; x co-ordinate
mov dx, 39 ; y co-ordinate
int 10h ; BIOS draw function
mov al, 15 ; color - white
mov ah, 0ch ; set pixel
mov cx, 40 ; x co-ordinate
mov dx, 40 ; y co-ordinate
int 10h ; BIOS draw function
mov al, 15 ; color - white
mov ah, 0ch ; set pixel
mov cx, 41 ; x co-ordinate
mov dx, 41 ; y co-ordinate
int 10h ; BIOS draw function
mov al, 15 ; color - white
mov ah, 0ch ; set pixel
mov cx, 42 ; x co-ordinate
mov dx, 42 ; y co-ordinate
int 10h ; BIOS draw function
mov al, 15 ; color - white
mov ah, 0ch ; set pixel
mov cx, 43 ; x co-ordinate
mov dx, 43 ; y co-ordinate
int 10h ; BIOS draw function
mov al, 15 ; color - white
mov ah, 0ch ; set pixel
mov cx, 44 ; x co-ordinate
mov dx, 44 ; y co-ordinate
int 10h ; BIOS draw function
mov al, 15 ; color - white
mov ah, 0ch ; set pixel
mov cx, 45 ; x co-ordinate
mov dx, 45 ; y co-ordinate
int 10h ; BIOS draw function
mov al, 15 ; color - white
mov ah, 0ch ; set pixel
mov cx, 46 ; x co-ordinate
mov dx, 46 ; y co-ordinate
int 10h ; BIOS draw function
mov al, 15 ; color - white
mov ah, 0ch ; set pixel
mov cx, 47 ; x co-ordinate
mov dx, 47 ; y co-ordinate
int 10h ; BIOS draw function
mov al, 15 ; color - white
mov ah, 0ch ; set pixel
mov cx, 48 ; x co-ordinate
mov dx, 48 ; y co-ordinate
int 10h ; BIOS draw function
mov al, 15 ; color - white
mov ah, 0ch ; set pixel
mov cx, 49 ; x co-ordinate
mov dx, 49 ; y co-ordinate
int 10h ; BIOS draw function
mov al, 15 ; color - white
mov ah, 0ch ; set pixel
mov cx, 50 ; x co-ordinate
mov dx, 50 ; y co-ordinate
int 10h ; BIOS draw function
mov al, 15 ; color - white
mov ah, 0ch ; set pixel
mov cx, 51 ; x co-ordinate
mov dx, 51 ; y co-ordinate
int 10h ; BIOS draw function
mov al, 15 ; color - white
mov ah, 0ch ; set pixel
mov cx, 52 ; x co-ordinate
mov dx, 52 ; y co-ordinate
int 10h ; BIOS draw function
mov al, 15 ; color - white
mov ah, 0ch ; set pixel
mov cx, 53 ; x co-ordinate
mov dx, 53 ; y co-ordinate
int 10h ; BIOS draw function
mov al, 15 ; color - white
mov ah, 0ch ; set pixel
mov cx, 54 ; x co-ordinate
mov dx, 54 ; y co-ordinate
int 10h ; BIOS draw function
mov al, 15 ; color - white
mov ah, 0ch ; set pixel
mov cx, 55 ; x co-ordinate
mov dx, 55 ; y co-ordinate
int 10h ; BIOS draw function
mov al, 15 ; color - white
mov ah, 0ch ; set pixel
mov cx, 56 ; x co-ordinate
mov dx, 56 ; y co-ordinate
int 10h ; BIOS draw function
mov al, 15 ; color - white
mov ah, 0ch ; set pixel
mov cx, 57 ; x co-ordinate
mov dx, 57 ; y co-ordinate
int 10h ; BIOS draw function
mov al, 15 ; color - white
mov ah, 0ch ; set pixel
mov cx, 58 ; x co-ordinate
mov dx, 58 ; y co-ordinate
int 10h ; BIOS draw function
mov al, 15 ; color - white
mov ah, 0ch ; set pixel
mov cx, 59 ; x co-ordinate
mov dx, 59 ; y co-ordinate
int 10h ; BIOS draw function
mov al, 15 ; color - white
mov ah, 0ch ; set pixel
mov cx, 60 ; x co-ordinate
mov dx, 60 ; y co-ordinate
int 10h ; BIOS draw function
mov al, 15 ; color - white
mov ah, 0ch ; set pixel
mov cx, 61 ; x co-ordinate
mov dx, 61 ; y co-ordinate
int 10h ; BIOS draw function
mov al, 15 ; color - white
mov ah, 0ch ; set pixel
mov cx, 62 ; x co-ordinate
mov dx, 62 ; y co-ordinate
int 10h ; BIOS draw function
mov al, 15 ; color - white
mov ah, 0ch ; set pixel
mov cx, 63 ; x co-ordinate
mov dx, 63 ; y co-ordinate
int 10h ; BIOS draw function
mov al, 15 ; color - white
mov ah, 0ch ; set pixel
mov cx, 64 ; x co-ordinate
mov dx, 64 ; y co-ordinate
int 10h ; BIOS draw function
mov al, 15 ; color - white
mov ah, 0ch ; set pixel
mov cx, 65 ; x co-ordinate
mov dx, 65 ; y co-ordinate
int 10h ; BIOS draw function
mov al, 15 ; color - white
mov ah, 0ch ; set pixel
mov cx, 66 ; x co-ordinate
mov dx, 66 ; y co-ordinate
int 10h ; BIOS draw function
mov al, 15 ; color - white
mov ah, 0ch ; set pixel
mov cx, 67 ; x co-ordinate
mov dx, 67 ; y co-ordinate
int 10h ; BIOS draw function
mov al, 15 ; color - white
mov ah, 0ch ; set pixel
mov cx, 68 ; x co-ordinate
mov dx, 68 ; y co-ordinate
int 10h ; BIOS draw function
mov al, 15 ; color - white
mov ah, 0ch ; set pixel
mov cx, 69 ; x co-ordinate
mov dx, 69 ; y co-ordinate
int 10h ; BIOS draw function
mov al, 15 ; color - white
mov ah, 0ch ; set pixel
mov cx, 70 ; x co-ordinate
mov dx, 70 ; y co-ordinate
int 10h ; BIOS draw function
mov al, 15 ; color - white
mov ah, 0ch ; set pixel
mov cx, 71 ; x co-ordinate
mov dx, 71 ; y co-ordinate
int 10h ; BIOS draw function
mov al, 15 ; color - white
mov ah, 0ch ; set pixel
mov cx, 72 ; x co-ordinate
mov dx, 72 ; y co-ordinate
int 10h ; BIOS draw function
mov al, 15 ; color - white
mov ah, 0ch ; set pixel
mov cx, 73 ; x co-ordinate
mov dx, 73 ; y co-ordinate
int 10h ; BIOS draw function
mov al, 15 ; color - white
mov ah, 0ch ; set pixel
mov cx, 74 ; x co-ordinate
mov dx, 74 ; y co-ordinate
int 10h ; BIOS draw function
mov al, 15 ; color - white
mov ah, 0ch ; set pixel
mov cx, 75 ; x co-ordinate
mov dx, 75 ; y co-ordinate
int 10h ; BIOS draw function
mov al, 15 ; color - white
mov ah, 0ch ; set pixel
mov cx, 76 ; x co-ordinate
mov dx, 76 ; y co-ordinate
int 10h ; BIOS draw function
mov al, 15 ; color - white
mov ah, 0ch ; set pixel
mov cx, 77 ; x co-ordinate
mov dx, 77 ; y co-ordinate
int 10h ; BIOS draw function
mov al, 15 ; color - white
mov ah, 0ch ; set pixel
mov cx, 78 ; x co-ordinate
mov dx, 78 ; y co-ordinate
int 10h ; BIOS draw function
mov al, 15 ; color - white
mov ah, 0ch ; set pixel
mov cx, 79 ; x co-ordinate
mov dx, 79 ; y co-ordinate
int 10h ; BIOS draw function
mov al, 15 ; color - white
mov ah, 0ch ; set pixel
mov cx, 80 ; x co-ordinate
mov dx, 80 ; y co-ordinate
int 10h ; BIOS draw function
mov al, 15 ; color - white
mov ah, 0ch ; set pixel
mov cx, 81 ; x co-ordinate
mov dx, 81 ; y co-ordinate
int 10h ; BIOS draw function
mov al, 15 ; color - white
mov ah, 0ch ; set pixel
mov cx, 82 ; x co-ordinate
mov dx, 82 ; y co-ordinate
int 10h ; BIOS draw function
mov al, 15 ; color - white
mov ah, 0ch ; set pixel
mov cx, 83 ; x co-ordinate
mov dx, 83 ; y co-ordinate
int 10h ; BIOS draw function
mov al, 15 ; color - white
mov ah, 0ch ; set pixel
mov cx, 84 ; x co-ordinate
mov dx, 84 ; y co-ordinate
int 10h ; BIOS draw function
ret
times 1024 - ($ - $$) db 0x00
How it look like in hex.
您的问题最可能的原因是您在清除屏幕时破坏了 dl
的内容。
当 BIOS 加载您的引导扇区然后调用它时,它会将驱动器编号放入 dl
。您必须保留此值,以便稍后尝试将后续扇区加载到内存中时使用。由于您未能这样做,当您尝试读取驱动器时,BIOS 正在尝试从(可能)不存在的设备中读取。
xor ax, ax ; AX=0
mov ds, ax ; DS=ES=0 because we use an org of 0x7c00 - Segment<<4+offset = 0x0000<<4+0x7c00 = 0x07c00
mov ax, es
mov ax, ss
mov sp, 0x7c00
设置段寄存器失败!
您需要将 AX
存储在 中,而不是相反。
xor ax, ax
mov ds, ax
mov es, ax <---
mov ss, ax <---
mov sp, 0x7c00
mov ah, 0x07 ; function to call with interrupt
mov bh, 0x01 ; blue background
mov dx, 0x3FFF ; fill whole screen
int 0x10 ; BIOS draw function
你如何绘制屏幕 12h 很奇怪!
这个屏幕有80列30行,所以右下角在(79,29)。
您还忘记指定左上角(0,0)。您的引导加载程序不应依赖 CX
在程序启动时具有零值!
mov ah, 0x07 ; function to call with interrupt
mov bh, 0x01 ; blue background
xor cx, cx ; (0,0) <-----
mov dx, 0x1D4F ; (79,29) <-----
int 0x10 ; BIOS draw function
也许我很愚蠢,什么都不知道,但我认为我做对了。我有两个文件,一个 boot.asm
,第二个 code.asm
。在 boot.asm
我只是启用了蓝色的视频模式填充屏幕并尝试加载位于两秒扇区的代码,但是当我尝试它时什么都没有发生并且无法获得找出我做错了什么,也许我读错了或者 code.asm
编码错误或者 boot.asm
编码错误.为什么我不能调用存储在两个第二扇区中的代码来完成它们。
有关更多信息,我将从 MBR 加载此代码,并且我想在两个第二扇区调用我的代码,因为我无法将它们全部放在一个扇区中,所以我问这个问题。
boot.asm
;bootloader bits 16 org 0x7c00 ;Here i try to load code located at second two sectors Load_Code: ;---Setup segments xor ax, ax ; AX=0 mov ds, ax ; DS=ES=0 because we use an org of 0x7c00 - Segment<<4+offset = 0x0000<<4+0x7c00 = 0x07c00 mov ax, es mov ax, ss mov sp, 0x7c00 ; SS:SP= 0x0000:0x7c00 stack just below bootloader ;---Read 2 sectors mov bx, buffer ; ES: BX must point to the buffer mov dh,0 ; head number mov ch,0 ; track number mov cl,2 ; sector number mov al,2 ; number of sectors to read mov ah,2 ; read function number int 13h ;Graphics mode Set_Video: mov ax, 12h ; Graphics mode (640x480x16) int 10h ; BIOS draw function mov ah, 06h ; Scroll up function xor al, al ; Clear entire screen xor cx, cx ; Upper left corner CH=row, CL=column mov dx, 3FFFh ; fill whole screen mov bh, 11h ; blue background int 10h ; BIOS draw function call buffer ;Endless loop .endloop: hlt jmp .endloop ;Fake MBR signature MBR_Signature: times 510 - ($ - $$) db 0 dw 0xAA55 buffer:
code.asm - second two sectors that contains this code - (this is just example code)
mov al, 15 ; color - white mov ah, 0ch ; set pixel mov cx, 0 ; x co-ordinate mov dx, 0 ; y co-ordinate int 10h ; BIOS draw function mov al, 15 ; color - white mov ah, 0ch ; set pixel mov cx, 1 ; x co-ordinate mov dx, 1 ; y co-ordinate int 10h ; BIOS draw function mov al, 15 ; color - white mov ah, 0ch ; set pixel mov cx, 2 ; x co-ordinate mov dx, 2 ; y co-ordinate int 10h ; BIOS draw function mov al, 15 ; color - white mov ah, 0ch ; set pixel mov cx, 3 ; x co-ordinate mov dx, 3 ; y co-ordinate int 10h ; BIOS draw function mov al, 15 ; color - white mov ah, 0ch ; set pixel mov cx, 4 ; x co-ordinate mov dx, 4 ; y co-ordinate int 10h ; BIOS draw function mov al, 15 ; color - white mov ah, 0ch ; set pixel mov cx, 5 ; x co-ordinate mov dx, 5 ; y co-ordinate int 10h ; BIOS draw function mov al, 15 ; color - white mov ah, 0ch ; set pixel mov cx, 6 ; x co-ordinate mov dx, 6 ; y co-ordinate int 10h ; BIOS draw function mov al, 15 ; color - white mov ah, 0ch ; set pixel mov cx, 7 ; x co-ordinate mov dx, 7 ; y co-ordinate int 10h ; BIOS draw function mov al, 15 ; color - white mov ah, 0ch ; set pixel mov cx, 8 ; x co-ordinate mov dx, 8 ; y co-ordinate int 10h ; BIOS draw function mov al, 15 ; color - white mov ah, 0ch ; set pixel mov cx, 9 ; x co-ordinate mov dx, 9 ; y co-ordinate int 10h ; BIOS draw function mov al, 15 ; color - white mov ah, 0ch ; set pixel mov cx, 10 ; x co-ordinate mov dx, 10 ; y co-ordinate int 10h ; BIOS draw function mov al, 15 ; color - white mov ah, 0ch ; set pixel mov cx, 11 ; x co-ordinate mov dx, 11 ; y co-ordinate int 10h ; BIOS draw function mov al, 15 ; color - white mov ah, 0ch ; set pixel mov cx, 12 ; x co-ordinate mov dx, 12 ; y co-ordinate int 10h ; BIOS draw function mov al, 15 ; color - white mov ah, 0ch ; set pixel mov cx, 13 ; x co-ordinate mov dx, 13 ; y co-ordinate int 10h ; BIOS draw function mov al, 15 ; color - white mov ah, 0ch ; set pixel mov cx, 14 ; x co-ordinate mov dx, 14 ; y co-ordinate int 10h ; BIOS draw function mov al, 15 ; color - white mov ah, 0ch ; set pixel mov cx, 15 ; x co-ordinate mov dx, 15 ; y co-ordinate int 10h ; BIOS draw function mov al, 15 ; color - white mov ah, 0ch ; set pixel mov cx, 16 ; x co-ordinate mov dx, 16 ; y co-ordinate int 10h ; BIOS draw function mov al, 15 ; color - white mov ah, 0ch ; set pixel mov cx, 17 ; x co-ordinate mov dx, 17 ; y co-ordinate int 10h ; BIOS draw function mov al, 15 ; color - white mov ah, 0ch ; set pixel mov cx, 18 ; x co-ordinate mov dx, 18 ; y co-ordinate int 10h ; BIOS draw function mov al, 15 ; color - white mov ah, 0ch ; set pixel mov cx, 19 ; x co-ordinate mov dx, 19 ; y co-ordinate int 10h ; BIOS draw function mov al, 15 ; color - white mov ah, 0ch ; set pixel mov cx, 20 ; x co-ordinate mov dx, 20 ; y co-ordinate int 10h ; BIOS draw function mov al, 15 ; color - white mov ah, 0ch ; set pixel mov cx, 21 ; x co-ordinate mov dx, 21 ; y co-ordinate int 10h ; BIOS draw function mov al, 15 ; color - white mov ah, 0ch ; set pixel mov cx, 22 ; x co-ordinate mov dx, 22 ; y co-ordinate int 10h ; BIOS draw function mov al, 15 ; color - white mov ah, 0ch ; set pixel mov cx, 23 ; x co-ordinate mov dx, 23 ; y co-ordinate int 10h ; BIOS draw function mov al, 15 ; color - white mov ah, 0ch ; set pixel mov cx, 24 ; x co-ordinate mov dx, 24 ; y co-ordinate int 10h ; BIOS draw function mov al, 15 ; color - white mov ah, 0ch ; set pixel mov cx, 25 ; x co-ordinate mov dx, 25 ; y co-ordinate int 10h ; BIOS draw function mov al, 15 ; color - white mov ah, 0ch ; set pixel mov cx, 26 ; x co-ordinate mov dx, 26 ; y co-ordinate int 10h ; BIOS draw function mov al, 15 ; color - white mov ah, 0ch ; set pixel mov cx, 27 ; x co-ordinate mov dx, 27 ; y co-ordinate int 10h ; BIOS draw function mov al, 15 ; color - white mov ah, 0ch ; set pixel mov cx, 28 ; x co-ordinate mov dx, 28 ; y co-ordinate int 10h ; BIOS draw function mov al, 15 ; color - white mov ah, 0ch ; set pixel mov cx, 29 ; x co-ordinate mov dx, 29 ; y co-ordinate int 10h ; BIOS draw function mov al, 15 ; color - white mov ah, 0ch ; set pixel mov cx, 30 ; x co-ordinate mov dx, 30 ; y co-ordinate int 10h ; BIOS draw function mov al, 15 ; color - white mov ah, 0ch ; set pixel mov cx, 31 ; x co-ordinate mov dx, 31 ; y co-ordinate int 10h ; BIOS draw function mov al, 15 ; color - white mov ah, 0ch ; set pixel mov cx, 32 ; x co-ordinate mov dx, 32 ; y co-ordinate int 10h ; BIOS draw function mov al, 15 ; color - white mov ah, 0ch ; set pixel mov cx, 33 ; x co-ordinate mov dx, 33 ; y co-ordinate int 10h ; BIOS draw function mov al, 15 ; color - white mov ah, 0ch ; set pixel mov cx, 34 ; x co-ordinate mov dx, 34 ; y co-ordinate int 10h ; BIOS draw function mov al, 15 ; color - white mov ah, 0ch ; set pixel mov cx, 35 ; x co-ordinate mov dx, 35 ; y co-ordinate int 10h ; BIOS draw function mov al, 15 ; color - white mov ah, 0ch ; set pixel mov cx, 36 ; x co-ordinate mov dx, 36 ; y co-ordinate int 10h ; BIOS draw function mov al, 15 ; color - white mov ah, 0ch ; set pixel mov cx, 37 ; x co-ordinate mov dx, 37 ; y co-ordinate int 10h ; BIOS draw function mov al, 15 ; color - white mov ah, 0ch ; set pixel mov cx, 38 ; x co-ordinate mov dx, 38 ; y co-ordinate int 10h ; BIOS draw function mov al, 15 ; color - white mov ah, 0ch ; set pixel mov cx, 39 ; x co-ordinate mov dx, 39 ; y co-ordinate int 10h ; BIOS draw function mov al, 15 ; color - white mov ah, 0ch ; set pixel mov cx, 40 ; x co-ordinate mov dx, 40 ; y co-ordinate int 10h ; BIOS draw function mov al, 15 ; color - white mov ah, 0ch ; set pixel mov cx, 41 ; x co-ordinate mov dx, 41 ; y co-ordinate int 10h ; BIOS draw function mov al, 15 ; color - white mov ah, 0ch ; set pixel mov cx, 42 ; x co-ordinate mov dx, 42 ; y co-ordinate int 10h ; BIOS draw function mov al, 15 ; color - white mov ah, 0ch ; set pixel mov cx, 43 ; x co-ordinate mov dx, 43 ; y co-ordinate int 10h ; BIOS draw function mov al, 15 ; color - white mov ah, 0ch ; set pixel mov cx, 44 ; x co-ordinate mov dx, 44 ; y co-ordinate int 10h ; BIOS draw function mov al, 15 ; color - white mov ah, 0ch ; set pixel mov cx, 45 ; x co-ordinate mov dx, 45 ; y co-ordinate int 10h ; BIOS draw function mov al, 15 ; color - white mov ah, 0ch ; set pixel mov cx, 46 ; x co-ordinate mov dx, 46 ; y co-ordinate int 10h ; BIOS draw function mov al, 15 ; color - white mov ah, 0ch ; set pixel mov cx, 47 ; x co-ordinate mov dx, 47 ; y co-ordinate int 10h ; BIOS draw function mov al, 15 ; color - white mov ah, 0ch ; set pixel mov cx, 48 ; x co-ordinate mov dx, 48 ; y co-ordinate int 10h ; BIOS draw function mov al, 15 ; color - white mov ah, 0ch ; set pixel mov cx, 49 ; x co-ordinate mov dx, 49 ; y co-ordinate int 10h ; BIOS draw function mov al, 15 ; color - white mov ah, 0ch ; set pixel mov cx, 50 ; x co-ordinate mov dx, 50 ; y co-ordinate int 10h ; BIOS draw function mov al, 15 ; color - white mov ah, 0ch ; set pixel mov cx, 51 ; x co-ordinate mov dx, 51 ; y co-ordinate int 10h ; BIOS draw function mov al, 15 ; color - white mov ah, 0ch ; set pixel mov cx, 52 ; x co-ordinate mov dx, 52 ; y co-ordinate int 10h ; BIOS draw function mov al, 15 ; color - white mov ah, 0ch ; set pixel mov cx, 53 ; x co-ordinate mov dx, 53 ; y co-ordinate int 10h ; BIOS draw function mov al, 15 ; color - white mov ah, 0ch ; set pixel mov cx, 54 ; x co-ordinate mov dx, 54 ; y co-ordinate int 10h ; BIOS draw function mov al, 15 ; color - white mov ah, 0ch ; set pixel mov cx, 55 ; x co-ordinate mov dx, 55 ; y co-ordinate int 10h ; BIOS draw function mov al, 15 ; color - white mov ah, 0ch ; set pixel mov cx, 56 ; x co-ordinate mov dx, 56 ; y co-ordinate int 10h ; BIOS draw function mov al, 15 ; color - white mov ah, 0ch ; set pixel mov cx, 57 ; x co-ordinate mov dx, 57 ; y co-ordinate int 10h ; BIOS draw function mov al, 15 ; color - white mov ah, 0ch ; set pixel mov cx, 58 ; x co-ordinate mov dx, 58 ; y co-ordinate int 10h ; BIOS draw function mov al, 15 ; color - white mov ah, 0ch ; set pixel mov cx, 59 ; x co-ordinate mov dx, 59 ; y co-ordinate int 10h ; BIOS draw function mov al, 15 ; color - white mov ah, 0ch ; set pixel mov cx, 60 ; x co-ordinate mov dx, 60 ; y co-ordinate int 10h ; BIOS draw function mov al, 15 ; color - white mov ah, 0ch ; set pixel mov cx, 61 ; x co-ordinate mov dx, 61 ; y co-ordinate int 10h ; BIOS draw function mov al, 15 ; color - white mov ah, 0ch ; set pixel mov cx, 62 ; x co-ordinate mov dx, 62 ; y co-ordinate int 10h ; BIOS draw function mov al, 15 ; color - white mov ah, 0ch ; set pixel mov cx, 63 ; x co-ordinate mov dx, 63 ; y co-ordinate int 10h ; BIOS draw function mov al, 15 ; color - white mov ah, 0ch ; set pixel mov cx, 64 ; x co-ordinate mov dx, 64 ; y co-ordinate int 10h ; BIOS draw function mov al, 15 ; color - white mov ah, 0ch ; set pixel mov cx, 65 ; x co-ordinate mov dx, 65 ; y co-ordinate int 10h ; BIOS draw function mov al, 15 ; color - white mov ah, 0ch ; set pixel mov cx, 66 ; x co-ordinate mov dx, 66 ; y co-ordinate int 10h ; BIOS draw function mov al, 15 ; color - white mov ah, 0ch ; set pixel mov cx, 67 ; x co-ordinate mov dx, 67 ; y co-ordinate int 10h ; BIOS draw function mov al, 15 ; color - white mov ah, 0ch ; set pixel mov cx, 68 ; x co-ordinate mov dx, 68 ; y co-ordinate int 10h ; BIOS draw function mov al, 15 ; color - white mov ah, 0ch ; set pixel mov cx, 69 ; x co-ordinate mov dx, 69 ; y co-ordinate int 10h ; BIOS draw function mov al, 15 ; color - white mov ah, 0ch ; set pixel mov cx, 70 ; x co-ordinate mov dx, 70 ; y co-ordinate int 10h ; BIOS draw function mov al, 15 ; color - white mov ah, 0ch ; set pixel mov cx, 71 ; x co-ordinate mov dx, 71 ; y co-ordinate int 10h ; BIOS draw function mov al, 15 ; color - white mov ah, 0ch ; set pixel mov cx, 72 ; x co-ordinate mov dx, 72 ; y co-ordinate int 10h ; BIOS draw function mov al, 15 ; color - white mov ah, 0ch ; set pixel mov cx, 73 ; x co-ordinate mov dx, 73 ; y co-ordinate int 10h ; BIOS draw function mov al, 15 ; color - white mov ah, 0ch ; set pixel mov cx, 74 ; x co-ordinate mov dx, 74 ; y co-ordinate int 10h ; BIOS draw function mov al, 15 ; color - white mov ah, 0ch ; set pixel mov cx, 75 ; x co-ordinate mov dx, 75 ; y co-ordinate int 10h ; BIOS draw function mov al, 15 ; color - white mov ah, 0ch ; set pixel mov cx, 76 ; x co-ordinate mov dx, 76 ; y co-ordinate int 10h ; BIOS draw function mov al, 15 ; color - white mov ah, 0ch ; set pixel mov cx, 77 ; x co-ordinate mov dx, 77 ; y co-ordinate int 10h ; BIOS draw function mov al, 15 ; color - white mov ah, 0ch ; set pixel mov cx, 78 ; x co-ordinate mov dx, 78 ; y co-ordinate int 10h ; BIOS draw function mov al, 15 ; color - white mov ah, 0ch ; set pixel mov cx, 79 ; x co-ordinate mov dx, 79 ; y co-ordinate int 10h ; BIOS draw function mov al, 15 ; color - white mov ah, 0ch ; set pixel mov cx, 80 ; x co-ordinate mov dx, 80 ; y co-ordinate int 10h ; BIOS draw function mov al, 15 ; color - white mov ah, 0ch ; set pixel mov cx, 81 ; x co-ordinate mov dx, 81 ; y co-ordinate int 10h ; BIOS draw function mov al, 15 ; color - white mov ah, 0ch ; set pixel mov cx, 82 ; x co-ordinate mov dx, 82 ; y co-ordinate int 10h ; BIOS draw function mov al, 15 ; color - white mov ah, 0ch ; set pixel mov cx, 83 ; x co-ordinate mov dx, 83 ; y co-ordinate int 10h ; BIOS draw function mov al, 15 ; color - white mov ah, 0ch ; set pixel mov cx, 84 ; x co-ordinate mov dx, 84 ; y co-ordinate int 10h ; BIOS draw function ret times 1024 - ($ - $$) db 0x00
How it look like in hex.
您的问题最可能的原因是您在清除屏幕时破坏了 dl
的内容。
当 BIOS 加载您的引导扇区然后调用它时,它会将驱动器编号放入 dl
。您必须保留此值,以便稍后尝试将后续扇区加载到内存中时使用。由于您未能这样做,当您尝试读取驱动器时,BIOS 正在尝试从(可能)不存在的设备中读取。
xor ax, ax ; AX=0 mov ds, ax ; DS=ES=0 because we use an org of 0x7c00 - Segment<<4+offset = 0x0000<<4+0x7c00 = 0x07c00 mov ax, es mov ax, ss mov sp, 0x7c00
设置段寄存器失败!
您需要将 AX
存储在 中,而不是相反。
xor ax, ax
mov ds, ax
mov es, ax <---
mov ss, ax <---
mov sp, 0x7c00
mov ah, 0x07 ; function to call with interrupt mov bh, 0x01 ; blue background mov dx, 0x3FFF ; fill whole screen int 0x10 ; BIOS draw function
你如何绘制屏幕 12h 很奇怪!
这个屏幕有80列30行,所以右下角在(79,29)。
您还忘记指定左上角(0,0)。您的引导加载程序不应依赖 CX
在程序启动时具有零值!
mov ah, 0x07 ; function to call with interrupt
mov bh, 0x01 ; blue background
xor cx, cx ; (0,0) <-----
mov dx, 0x1D4F ; (79,29) <-----
int 0x10 ; BIOS draw function