如何在汇编中添加来自该扇区的多个扇区和调用函数

时间:2014-04-16 21:30:07

标签: assembly x86-16

在我借助互联网编写的程序之后 引导扇区: 任何人请帮帮我

1。是所有扇区都正常加载,如何正确加载所有扇区。

2. 我如何从第二个跳到第三个并返回

BOOTSECTOR:

   [bits 16]
[org 0x7c00]

cli
mov bx,cs
mov ds,bx
mov ss,bx
mov sp,0xfffe

mov ax,0 
mov es,ax
mov ax,0x6000
mov word [es:0],0
mov [es:2],ax

mov bx,0x6000
mov es,bx
mov bx,0
sti

mov ah,2 ;service
mov al,1 ;sector count
mov ch,0 ;cylinder
mov cl,2 ;sbector#
mov dh,0 ;head
mov dl,0
int 13h

jc error

;int 0h
mov bx,0
mov es,bx
mov bx,0h
jmp far[es:bx] 

error:
mov al,'E'
mov ah,0eh
mov bl,7
mov bh,0
int 10h
jmp $

k:
mov al,'F'
mov ah,0eh
mov bl,7
mov bh,0
int 10h
jmp $

times 510-($-$$) db 0
dw 0xAA55

Sector2:

    [bits 16]

SECTOR2:

mov bx,cs
mov ds,bx 
mov es,bx

mov ah,0eh
mov bl,7
mov bh,0 
int 10h

call SECTOR3
mov si,msg2
l:
cmp byte [si],0
je exit
mov al,[si]
int 10h
inc si
jmp l
exit:
jmp $
msg2 db "Sector 2 is loaded",0
times 512-($-$$) db 0

部门3:

     [bits 16]

SECTOR3:

mov bx,cs
mov ds,bx 
mov es,bx



     mov ah,0eh
mov bl,7
mov bh,0 
int 10h
 mov si,msg1
l2:
cmp byte [si],0
je exit3
mov al,[si]
int 10h
inc si
jmp l2
exit3:
retf 
; jmp $
msg1 db "Sector 3 is loaded",0
times 512-($-$$) db 0

1 个答案:

答案 0 :(得分:0)

首先:有了大量的内存,你不应该像你做的那样滥用除零除外! 但是在更明亮的视线上,你会在6000h:0000h和jmp far加载第二个扇区。使用的方法可以在第二个扇区内重复,以便在6000h加载第三个扇区:0200h,但这次使用call far跳转到它。您的第3个部门在正确的位置有retf 如此松散的call SECTOR3和标签“退出”:'进行所有必要的修改,取代jmp $