Цитата:
По нынешним меркам "не кашерно" делать то, что ты делаешь. Тем более что ты делаешь это неправильно (мои замечания относительно содержимого дескриптора оставлены без внимания).
Хм... а что я по Вашему делаю и почему я это делаю неправильно?
вот вроде учел все замечания, убрал стек, заменил equ и добавил "фичу"
. надеюсь теперь то все нормально?
Код:
CODE_SELEKTOR = 8h
DATA_SELEKTOR = 10h
VIDEO_SELEKTOR = 18h
STACK_SELEKTOR = 20h
STACK_BASE_ADDRESS = 1000h
org 1000h
start:
mov ax,3
int 10h
mov ah, 1
mov ch, 20h
mov cl, 20h
int 10h
in al,92h
or al,2
out 92h,al
lgdt fword [GDTR]
cli
in al,70h
or al,80h
out 70h,al
mov eax,cr0
or al,1
mov cr0,eax
jmp fword CODE_SELEKTOR:PROTECTED_MODE_ENTRY_POINT
align 8
GDT:
NULL_descr db 8 dup(0)
CODE_descr db 0FFh,0FFh,00h,00h,00h,10011010b,11001111b,00h
DATA_descr db 0FFh,0FFh,00h,00h,00h,10010010b,11001111b,00h
VIDEO_descr db 0FFh,0FFh,00h,80h,0Bh,10010010b,01000000b,00h
;GDT_STACK db 00h, 00h,00h,10h,00h,10010110b,01000000b,00h
GDT_size = $-GDT
label GDTR fword
dw GDT_size-1
dd GDT
use32
PROTECTED_MODE_ENTRY_POINT:
mov ax, DATA_SELEKTOR
mov ds, ax
mov ss, ax
mov ax, VIDEO_SELEKTOR
mov es, ax
mov esp, STACK_BASE_ADDRESS
mov ecx, 80*2*25
mov ax, 9F00h
mov edi, 0
rep stosw
mov edi, 160*13+56
mov esi, message
@@:
lodsb
or al, al
je time
stosb
inc edi
jmp short @b
time:
mov ecx, 3
mov esi, 144
mov al, 4
.loop:
push ax
out 70h, al
in al, 71h
mov bl, al
shr al, 4
and bl, 0fh
or al, 30h
or bl, 30h
mov byte ptr es:esi, al
add esi, 2
mov byte ptr es:esi, bl
add esi, 2
cmp ecx, 1
jbe .nxt
mov byte ptr es:esi, ':'
add esi, 2
.nxt:
pop ax
sub al, 2
loop .loop
jmp time
message db 'Welcom to Fatal_Error OS' ,0