Консультация № 194973
13.03.2019, 20:24
0.00 руб.
0 12 0
Здравствуйте! У меня возникли сложности с таким вопросом:

:Fasm
:Window 7 32
:Oracle VM VirtualBox
:запускаю с файла .iso

не получается перейти на участок кода где будет выполняться код РМ, выводит только текст что в режиме RM и дальше критическая ошибка, хотя если написать после mov CR0, EAX просто jmp $ все норм, прошу извинить с фасмом не сильно знаком, масм ругается на команду lgdt, что в коде не так?

Код:
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

Обсуждение

давно
Посетитель
7438
7205
14.03.2019, 12:03
общий
Кто будет настраивать контроллер прерываний? Создавать шлюзы для аппаратных прерываний?
Первое же прерывание от таймера приводит к краху.
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Посетитель
401281
56
14.03.2019, 17:17
общий
Адресаты:
а как же запрет на прерывание (маскируемое и немаскируемое) 38, 41 строка, я читаю данную статью Процессор Intel в защищенном режиме #8 и там автор пишет на тасм и я попытался это реализовать на фасм
давно
Посетитель
7438
7205
14.03.2019, 17:42
общий
Хорошо, где стек? Где дескрипрор gdt?
Могу дать посмотреть мои давнишние изыски. Под TASM. Есть и прерывания и вывод на экран...
t_OS.rar (6.0 кб)
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Посетитель
401281
56
14.03.2019, 17:52
общий
14.03.2019, 17:57
Адресаты:
стека нету, есть только дескриптор кода чтобы выполнять, дескриптор данных откуда читать данные и дескриптор адреса видео 0b800h собственно куда будет записываться текст, описание gdt начинается с 63 строки и начиная с строк 24 по 29 определяется адрес и записывается в регистр gdtr, за файл огромное спасибо вам
давно
Посетитель
401281
56
15.03.2019, 16:17
общий
Адресаты:
попытался откомпилировать исходник из файла который мне дали и фасм выдает
Код:

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>

попытался поискать в интернете ничего не получилось, нашел только что Мануал по фасм но это будет долго и этот вопрос через 3 дня закроется, подскажите что не так?
давно
Посетитель
7438
7205
15.03.2019, 16:44
общий
Адресаты:
У тасма и фасма разный синтаксис. Надо будет все переписать
А чем не устраивает тасм?
А то, что закроется, не переживайте Можно будет и потом общаться
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Посетитель
7438
7205
15.03.2019, 16:49
общий
Адресаты:
Продлил еще на 5 суток
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Посетитель
401281
56
15.03.2019, 17:50
общий
Адресаты:
ну смущает что тасм уже не поддерживается разработчиками Borland и у меня уровень программирования 0.1% и пока наберусь опыта пройдет лет так 5 и там еще что нибудь выйдет новое а так выбрал по моему мнению стабильный инструмент и не отвлекаясь уделить больше времени на результат, за продление спасибо
давно
Посетитель
401281
56
17.03.2019, 10:52
общий
Адресаты:
нашел тасм и скомпилировал исходник из файла, он выдал exe файл, сделал iso и запустил в virtualbox и в qemu ошибок не выдают но и на экране нет вывода текта, никакова , начал подробнее изучать исходник и у меня появились вопросы
файл T_OS_1.asm
строка 72: f_name db 't_os.dat',0 - в архиве такого файла нет(в сроке 129 к ниму обращаются)что это за файл и насколько он важен?
строка 77: mov ax,DGROUP - что он содержит DGROUP в файле идет только присвоение от него а что в нем?, в интернете нашел что он связан с сегментами
строка 196: mov [(desc_struc bx).base_l],ax - как это расшифровать ?
строка 227: db 0cch - это же int3? я грешу что это и за него все тормозит

давно
Посетитель
401281
56
17.03.2019, 12:22
общий
Адресаты:
скачал dosbox все заработало
давно
Посетитель
7438
7205
18.03.2019, 11:44
общий
Адресаты:
Все заработало, ну и славно
Что касается файла t_os.dat...
Давно писалось (очень давно ). Судя по программе, там должно быть 32 байта любого текста, причем в виде: символ, атрибут.
Т.о,, там ожидается некая 16-символьная строка.
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Посетитель
401281
56
18.03.2019, 17:28
общий
Адресаты:
решил проблему в фасм, вывел текст из РМ , такую банальную ошибку так долго решал , 7с00 это же смешение
Форма ответа