Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 如何在程序集中添加多个扇区并从该扇区调用函数_Assembly_X86 16 - Fatal编程技术网

Assembly 如何在程序集中添加多个扇区并从该扇区调用函数

Assembly 如何在程序集中添加多个扇区并从该扇区调用函数,assembly,x86-16,Assembly,X86 16,下面是我借助互联网编写的程序 引导扇区的名称: 谁能帮帮我 1。是否所有扇区都加载良好,如何正确加载所有扇区 2.我是如何从第二跳到第三并返回的 引导扇区: [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

下面是我借助互联网编写的程序 引导扇区的名称: 谁能帮帮我

1。是否所有扇区都加载良好,如何正确加载所有扇区

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

引导扇区:

   [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
部门2:

    [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
     [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
部门3:

    [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
     [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

首先:有了大量的可用内存,你不应该像以前那样滥用除零异常
但在更明亮的视野中,您确实在6000h:0000h加载第二个扇区,并将
jmp far
加载到它。使用的方法可以在第二个扇区内重复,以在6000h:0200h加载第三个扇区,但这次使用
call far
跳转到该扇区。您的第三个扇区在正确的位置有一个
retf

因此,请调用SECTOR3,并在标签“exit:”处进行所有必要的修改,替换
jmp$