 |
11.12.2009, 08:26
|
#1
|
|
|
|
Разведчик
|
 Регистрация: 23.11.2009
 Сообщений: 10
 Популярность: 146
 Сказал(а) спасибо: 6
Поблагодарили 41 раз(а) в 20 сообщениях
|
Простейший boot-loader
Продолжаем флуд  )
PHP код:
use16
org 0x7C00
bios_start:
cli
mov ax,0x0
mov es,ax
mov ds,ax
mov es,ax
sti
;Устанавливаем видеорежим
mov ax,3
int 0x10
;Отключаем курсор
mov ah,1
mov ch,0x20
int 0x10
;Инициализируем все что нужно для запуска цикла
mov ax,0xB800
mov es,ax
mov si,message
xor di,di
;Цикл переноса данных.
@@:
lodsb
mov ah,0xF
stosw
cmp al,0x0
jnz @b
;Бесконечный цикл.
jmp $
message db "Hello, World!",0
TIMES 510-($-$$) db 0
dw 0xAA55
Как видите код более чем тривиален - может быть кого ни будь это подтолкнет к написанию собственной ОС. Из опыта могу сказать что лучше всего писать на ассемблере - понятней, удобней, но разработка идет дольше и приходится переносить сложные алгоритмы на асм самому.
Добавлено через 5 минут
Кстати чуть не забыл, вот пример перехода в защищенный режим полученный мной на одном форуме в качестве ответа. Этот исходник мне очень помог.
PHP код:
;************************************
; By Dex
; Assemble with fasm
; c:\fasm Pmode.asm Pmode.bin
;
;************************************
org 0x7C00
use16
;****************************
; Realmode startup code.
;****************************
start:
xor ax,ax
mov ds,ax
mov es,ax
mov ss,ax
mov sp,0x7C00
;*****************************
; Setting up, to enter pmode.
;*****************************
cli
lgdt [gdtr]
mov eax, cr0
or al,0x1
mov cr0,eax
jmp 0x10: protected
;*****************************
; Pmode. ;-)
;*****************************
use32
protected:
mov ax,0x8
mov ds,ax
mov es,ax
mov ss,ax
mov esp,0x7C00
;*****************************
; Turn floppy off (if space).
;*****************************
mov dx,3F2h
mov al,0
out dx,al
;*********************************
; Print T in the right hand corner
;*********************************
mov byte [es:0xB809E], "T"
;*********************************
; Just loop for now
;*********************************
jmp $
;*************************************
; GDT.
;*************************************
gdt: dw 0x0000, 0x0000, 0x0000, 0x0000
sys_data: dw 0xFFFF, 0x0000, 0x9200, 0x00CF
sys_code: dw 0xFFFF, 0x0000, 0x9800, 0x00CF
gdt_end:
gdtr: dw gdt_end - gdt - 1
dd gdt
;*************************************
; Make program 510 byte's + 0xaa55
;*************************************
times 510- ($-start) db 0
dw 0xaa55
PS: Очень важная информация
После прыжка к защищенному коду(ну тоесть к 32-битному) обязательно проинициализируйте DS его селектором. В данном случае селектор DS - 0x8
Соответственно ваш защищенный код должен начинаться так:
mov ax,0x8
mov ds,ax
По другому никак - иначе будете смотреть как ваша ОС перезагружается без конца и края, я на этом баге просидел почти 3 месяца - постоянно совал левый селектор.
Последний раз редактировалось Ivan_64; 11.12.2009 в 08:32.
Причина: Добавлено сообщение
|
|
|
Пользователь сказал cпасибо:
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Похожие темы
|
Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
[Программа] RF Loader
|
[s]X@m[s] |
Rising Force Online |
5 |
05.02.2011 11:27 |
rf-loader
|
polifoniya19210 |
Архив уязвимостей |
15 |
24.06.2009 18:30 |
[Help]RF Loader 1.8.5
|
ТумТум |
Rising Force Online |
16 |
25.02.2009 23:02 |
НЕ РУБИТ LOADER !
|
Chiter X |
Rising Force Online |
1 |
05.02.2009 23:10 |
Заявление об ответственности / Список мошенников
Часовой пояс GMT +4, время: 15:21.
|
 |