Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.145.143.239] |
|
Страницы: (4) 1 [2] 3 4 все ( Перейти к последнему сообщению ) |
Сообщ.
#16
,
|
|
|
Evgeniy, это не так, когда отлаживал свою ось, была проблема, в том, что некоторые ВМ(непомню какие именно) изначально разришают A20 а некоторые нет. Когда было выловленно большенство багов, код работал на всех ВМ и на реальной машине.
Pavia, в бошь, в режиме отладчикак есть команда help , бряк можно ставить командой break |
Сообщ.
#17
,
|
|
|
Опрокинули Барбоса напрочь.
Добавлено Цитата e-moe @ В том же Зубкове, если внимательно и вдумчиво читать, есть пример перехода в нереальный режим и DPMI в том листинге и не пахнет а можно ссылку на главу? или может мы разных Зубковых имеем ввиду? Я имею ввиду Зубков С. В. "Assembler" 1999 Издательство «ДМК Пресс». а может я не вдумчиво смотрел? А по поводу цифры 8, а че там бит присутствия сегмента = false? |
Сообщ.
#18
,
|
|
|
Barbosman, у зубкова действительно есть пример использования DMPI, НО DMPI это интерфейс, обеспечиваемый либо BIOSом либо ОС, НЕ ПРОЦЕССОРОМ.
Цитата из Зубкова "Ассемблер" издание 1999г Цитата глава 6. Программирование в защищенном режиме ... Этот режим намного сложнее реального, поэтому, чтобы переключить в него процессор и поддерживать работу в этом режиме, надо написать небольшую операционную систему. Кроме того, если процессор уже находится под управлением какой-то операционной системы, которая перевела его в защищенный режим, например Windows 95, она, скорее всего, не разрешит программе устранить себя от управления компьютером. С этой целью были разработаны специальные интерфейсы, позволяющие программам, запущенным в режиме V86 в DOS, переключаться в защищенный режим простым вызовом соответствующего прерывания — VCPI и DPMI. смотри также главу 6.3. "Интерфейс DPMI" и главу 6.2. "Интерфейс VCPI" Цитата с www.sasm.narod.ru Цитата В защищённый режим процессор надо переводить специальными операциями над системными регистрами и войти в этот режим процессор может только из режима реальных адресов. При работе в защищённом режиме процессор контролирует практически все действия программ и позволяет разделить операционную систему, драйвера и прикладные программы разными уровнями привилегий. Цитата А по поводу цифры 8, а че там бит присутствия сегмента = false? Не путай селектор с дескриптором Подробней можешь прочитать ТУТ |
Сообщ.
#19
,
|
|
|
аааа, пардон, гоню.
Добавлено т.е загрузкой цифры 8 в сегментные регистры осуществляется загрузка селектора первого десктриптора в глобальной таблице, с 0-м уровнем превилегий, так? |
Сообщ.
#20
,
|
|
|
PROGRAM MAN дай пожалуйста мне свой E-mail
Добавлено Хотел тебе файл один скинуть,но на форум он не хочет загружаться, видите ли формат *.rar его не устраивает! |
Сообщ.
#21
,
|
|
|
Lex_Onix, Для личной переписки существует PM
Правила, п.9 Цитата всего скорее не формат а размервидите ли формат *.rar его не устраивает! Цитата .е загрузкой цифры 8 в сегментные регистры осуществляется загрузка селектора первого десктриптора в глобальной таблице, с 0-м уровнем превилегий, так? Да. Обычно это организуется вот так: GDT: descriptor0 descriptor1 descriptor2 ... sel0 =descriptor0-GDT sel1 =descriptor1-GDT sel2 =descriptor2-GDT ... mov ds,sel1 mov ss,sel2 Цитата ВОТ НА ЭТОМ МЕСТЕ ОН И ПЕРЕЗАГРУЖАЕТСЯ Lex_Onix, ВероятноОШИБКА была в этом: Цитата При загрузке недопустимого значения селектора процессор будет генерировать исключение, даже если вы не обращались через него к памяти. |
Сообщ.
#22
,
|
|
|
Цитата ProgramMan @ Lex_Onix, ВероятноОШИБКА была в этом: Цитата При загрузке недопустимого значения селектора процессор будет генерировать исключение, даже если вы не обращались через него к памяти. Это не так. Это утверждение верно только для CS и SS. В DS например можно загрузить допустим 0 и отлично себя чувствовать хоть 100 лет. До первого использования. А ошибка там как минимум была в USE32. Разрядность менять не надо. |
Сообщ.
#23
,
|
|
|
M Lex_Onix, слушай. Кричать об "этом месте" не обязательно так громко. А вот тег [code]...[/code] будь добр поставь в первом сообщении, иначе рискуешь получить "нарушение" (не ставлю пока, потому что вроде далее исправился). |
Сообщ.
#24
,
|
|
|
мне тоже этот код попадался, кроме того что там две замены кодировки латиницы на кирилицу, а случайно так не ляпнешь, он начинает работать возможно (по крайней мере ошибки не выдает или не перезагружается) если заменить декриптор
dw 0ffffh,0ffh,9200h,8fh |
Сообщ.
#25
,
|
|
|
http://www.df.lth.se/~john_e/gems/gem0022.html
;------------------------------------------------------------------------- ;------------------------------------------------------------------------- .386p CSEG segment use16 assume cs:cseg, ds:cseg, ss:cseg, es:cseg org 100h start: ;------------------------------------------------------------------------- Code16GDT = 8 Data16GDT = 16 Data32GDT = 24 Set4Gig: in al, 92h or al, 02h out 92h, al ;call enablea20 mov eax,cr0 ; check for V86 mode ror eax,1 jc leave4gb ; exit routine if V86 mode is set. mov ax,cs ; set up GDT for this code segment mov Code, ax mov ds,ax movzx eax,ax shl eax,4 add dword ptr ds:GDTptr+2,eax lgdt fword ptr ds:GDTptr mov ax,cs and eax,65535 shl eax,4 mov word ptr ds:Mem32_GDT[Code16GDT+2],ax mov word ptr ds:Mem32_GDT[Data16GDT+2],ax ror eax,16 mov byte ptr ds:Mem32_GDT[Code16GDT+4],al mov byte ptr ds:Mem32_GDT[Data16GDT+4],al mov byte ptr ds:Mem32_GDT[Code16GDT+7],ah mov byte ptr ds:Mem32_GDT[Data16GDT+7],ah cli ; no interrupts mov eax,cr0 ; set protected mode or al,1 mov cr0,eax db 0eah ; far jump to pmode label dw offset pmode dw Code16GDT pmode: mov ax,Data32GDT ; now we are in protected mode mov ds,ax ; set all selector limits to 4 GB mov es,ax mov fs,ax mov gs,ax mov eax,cr0 ; restore real mode and al,0feh mov cr0,eax db 0eah ; far jump to rmode label dw offset rmode Code dw ? rmode: clc ; now we are back in real mode, zero carry sti ; to indicate ok and enable interrupts leave4gb: ret ;-------------------------------------------------------------------------- mem32_GDT dw 4 dup(0) dw 0ffffh,0ffh,9a00h,0 dw 0ffffh,0ffh,9200h,0 dw 0ffffh,0ffh,9200h,8fh GDTptr label fword dw offset GDTptr-1-offset Mem32_GDT dd offset Mem32_GDT ; Absolute adress GDTtable dw 0 enablea20: mov al,0d1h out 64h,al call a20wait mov al,0dfh out 60h,al call a20wait mov al,0ffh out 64h,al call a20wait ret a20wait: in al,64h jmp $+2 and al,2 jnz a20wait ret ;-------------------------------------------------------------------------- CSEG ends end start ;-------------------------------------------------------------------------- ;------------------------------------------------------------------------- .386p CSEG segment use16 assume cs:cseg, ds:cseg, ss:cseg, es:cseg org 100h ;------------------------------------------------------------------------- start: xor ax,ax mov gs,ax ; DS = 0 ; вывести символ в видеопамять: mov word ptr gs:[0B8000h],1b30h ret ;-------------------------------------------------------------------------- CSEG ends end start ;-------------------------------------------------------------------------- MASM32 10 ML.EXE 8.0 http://www.masm32.com/ http://www.microsoft.com/download/en/details.aspx?id=12654 @ECHO OFF COLOR 9F C:\masm32\bin\ml.exe /AT /omf NONAME.asm C:\masm32\bin\LINK16.EXE /TINY NONAME.obj,NONAME.com,nul,,, del NONAME.obj pause |
Сообщ.
#26
,
|
|
|
bomz и чего?
|
Сообщ.
#27
,
|
|
|
[attach=#0][/attach]Написал загрузчик MBR с нереальным режимом для HDD, проверил на 3-х компъютерах, на ноутбуке, на VMWARE, везде работает.
Правда это короткий вариант, работает только с 1- partischen. После загрузки DOS, необходимо открыть адресную линию А20, или запустить HIMEM.SYS (я использую вместо HIMEM.SYS XMRG.SYS). На днях попробую написать для дискеты. Прикреплённый файлMBR00.ASM (1,88 Кбайт, скачиваний: 230) |
Сообщ.
#28
,
|
|
|
andr00, и чтоооо?
Добавлено Ты серьезно считаешь, что поменять скрытую часть сегментного регистра настолько сложная задача, чтобы вот так делиться этим? Чем твой код лучше сотен таких же примеров в сети? Добавлено Цитата andr00 @ 1- partischen. partiton. |
Сообщ.
#29
,
|
|
|
Profi, ничем
|
Сообщ.
#30
,
|
|
|
Эксперементируя с нереальным режимом, столкнулся с неприятным моментом.
Программы, которые используют DPMI/VCPI , принудительно сбрасывают лимит с 4 Гиг. до 64 Кб. Это некоторые нужные программы (например NTDOS.EXE , которая позволяет из под DOS работать с NTFS). Решение нашел следующим способом. 1. Открываем файл (например NTDOS.EXE) любым HEX редактором (я использовал HIEW.EXE). 2. Ищем таблицу GDT по сигнатуре FF FF 00 00 00 92 00 00 (это селектор 64 Кб.) 3. Заменяем селектор на FF FF 00 00 00 92 8F 00 (это селектор 4 Гб.) 4. Сохраняем изменения. Кстати, после таких изменений, не нужно переходить в нереальный режим. Измененная программа будет делать это за вас. |