На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Перед отправкой сообщения внимательно прочтите правила раздела!!!
1. Запрещается обсуждать написание вирусов, троянов и других вредоносных программ!
2. Помните, что у нас есть FAQ раздела Assembler и Полезные ссылки. Посмотрите, возможно, там уже имеется решение вашего вопроса.

3. Настоятельно рекомендуем обратить особое внимание на правила форума, которые нарушаются чаще всего:
  3.1. Заголовок темы должен кратко отражать её суть. Темы с заголовками типа "Срочно помогите!" или "Ассемблер" будут отправляться в Корзину для мусора.
  3.2. Исходники программ обязательно выделяйте тегами [code]...[/code] (одиночные инструкции можно не выделять).
  3.3. Нежелательно поднимать старые темы (не обновлявшиеся более года) без веской на то причины.

Не забывайте также про главные Правила форума!

Добро пожаловать и приятного вам общения!!! ;)
 
Модераторы: Jin X, Qraizer
Страницы: (4) 1 [2] 3 4  все  ( Перейти к последнему сообщению )  
> Переход в нереальный режим , загрузчик
    Evgeniy, это не так, когда отлаживал свою ось, была проблема, в том, что некоторые ВМ(непомню какие именно) изначально разришают A20 а некоторые нет. Когда было выловленно большенство багов, код работал на всех ВМ и на реальной машине.

    Pavia, в бошь, в режиме отладчикак есть команда help ;) , бряк можно ставить командой break
    Сообщение отредактировано: ProgramMan -
      Опрокинули Барбоса напрочь. :lol:
      :blink:

      Добавлено
      Цитата e-moe @
      В том же Зубкове, если внимательно и вдумчиво читать, есть пример перехода в нереальный режим и DPMI в том листинге и не пахнет


      а можно ссылку на главу? или может мы разных Зубковых имеем ввиду? Я имею ввиду Зубков С. В. "Assembler" 1999 Издательство «ДМК Пресс».
      а может я не вдумчиво смотрел? :blink:

      А по поводу цифры 8, а че там бит присутствия сегмента = false?
        Barbosman, у зубкова действительно есть пример использования DMPI, НО DMPI это интерфейс, обеспечиваемый либо BIOSом либо ОС, НЕ ПРОЦЕССОРОМ.

        Цитата из Зубкова "Ассемблер" издание 1999г
        Цитата

        глава 6. Программирование в защищенном режиме
        ...
        Этот режим намного сложнее реального, поэтому, чтобы переключить в него процессор и поддерживать работу в этом режиме, надо написать небольшую операционную систему. Кроме того, если процессор уже находится под управлением какой-то операционной системы, которая перевела его в защищенный режим, например Windows 95, она, скорее всего, не разрешит программе устранить себя от управления компьютером. С этой целью были разработаны специальные интерфейсы, позволяющие программам, запущенным в режиме V86 в DOS, переключаться в защищенный режим простым вызовом соответствующего прерывания — VCPI и DPMI.

        смотри также главу 6.3. "Интерфейс DPMI" и главу 6.2. "Интерфейс VCPI"

        Цитата с www.sasm.narod.ru
        Цитата

        В защищённый режим процессор надо переводить специальными операциями над системными регистрами и войти в этот режим процессор может только из режима реальных адресов. При работе в защищённом режиме процессор контролирует практически все действия программ и позволяет разделить операционную систему, драйвера и прикладные программы разными уровнями привилегий.


        Цитата
        А по поводу цифры 8, а че там бит присутствия сегмента = false?

        Не путай селектор с дескриптором
        Подробней можешь прочитать ТУТ
          аааа, пардон, гоню.

          Добавлено
          т.е загрузкой цифры 8 в сегментные регистры осуществляется загрузка селектора первого десктриптора в глобальной таблице, с 0-м уровнем превилегий, так?
            PROGRAM MAN дай пожалуйста мне свой E-mail

            Добавлено
            Хотел тебе файл один скинуть,но на форум он не хочет загружаться, видите ли формат *.rar его не устраивает! :(
              Lex_Onix, Для личной переписки существует PM ;)
              Правила, п.9
              Цитата
              видите ли формат *.rar его не устраивает!
              всего скорее не формат а размер

              Цитата
              .е загрузкой цифры 8 в сегментные регистры осуществляется загрузка селектора первого десктриптора в глобальной таблице, с 0-м уровнем превилегий, так?

              Да. Обычно это организуется вот так:
              ExpandedWrap disabled
                GDT:
                descriptor0
                descriptor1
                descriptor2
                ...
                sel0 =descriptor0-GDT
                sel1 =descriptor1-GDT
                sel2 =descriptor2-GDT
                ...
                mov ds,sel1
                mov ss,sel2


              Цитата
              ВОТ НА ЭТОМ МЕСТЕ ОН И ПЕРЕЗАГРУЖАЕТСЯ

              Lex_Onix, ВероятноОШИБКА была в этом:
              Цитата
              При загрузке недопустимого значения селектора процессор будет генерировать исключение, даже если вы не обращались через него к памяти.
                Цитата ProgramMan @
                Lex_Onix, ВероятноОШИБКА была в этом:

                Цитата
                При загрузке недопустимого значения селектора процессор будет генерировать исключение, даже если вы не обращались через него к памяти.

                Это не так. Это утверждение верно только для CS и SS.
                В DS например можно загрузить допустим 0 и отлично себя чувствовать хоть 100 лет.
                До первого использования.
                А ошибка там как минимум была в USE32.
                Разрядность менять не надо.
                Сообщение отредактировано: cppasm -
                  M

                  Lex_Onix, слушай. Кричать об "этом месте" не обязательно так громко. А вот тег [code]...[/code] будь добр поставь в первом сообщении, иначе рискуешь получить "нарушение" (не ставлю пока, потому что вроде далее исправился).
                    мне тоже этот код попадался, кроме того что там две замены кодировки латиницы на кирилицу, а случайно так не ляпнешь, он начинает работать возможно (по крайней мере ошибки не выдает или не перезагружается) если заменить декриптор

                    dw 0ffffh,0ffh,9200h,8fh
                      http://www.df.lth.se/~john_e/gems/gem0022.html

                      ExpandedWrap disabled
                        ;-------------------------------------------------------------------------
                        ;-------------------------------------------------------------------------
                        .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
                        ;--------------------------------------------------------------------------

                      ExpandedWrap disabled
                        ;-------------------------------------------------------------------------
                        .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
                      ExpandedWrap disabled
                        @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
                        bomz и чего?
                          [attach=#0][/attach]Написал загрузчик MBR с нереальным режимом для HDD, проверил на 3-х компъютерах, на ноутбуке, на VMWARE, везде работает.
                          Правда это короткий вариант, работает только с 1- partischen.
                          После загрузки DOS, необходимо открыть адресную линию А20, или запустить HIMEM.SYS (я использую вместо HIMEM.SYS XMRG.SYS).
                          На днях попробую написать для дискеты.
                          Прикреплённый файлПрикреплённый файлMBR00.ASM (1,88 Кбайт, скачиваний: 230)
                            andr00, и чтоооо?

                            Добавлено
                            Ты серьезно считаешь, что поменять скрытую часть сегментного регистра настолько сложная задача, чтобы вот так делиться этим? Чем твой код лучше сотен таких же примеров в сети?

                            Добавлено
                            Цитата andr00 @
                            1- partischen.

                            partiton.
                              Profi, ничем
                                Эксперементируя с нереальным режимом, столкнулся с неприятным моментом.
                                Программы, которые используют 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. Сохраняем изменения.

                                Кстати, после таких изменений, не нужно переходить в нереальный режим.
                                Измененная программа будет делать это за вас.
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (4) 1 [2] 3 4  все


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0549 ]   [ 18 queries used ]   [ Generated: 28.03.24, 15:40 GMT ]