use16
org 7c00h
start:
mov ax, 3
int 10h
mov ax, 0b800h
mov es, ax
xor di,di
mov ax, 3152h ; R
mov [es:di], ax
mov ax, 314Dh ; M
mov [es:di+2], ax
mov ax, cs
mov ds, ax
;=====================================================================
; адрес для коррекции cs в PM
xor eax, eax
lea ax, [ds:PM_CODE]
shl eax, 4
mov [ds:GO_PM_CODE], eax
; вычислить линейный адрес GDT (для загрузки регистра GDTR):
xor eax, eax
lea eax, [ds:GDT]
shl eax, 4
mov [GDTR2], eax
lgdt fword ptr GDTR
;=====================================================================
; открываем линию А20
in al, 92h
or al, 2
out 92h, al
; запрет маскируемых прерываний:
cli
; запрет немаскируемых прерываний:
in AL, 70h
or AL, 80h
out 70h, AL
; переключение в защищенный режим:
mov EAX, CR0
or AL, 1
mov CR0, EAX
; коррекция cs (jmp)
db 0EAh
GO_PM_CODE dd ?
dw 00001000b
; PM
use32
PM_CODE:
;здесь будет код вывода текста (РМ режим)
jmp $
;================================= DATA ====================================
; ТАБЛИЦА ГЛОБАЛЬНЫХ ДЕСКРИПТОРОВ:
GDT:
NULL 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_size equ $-GDT ; размер GDT
GDTR dw GDT_size-1 ; 16-битный лимит GDT
GDTR2 dd ? ; 32-битный линейный адрес GDT
C:\Users\U1\Desktop>D:\Fasm\Fasm.exe T_OS_1.asm
flat assembler version 1.71.39 (1048576 kilobytes memory)
tiny_os.inc [2]:
limit dw 0
error: unexpected characters.
C:\Users\U1\Desktop>
Если Вы уже зарегистрированы на Портале - войдите в систему, если Вы еще не регистрировались - пройдите простую процедуру регистрации.