Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Gnu asm и директива org, необходимо установить смещение 
:(
    Опции темы
Dude03
Дата 2.1.2007, 00:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 257
Регистрация: 28.4.2006

Репутация: нет
Всего: 6



Необходимо написать загрузчик, решил писать на gas'e(почему-то он мне нравится smile ).
Но возникла проблема с директивой org. Конечно можно обойтись и без нее(какой-нить опцией -Ttext линкера), но хочется добить вопрос.
.org addr, fill smile 
В масме по этому все было легко, а as генерит код помойму очень странно: сначала идет "addr" байт "fill", а потом уже мой код. То есть, если напишу .org 0x7c00, 0x20 будет идти 0x7с00 символов с кодом 0x20, а потом мой код.  
Пробовал по разному извращаться с этой директивой, но не выходит ничего путного=( 
PM MAIL   Вверх
MAKCim
Дата 2.1.2007, 10:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 2
Всего: 207



Dude03
.org - дополнение текущей секции до addr байт заданным значением, т. е надо ставить .org после твоего кода в текущей секции так:
Код

BOOTMEM    =    0x07C0

.code16
.text
.globl boot
boot:
    ljmp    $BOOTMEM, $start  /* make true address */
start:
...
#ifdef BOOT_FLOPPY
    .org 510
    .word 0xAA55
#else
    .org 446
/* next 512 - 446 bytes forMBR */
#endif

Ttext ставишь на 0, entry на boot
Добавлено @ 10:25 
Цитата

почему-то он мне нравится

он реально лучше, согласен  smile 

Это сообщение отредактировал(а) MAKCim - 2.1.2007, 10:30


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Dude03
Дата 2.1.2007, 16:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 257
Регистрация: 28.4.2006

Репутация: нет
Всего: 6



Цитата(MAKCim @  2.1.2007,  10:25 Найти цитируемый пост)
ljmp    $BOOTMEM, $start  /* make true address */

какой-то нехороший прием "делания" правильных адресов. 

может есть что-то эквивалентное этому(это фасм):
Код

    org 0x7C00

use16

start:

    cli
    mov ax, cs
    mov ds, ax
    mov ss, ax


Это сообщение отредактировал(а) Dude03 - 2.1.2007, 16:42
PM MAIL   Вверх
MAKCim
Дата 2.1.2007, 17:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 2
Всего: 207



Цитата

какой-то нехороший прием "делания" правильных адресов. 

почему? Все очень даже правильно
по сути после POST BIOS 
вызывается int 19h, считывается 1 сектор и записывается по адресу 0x7C00
туда же и передается управление, т. е CS = 0, IP = 0x7C00 к моменту считывания команды ljmp
т. к при сборке мы указываем Ttext = 0, то нам надо, чтобы и IP команды ljmp был нулем. Для этого и делаем far jump на сегмент с адресом 0x07C0 (адресация реального режима), при этом смещение $start станет равным размеру команды ljmp, т. е мы добились этим переходом того, что ljmp будет лежать по IP = 0
Цитата

может есть что-то эквивалентное этому(это фасм):

org в фасме я подозреваю не то же самое, что .org в AS


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Dude03
Дата 2.1.2007, 19:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 257
Регистрация: 28.4.2006

Репутация: нет
Всего: 6



Цитата(MAKCim @  2.1.2007,  17:24 Найти цитируемый пост)
org в фасме я подозреваю не то же самое, что .org в AS

судя по всему так и есть. org в фасме/масме/тасме указывает относительно чего считать смещение участка памяти.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm для Linux/Unix"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm для Linux/Unix | Следующая тема »


 




[ Время генерации скрипта: 0.1212 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.