OSDev

для всех
Текущее время: 28 апр 2024, 22:36

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 8 ] 
Автор Сообщение
 Заголовок сообщения: fasm: статическая инициализация IDT
СообщениеДобавлено: 13 дек 2014, 13:51 

Зарегистрирован: 12 янв 2012, 11:24
Сообщения: 8
Необходимо статически инициализировать IDT
пример кода:
Код:
struc descINT    p,s,a
{
   .off_l   dw LOWORD p
   .sel           dw s
         db 0
   .attr1   db a
   .off_h   dw  HIWORD p
}

idt_table:
...
      idt_32 descINT _timer_int,0x8,10001110b
...
_timer_int:
...


есть ли в фасме что-то наподобие LOWORD, HIWORD ??


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 13 дек 2014, 19:13 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1206
А логическими операторами слабо воспользоваться?

Код:
DF_INT32        equ     1110b
DF_PRESENT      equ     80h

macro desc p1, p2, p3
{
dw (p2) and 0FFFFh
dw (p1) and 0FFFFh
db (p1) shr 16 and 0FFh
db (p3) and 0FFh or DF_PRESENT
db ((p2) or (p3)) shr 16 and 0FFh
db ((p1) or (p2)) shr 24
}

desc 8,_timer_int,DF_INT32


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 14 дек 2014, 12:52 

Зарегистрирован: 12 янв 2012, 11:24
Сообщения: 8
"invalid use of symbol" выдает на
Код:
dw _timer_int and 0FFFFh

_timer_int является 32р адресом, если заменить dw на dd то норм, но дескриптор имеет другую структуру, вот мне и надо вытащить отдельно старшее и младшее слова....


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 14 дек 2014, 14:04 

Зарегистрирован: 31 окт 2011, 18:20
Сообщения: 230
Вы что-то делаете не так.
Изображение
И с макросом так же компилируется:
Код:
use32
org 1234567
struc descINT    p,s,a
{
   .off_l   dw p and 0FFFFh
   .sel     dw s
            db 0
   .attr1   db a
   .off_h   dw p shr 16
}

idt_table:
      idt_32 descINT _timer_int,0x8,10001110b

_timer_int:     

LOWORD/HIWORD есть по сути те же макросы на логических операторах, и никакой магии, которая заставит все работать, в них нет. Если не работает на логических операторах, не сработает и с этими макросами, если их сделать.
А что конкретно не работает по одной строке кода сказать невозможно.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 14 дек 2014, 16:27 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1206
fasm должен знать значение _timer_int. Bargest для этого разместил выше директиву org. Даже если выходной файл поддерживает дробление релоков, навряд ли вам какой-нибудь компилятор позволит сделать такое с неизвестным адресом. Не можете вычислить адрес статически, вычисляйте его динамически на этапе выполнения.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 14 дек 2014, 17:32 

Зарегистрирован: 12 янв 2012, 11:24
Сообщения: 8
похоже разобрался, адрес известен будет лишь на этапе линковки, а из-за "format MS COFF " fasm выдает ошибку ((


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 14 дек 2014, 20:03 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1206
По идее org можно использовать и внутри секций файлов опред. формата. Главное, на этапе выполнения обеспечить совпадение адресов. Например, если известен базовый адрес загрузки, разместите _timer_int в специальной секции и дайте инструкцию компоновщику разместить эту секцию в файле первой по счету.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 07 май 2015, 19:59 

Зарегистрирован: 09 янв 2015, 04:04
Сообщения: 35
Если еще актуально
Код:
format ELF
include 'macro/proc32.inc' ;/ Определения стандартных вызовов
section '.text' executable
org 0x400000  ;Базовый адрес секции
...КОД...

;Описание структуры дескриптора
STRUC IDT_Unit   offs,sel,type
{
.offs_l   dw  offs and 0xFFFF      ;0
.sel     dw  sel      ;2
.cntr     db  0    ;4
.dtype     db  type     ;5
.offs_h   dw ((offs shr 16) and 0xFFFF)      ;6
}
;Собственно сама IDT. Можно расположить в любой секции
IDT:
_int0  IDT_Unit EXCEPTION.INT_0,8,0x8F
_int1  IDT_Unit EXCEPTION.INT_1,8,0x8F
_int2  IDT_Unit EXCEPTION.INT_2,8,0x8F
_int3  IDT_Unit EXCEPTION.INT_3,8,0x8F

Надеюсь помог чем нибудь


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 8 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 21


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB