Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Последние темы форума

Показать новые сообщения »

Почтовая рассылка

Подписчиков: 6451
Последний выпуск: 19.06.2015

Виртуальные машины.

36K
04 января 2013 года
kailot2
83 / / 15.12.2012
Вот мне интересно, написал программку переводящую проц в защищенный режим.В VirtualBox и Qemu нормально запускается и работает. В Bochs при запуске машинка перезагружается. Специально откопали флопик, дискетку, залил все на дискетку, запустил на реальном железе - все прекрасно работает. Что это? Смертный грех разработчиков bochs'a?
263
05 января 2013 года
arrjj
1.7K / / 26.01.2011
Что дебаггер выдает? Код? По osdev ответ пробовали искать?
36K
05 января 2013 года
kailot2
83 / / 15.12.2012

Извините что картинку прикрепляю, с логами че то разобраться не могу
248
05 января 2013 года
Ramon
1.1K / / 16.08.2003
Цитата:
Что это? Смертный грех разработчиков bochs'a?


Кривые руки.

263
05 января 2013 года
arrjj
1.7K / / 26.01.2011
Цитата: kailot2

Извините что картинку прикрепляю, с логами че то разобраться не могу


нужно больше лога до exception'а, ну и код бы не мешало увидеть.

36K
05 января 2013 года
kailot2
83 / / 15.12.2012
Полный код:
Код:
org 100h
start:
mov ax,3
int 10h
;скопируем GDT по 5000h:0
mov ax,cs
mov ds,ax
mov si,gdt32
mov ax,05000h
mov es,ax
xor di,di
xor cx,cx
mov cx,[gdtsize]
rep movsb
;Загрузим код защищенного режима  по адресу 07000h:0000h
;int 25h
;02h Возвращает в BX  первый кластер файла
;Параметры: ES:DI = имя файла
mov ax,cs
mov es,ax
mov ah,02h
mov di,progname
int 25h
cmp bx,-1
je _error
;int 25h
;04h чтение цепочки кластеров
;Параметры:es:di = buffer  BX = первый кластер цепочки
mov ax,07000h
mov es,ax
xor di,di
mov ah,04h
int 25h
mov ax,3
int 10h
mov [jadr],70000h
mov [addr],50000h
lgdt fword [gdtr32]
in al, 0x92;включаем A20
or al, 2
out 0x92, al
cli ;запрещаем прерывания
mov al,8Fh;запрещаем NMI
out 70h,al
in al,71h
; Перейдём в защищённый режим
mov eax, cr0
or eax, 1
mov cr0, eax
; Перейдём на 32-битный код
mov ax,8
mov ds,ax
use32
xchg bx,bx
dw 0xEA66
jadr    dd 0
dw 08
_error:
mov ax,cs
mov es,ax
mov ah,01h
mov di,_errormsg
int 21h
ret

_errormsg db 'GDT.BIN or PROG32.bin not found',0
progname db 'PROG32  BIN'
; Таблица дескрипторов сегментов для 32-битного ядра
align 16
gdt32:
dq 0 ;пустой
db 0FFh,0FFh,0,0,0,9Ah,0CFh,0 ;код
db 0FFh,0FFh,0,0,0,92h,0CFh,0;данные
db 0FFh,0FFh,0,80h,0Bh,92h,40h,0 ;видеосегмент
gdtr32:
gdtsize dw $ - gdt32 - 1
addr    dd gdt32
Код в Prog32 просто выводит несколько символов для теста.
36K
05 января 2013 года
kailot2
83 / / 15.12.2012
Я все таки склоняюсь к тому что это
Цитата: Ramon
Кривые руки.


Ведь работает везде, только bochs чудеса выдает.

87K
05 января 2013 года
Alexey Timofeev
4 / / 26.11.2012
Думаю что грех не смертный. Просто bochs не позволяет выполнения данных инструкций перевода в защищенный режим.
Короче не баг а фича :)

Знаете кого-то, кто может ответить? Поделитесь с ним ссылкой.

Ваш ответ

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог