当前位置: 代码迷 >> 汇编语言 >> nasm 的一个容易的引导程序
  详细解决方案

nasm 的一个容易的引导程序

热度:484   发布时间:2016-05-02 04:38:29.0
nasm 的一个简单的引导程序
org 07c00h
mov ax,cs
mov ax,bootseg
mov ds,ax
mov ax,initseg
mov es,ax
sub si,si
sub di,di
mov cx,512
rep movsb
;jmp word initseg:go - bootseg//添加这句后程序不能正确运行
go:
mov ax,cs
mov es,ax
mov ds,ax
mov bp,bootstr
mov cx,[strlen]
mov ax,01301h
mov bx,000ch
mov dx,1000h
int 10h
jmp $
bootstr:
db "hello Os Loading"
strlen:
dw $ - bootstr
initseg equ 09000h
bootseg equ 07c00h
times 510-($-$$) db 0
dw 0xaa55
------解决方案--------------------
initseg没有初始化
------解决方案--------------------
楼主好像是要将引导代码从 0000 段转到 9000h 段处,并跳到那里继续执行?这样的话,必须要有引导代码的复制过程,然后才是代码的跳转。具体的实现方法,可以参考标准的引导代码的做法,其实,复制简单吧,跳转的话它采用的是 push 目标地址,然后 retf 指令。