and ax, 0F000h shr ax, 12 mov bx, offset tbl_hex xlat mov [si], al pop ax push ax
and ax, 0F000h shr ax, 12 mov bx, offset tbl_hex xlat mov [si], al pop ax push ax
and ax, 0F00h shr ax, 8 inc si xlat mov [si], al pop ax push ax
and ax, 0F0h shr ax, 4 inc si xlat mov [si], al pop ax push ax
and ax, 0Fh inc si xlat mov [si], al
pop ax pop dx pop cx pop bx pop ax endm struc descr limit dw 0 base_l dw 0 base_m db 0 attr_1 db 0 attr_2 db 0 base_h db 0 ends descr ;Структура для шлюзов ловушки struc trap offs_l dw 0 sel dw 16 rsrv db 0 attr db 8Fh offs_h dw 0 ends trap DATASEG gdt_null descr <0,0,0,0,0,0> ; Селектор = 0 gdt_data descr <data_size-1,0,0,92h,0,0> ; Селектор = 8 gdt_code descr <code_size-1,0,0,98h,0,0> ; Селектор = 16 gdt_stack descr <100h-1,0,0,92h,0,0> ; Селектор = 24 gdt_screen descr <4095,8000h,0Bh,92h,0,0> ; Селектор = 32 gdt_himem descr <511,0,10h,92h,80h,0> ; Селектор = 40 gdt_tss_0 descr <103,0,0,89h,0,0> ; (1) Селектор = 48 gdt_tss_1 descr <103,0,0,89h,0,0> ; (2) Селектор = 56 gdt_size = $-gdt_null
idt trap 10 dup (<dummy_exc>) trap <exc_0a> trap <exc_0b> trap <exc_0c> trap <exc_0d> trap <exc_0e> trap 17 dup (<dummy_exc>)
idt_size = $-idt
idtr_real dw 3FFh, 0, 0
pdescr dp 0 mes db 10,13,'Real mode','$' tbl_hex db '0123456789ABCDEF' number db '???? ????' string db '**** **** **** **** **** **** ****' len = $-string
home_sel dw home dw 10h
color db 43h ; (3) Атрибут символов для заполнения
tss_0 db 104 dup(0) ; (4) TSS 0-й задачи tss_1 db 104 dup(0) ; (5) TSS 1-й задачи
;Переменная для переключения на задачу 1 task1_offs dw 0 ; (6) Смещение 1-й задачи dw 56 ; (7) Селектор TSS 1 = 56
data_size = $-gdt_null ends CODESEG assume cs: @code, ds:@data sttt equ $ proc dummy_exc ;Обработчик исключений c номерами 0-9 и 0F-1F pop eax pop eax mov si, offset string+5 debug mov ax, 1111h jmp [dword ptr home_sel] endp proc exc_0a ;Обработчик исключения 0A pop eax pop eax mov si, offset string+5 debug mov ax, 0Ah jmp [dword ptr home_sel] endp proc exc_0b ;Обработчик исключения 0B pop eax pop eax mov si, offset string+5 debug mov ax, 0Bh jmp [dword ptr home_sel] endp proc exc_0c ;Обработчик исключения 0C pop eax pop eax mov si, offset string+5 debug mov ax, 0Ch jmp [dword ptr home_sel] endp proc exc_0d ;Обработчик исключения 0D pop eax pop eax mov si, offset string+5 debug mov ax, 0Dh jmp [dword ptr home_sel] endp proc exc_0e ;Обработчик исключения 0E pop eax pop eax mov si, offset string+5 debug mov ax, 0Eh jmp [dword ptr home_sel] endp start: xor eax, eax mov ax, @data mov ds, ax
|