Linux 0.11 bootsect.s--->masm语法
debug吧
全部回复
仅看楼主
level 7
;#Mode=DOS
.model small
.386p
SYSSIZEEQU3000H
SETUPLENEQU4
BOOTSEGEQU7C0H
INITSEGEQU9000H
SETUPSEGEQU9020H
SYSSEGEQU1000H
ENDSEGEQUSYSSEG + SYSSIZE
;_ROOT_DEVEQU306h;注意这里,指定根文件系统设备,软盘硬盘会有所不同
_ROOT_DEVEQU21DH
.code
start:
mov ax,BOOTSEG
mov ds,ax
mov ax,INITSEG
mov es,ax
mov cx,256
xor si,si
xor di,di
rep movsw
BYTE 0eah
WORD go,INITSEG
go:
mov ax,cs
mov ds,ax
mov es,ax
mov ss,ax
mov sp,0ff00h
load_setup:
mov dx,0
mov cx,2
mov bx,200h
mov ax,200h + SETUPLEN
int 13h
jnc ok_load_setup
mov dx,0
mov ax,0
int 13h
jmp load_setup
ok_load_setup:
mov dl,0
mov ax,800h
int 13h
mov ch,0
mov WORD PTR [sectors],cx
mov ax,INITSEG
mov es,ax
mov ah,3
xor bh,bh
int 10h
mov cx,24
mov bx,7
mov bp,msg1
mov ax,1301h
int 10h
mov ax,SYSSEG
mov es,ax
call read_it
call kill_motor
mov ax,WORD  ptr [root_dev]
cmp ax,0
jne root_defined
mov bx,sectors
mov ax,208h
cmp bx,15
je  root_defined
mov ax,21ch
cmp bx,18
je  root_defined
undef_root:
jmp undef_root
root_defined:
mov WORD PTR [root_dev],ax
BYTE 0eah
WORD 0,SETUPSEG
sread:WORD 1 + SETUPLEN
head:WORD 0
track:WORD 0
read_it:
mov ax,es
test ax,0fffh
die:
jne die
xor bx,bx
rp_read:
mov ax,es
cmp ax,ENDSEG
jb  ok1_read
ret
ok1_read:
mov ax,WORD ptr [sectors];实模式时可以这样存取代码段
sub ax,WORD ptr [sread];保护模式下用OPCODE存取代码段
mov cx,ax
shl cx,9
add cx,bx
jnc ok2_read
je  ok2_read
xor ax,ax
sub ax,bx
shr ax,9
ok2_read:
call read_track
mov cx,ax
add ax,WORD ptr [sread]
cmp ax,WORD ptr [sectors]
jne ok3_read
mov ax,1
sub ax,WORD ptr [head]
jne ok4_read
inc WORD PTR [track]
ok4_read:
mov WORD PTR [head],ax
xor ax,ax
ok3_read:
mov WORD PTR [sread],ax
shl cx,9
add bx,cx
jnc rp_read
mov ax,es
add ax,1000h
mov es,ax
xor bx,bx
jmp rp_read
read_track:
push ax
push bx
push cx
push dx
mov dx,WORD ptr [track]
mov cx,WORD ptr [sread]
inc cx
mov ch,dl
mov dx,WORD ptr [head]
mov dh,dl
mov dl,0
and dx,100h
mov ah,2
int 13h
jc bad_rt
pop dx
pop cx
pop bx
pop ax
ret
bad_rt:
mov ax,0
mov dx,0
int 13h
pop dx
pop cx
pop bx
pop ax
jmp read_track
kill_motor:
push dx
mov dx,3f2h
mov al,0
out dx,al
pop dx
ret
sectors:WORD 0
msg1:BYTE 13, 10
BYTE 'Loading system...',0
BYTE 13, 10, 13, 10
org 508
root_dev:WORD 21dh;_ROOT_DEV
boot_flag:WORD 0AA55H
end start
2009年04月14日 06点04分 1
1