1 .text 2 .code16 3 .arch i386 4 .section ".prefix", "ax", @progbits 5 6/* UNDI loader 7 * 8 * Called by an external program to load our PXE stack. 9 */ 10 .globl undiloader 11undiloader: 12 /* Save registers */ 13 pushl %esi 14 pushl %edi 15 pushw %ds 16 pushw %es 17 pushw %bx 18 /* ROM segment address to %ds */ 19 pushw %cs 20 popw %ds 21 /* UNDI loader parameter structure address into %es:%di */ 22 movw %sp, %bx 23 movw %ss:18(%bx), %di 24 movw %ss:20(%bx), %es 25 /* Install to specified real-mode addresses */ 26 pushw %di 27 movw %es:12(%di), %bx 28 movw %es:14(%di), %ax 29 movl image_source, %esi 30 movl decompress_to, %edi 31 call install_prealloc 32 popw %di 33 /* Call UNDI loader C code */ 34 pushl $pxe_loader_call 35 pushw %cs 36 pushw $1f 37 pushw %ax 38 pushw $prot_call 39 lret 401: popw %bx /* discard */ 41 popw %bx /* discard */ 42 /* Restore registers and return */ 43 popw %bx 44 popw %es 45 popw %ds 46 popl %edi 47 popl %esi 48 lret 49 .size undiloader, . - undiloader 50