老版Bootloader程序默认将程序加载到0000:2000H,新版程序加载到01F0:0100H,其实两者的物理地址是一样的,但是两者的段寄存器的数值是不同的,如果不做出修改,程序运行是不对的,原因8086/8088是基于寄存器进行寻址的,为了使新版程序适应老版BootLoader,或者老板程序适应新版BootLoader,程序初始化的时候需要进行适当修改。
下面是把老版出厂程序修改成适应新版BootLoader的代码修改
测试结果正确
mov ax,0
mov ds,ax
mov es,ax
mov ss,ax
mov sp,7fffh
mov ax,0 ;cs=0000
push ax
mov ax,init_cx ;ip set
push ax
iret
CS:IP不能直接修改,这里运用压栈和中断返回指令出栈的办法,进行修改。此处体现了汇编语言的灵活性,在有些地方,C语言无法替代的特性。