Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.08.2017, 21:36   #11
7in
(aka Jin X) !RTFM!
Форумчанин
 
Аватар для 7in
 
Регистрация: 14.12.2014
Сообщений: 295
По умолчанию

Николай, для fasm'а отличия есть. В tasm/masm можно писать и mov es:[di],ax, а в fasm – только mov [es:di],ax
Делаю лабы на Asm/Delphi/C++/Python/VBA(Excel): asmlabs.ru
7in вне форума Ответить с цитированием
Старый 23.08.2017, 21:49   #12
Nikolay2015
Пользователь
 
Регистрация: 23.08.2017
Сообщений: 59
По умолчанию

Цитата:
Сообщение от 7in Посмотреть сообщение
Николай, для fasm'а отличия есть. В tasm/masm можно писать и mov es:[di],ax, а в fasm – только mov [esi],ax
Спасибо за пояснение. Но я никак не возьму в толк почему код не работает. Уже 7 сутки без успешно.
Nikolay2015 вне форума Ответить с цитированием
Старый 23.08.2017, 22:00   #13
7in
(aka Jin X) !RTFM!
Форумчанин
 
Аватар для 7in
 
Регистрация: 14.12.2014
Сообщений: 295
По умолчанию

А как код отлаживается?
Вот, к примеру, jmp 1000h:r_start прыгает в никуда. Потому что код загрузился по адресу 0:7C00h, а по адресу 1000h:r_start ничего нет. Вот и зависло всё где-то там
Зачем этот jmp вообще нужен тут?
p.s. Кстати, cli/sti тут лишний, т.к. следующая инструкция после mov ss (pop ss) выполняется без прерывания (даже без int 1, без NMI и пр).
Делаю лабы на Asm/Delphi/C++/Python/VBA(Excel): asmlabs.ru

Последний раз редактировалось 7in; 23.08.2017 в 22:04.
7in вне форума Ответить с цитированием
Старый 23.08.2017, 22:06   #14
7in
(aka Jin X) !RTFM!
Форумчанин
 
Аватар для 7in
 
Регистрация: 14.12.2014
Сообщений: 295
По умолчанию

Если нужна уверенность, что сегмент будет = 0, тогда jmp 0:r_start и в начало org 7C00h
Ну и mov ax,1000h заменить на xor ax,ax
Делаю лабы на Asm/Delphi/C++/Python/VBA(Excel): asmlabs.ru
7in вне форума Ответить с цитированием
Старый 23.08.2017, 22:07   #15
Nikolay2015
Пользователь
 
Регистрация: 23.08.2017
Сообщений: 59
По умолчанию

Цитата:
Сообщение от 7in Посмотреть сообщение
А как код отлаживается?
Вот, к примеру, jmp 1000h:r_start прыгает в никуда. Потому что код загрузился по адресу 0:7C00h, а по адресу 1000h:r_start ничего нет. Вот и зависло всё где-то там
Зачем этот jmp вообще нужен тут?
p.s. Кстати, cli/sti тут лишний, т.к. следующая инструкция после mov ss (pop ss) выполняется без прерывания (даже без int 1, без NMI и пр).
Хорошо. НЕ МОГУ не согласиться.
Но переписал я кода на:
Код:
use16
org 0x7c00                 
                            

    xor ax, ax
    mov ds, ax             

    cli                     
    lgdt [gdtr]             

    call OpenA20Gate       

    call EnablePMode        


OpenA20Gate:
    in al, 0x92         

    or al, 2            
    out 0x92, al

    ret


EnablePMode:
    mov eax, cr0
    or eax, 1
    mov cr0, eax

    jmp (CODE_DESC - NULL_DESC) : ProtectedMode


NULL_DESC:
    dd 0            
    dd 0

CODE_DESC:
    dw 0xFFFF       
    dw 0           
    db 0           
    db 10011010b   
    db 11001111b    
    db 0            

DATA_DESC:
    dw 0xFFFF       
    dw 0           
    db 0            
    db 10010010b    
    db 11001111b    
    db 0            
VIDEO_SEG:
    dw 0FFFFh
    dw 00080h
    db 0Bh
    db 092h
    db 040h
    db 0

gdtr:
    Limit dw gdtr - NULL_DESC - 1
    Base dd NULL_DESC  

use32

ProtectedMode:
    mov     ax, DATA_DESC - NULL_DESC
    mov     ds, ax 
    mov     ax, VIDEO_SEG - NULL_DESC
    mov     es, ax
    mov     cx, 10h
    mov     di, cx

    mov     ah, 07h
    mov     al, 'R'
    mov     [es:di],ax


    halt:
        nop
        jmp halt
Это уже входит в ProtectedMode но всё равно черный экран и каретка.
А определил я , что я прыгнул в ProtectedMode так. Попытался обратиться к 100h - дескриптору. И Процессор выдал исключение.
Nikolay2015 вне форума Ответить с цитированием
Старый 23.08.2017, 22:28   #16
7in
(aka Jin X) !RTFM!
Форумчанин
 
Аватар для 7in
 
Регистрация: 14.12.2014
Сообщений: 295
По умолчанию

Код:
VIDEO_SEG:
    dw 0FFFFh  ; seg limit (15:0)
    dw 8000h   ; base 15:0 - не 0080h !!!
    db 0Bh  ; base 23:16
    db 092h  ; P/DPL/S/Type (правильно или нет – не проверял, но оно должно быть тут)
    db 040h  ; G/DB/L/AVL/seg limit 19:16
    db 0  ; base 31:24
есть подозрение, что 92h или 40h нужно поменять местами - проверь сам
Делаю лабы на Asm/Delphi/C++/Python/VBA(Excel): asmlabs.ru
7in вне форума Ответить с цитированием
Старый 23.08.2017, 22:31   #17
Nikolay2015
Пользователь
 
Регистрация: 23.08.2017
Сообщений: 59
По умолчанию

Цитата:
Сообщение от 7in Посмотреть сообщение
Код:
VIDEO_SEG:
    dw 0FFFFh  ; seg limit (15:0)
    dw 8000h   ; base 15:0 - не 0080h !!!
    db 0Bh  ; base 23:16
    db 092h  ; P/DPL/S/Type (правильно или нет – не проверял, но оно должно быть тут)
    db 040h  ; G/DB/L/AVL/seg limit 19:16
    db 0  ; base 31:24
есть подозрение, что 92h или 40h нужно поменять местами - проверь сам
Процессор выкидывает исключение.
Nikolay2015 вне форума Ответить с цитированием
Старый 23.08.2017, 22:34   #18
Nikolay2015
Пользователь
 
Регистрация: 23.08.2017
Сообщений: 59
По умолчанию

Цитата:
Сообщение от 7in Посмотреть сообщение
Код:
VIDEO_SEG:
    dw 0FFFFh  ; seg limit (15:0)
    dw 8000h   ; base 15:0 - не 0080h !!!
    db 0Bh  ; base 23:16
    db 092h  ; P/DPL/S/Type (правильно или нет – не проверял, но оно должно быть тут)
    db 040h  ; G/DB/L/AVL/seg limit 19:16
    db 0  ; base 31:24
8000h -поставил. 092h и 40h оставил как изначально было. И о боже ЭТО РАБОТАЕТ. Благодарю вас обоих.
Nikolay2015 вне форума Ответить с цитированием
Старый 23.08.2017, 22:36   #19
7in
(aka Jin X) !RTFM!
Форумчанин
 
Аватар для 7in
 
Регистрация: 14.12.2014
Сообщений: 295
По умолчанию

Ну это подозрение было только (что надо поменять местами), потому что 0 и 0Bh поменяны местами. Сейчас сам проверил – да, 92h и 40h как было должно быть.
Поздравляю!

upd: Ой, чё-т я гоню, ничего не было поменяно
Делаю лабы на Asm/Delphi/C++/Python/VBA(Excel): asmlabs.ru

Последний раз редактировалось 7in; 23.08.2017 в 23:02.
7in вне форума Ответить с цитированием
Старый 23.08.2017, 22:38   #20
Nikolay2015
Пользователь
 
Регистрация: 23.08.2017
Сообщений: 59
По умолчанию

Цитата:
Сообщение от 7in Посмотреть сообщение
Ну это подозрение было только (что надо поменять местами), потому что 0 и 0Bh поменяны местами. Сейчас сам проверил – да, 92h и 40h как было должно быть.
Поздравляю!
Еду дальше теперь буду разбираться как работать в Protected Mode. Может есть советы что почитать?
Nikolay2015 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перевод программы с 32 бит на 64 бит систему andreyxdd Общие вопросы Delphi 3 19.07.2017 11:04
Исправить код программы: Ввести с клавиатуры 8-разрядное двоичное число Х, установить младший бит этого числа так, чтобы количество единичных бит в двоичном числе Х стало четным Zhan1234 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 25.05.2017 12:41
ОЗУ esa2esa Компьютерное железо 2 29.12.2010 20:45
Ковертирование из png 24 бит в png 8 бит isat Общие вопросы .NET 0 22.03.2010 13:38