bits 16 org 100h jmp start shuffle_start: push 0xB800 pop es mov cx, 80*24*2 mov ax, 'AA' xor di, di rep stosw .lbl: jmp .lbl shuffle_end: nop shuffle_len equ (shuffle_end - shuffle_start + 1) start: ; calculate physical address of shuffled part xor eax, eax push ds pop ax shl eax, 4 add ax, shuffle_start mov dword [source], eax mov ax, 0012h mov di, shuffle_descriptors mov cx, num_shuffle_descriptors mov ebp, 0x7c00 int 22h int3 shuffle_descriptors: dd 0x7C00 source: dd 0 dd shuffle_len num_shuffle_descriptors equ 1