| bits 16 | |
| swap: | |
| push bx | |
| movzx bx,dl | |
| mov dl,[cs:bx+(table-$$)] | |
| pop bx | |
| .jmp: jmp 0:0 | |
| nop | |
| nop | |
| install: | |
| ;; DS = CS, ES = 0 | |
| mov edi,[es:si+4*0x13] | |
| mov [swap.jmp+1],edi | |
| mov di,[es:0x413] | |
| dec di | |
| mov [es:0x413],di | |
| shl edi,16+6 | |
| mov [es:si+4*0x13],edi | |
| shr edi,16 | |
| mov es,di | |
| xor di,di | |
| rep movsd | |
| mov si,0 | |
| mov di,0 | |
| mov ds,si | |
| mov es,di | |
| mov ecx,0 | |
| mov esi,0 | |
| mov edi,0 | |
| jmp 0:0 | |
| align 16 | |
| table: |