Форум программистов, компьютерный форум, киберфорум
FASM
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
6522 / 2625 / 356
Регистрация: 17.02.2013
Сообщений: 3,828
1

Директива ORG в FASM

24.04.2015, 18:59. Просмотров 1654. Ответов 5
Метки нет (Все метки)

Попробовал этот замечательный ассемблер и сразу напоролся на непонятное.
Директива ORG работает совершенно не так. Вот этот исходник
Assembler
1
2
3
4
    org 100h
    db  1
    org 1FFh
    db  2
порождает файл в 2 байта длиной. А мне нужна директива ORG в том смысле
в котором она была в MASM/TASM. Т.е я ожидаю откомпилированный файл в
котором было бы 100h байт - единица, потом 254 нуля и наконец двойка.
Как мне это сделать ?

Добавлено через 15 минут
Вот это из моего старого Форта на TASM.
Assembler
1
2
3
4
5
6
7
8
9
10
$CODE       MACRO   LEX, NAME, LABEL
LABEL:      _CODE = $
        _NAME = _NAME - (LEX AND 1Fh) - 5
    ORG _NAME
        DW  _CODE           ;Поле кода
        DW  _LINK           ;Поле связи
        _LINK = $
        DB  LEX, NAME       ;Поле имени
    ORG _CODE
        ENDM
Тут я перемещаюсь в конец памяти, там создаю очередную запись в односвязном
списке словаря со ссылками и текстовыми именами с длиной. Потом возвращаюсь
обратно и продолжаю компилировать код. Т.е. покомпилировал тут, покомпилировал
там и потом снова тут. FASM валит все это в одну кучу внизу памяти.
Плевать ему на ORG. Как заставить не плевать ?

Добавлено через 18 часов 18 минут
Пока сделал такие костыли.
Assembler
1
2
3
4
5
6
MACRO   ORG$    O
{
    REPEAT  O-$
        DB  0       ;Заполняет нулями до нужного адреса
    END REPEAT
}
Но это именно-что костыли.
1
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.04.2015, 18:59
Ответы с готовыми решениями:

Вызываю dll (написанную на vc++2008) из Fasm. Через 40 секунд вылет из программы.Без вызова dll из Fasm программа не вылетает.
Программа на vc++2008: #include "MathFuncsDll.h" #include <stdexcept> using namespace std; ...

Директива IRPC
Здравствуйте! Необходимо обработать строку символов с помощью макродирективы IRPC, но она...

Директива Pentium 4
Доброго времени суток! Подскажите пожалуйста какая директива лучше всего подходит для Pentium 4....

Директива org
Объясните что значит org 1000h (FASM) если программа будет загружена по адресу 2000h:0000h 1)...

5
4072 / 1788 / 209
Регистрация: 06.10.2010
Сообщений: 4,001
27.04.2015, 14:11 2
Почему бы не сделать так?
Assembler
1
2
3
4
org 100h
db 1
rb 254
db 2
0
Ушел с форума
Автор FAQ
13892 / 6926 / 789
Регистрация: 11.11.2010
Сообщений: 12,469
27.04.2015, 14:23 3
Привет, murderer!
а в FASM есть директива подобная масмовской/тасмовской lengthof для вычисления длины строки?
0
4072 / 1788 / 209
Регистрация: 06.10.2010
Сообщений: 4,001
27.04.2015, 18:13 4
Знаю только, что макрос struct объявляет константу равную размеру структуры.
Assembler
1
2
3
4
5
6
7
include 'MACRO\STRUCT.INC'
 
struct str
db 'aaaaaaaaaaaaaaaaaaaaaaaa'
ends
 
strlength = sizeof.str
Добавлено через 2 минуты
Вот нашёл
http://www.allasm.ru/comp_04.php
Следующий пример показывает, как расширить директиву db возможностью вычислить размер определенных данных:
Assembler
1
2
3
4
5
6
7
struc db [data]
{
 common
   label .data byte
   db data
   .size = $-.data
}
1
VD
24 / 13 / 3
Регистрация: 02.08.2012
Сообщений: 160
06.06.2015, 16:11 5
Разве ни эта директива задает начальный адрес для расчета адресов в программе?

"org" устанавливает адрес, по которому следующий за ней код должен появиться в памяти. За ней должно следовать числовое выражение, указывающее адрес. Эта директива начинает новое адресное пространство, следующий код сам по себе никуда не двигается, но все метки, определенные в нем и значение символа "$" изменяются как если бы он был бы помещен по этому адресу. Тем не менее обязанность поместить во время выполнения код по правильному адресу лежит на программисте.
0
6522 / 2625 / 356
Регистрация: 17.02.2013
Сообщений: 3,828
07.06.2015, 08:48  [ТС] 6
Блин.
Скомпилируй этот COM-файл в TASM-е или MASM-е :
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
CODE    SEGMENT
    ASSUME CS:CODE
    ORG 100h
 
START:  MOV DX, OFFSET TEXT1
    MOV AH, 9
    INT 21h
;Тут я вычислил в процессе компиляции, что мне
; надо данные (или код) расположить с адреса E000
    HERE = $
    ORG 0E000h
TEXT1   DB  'Hello,$'
    ORG HERE
;Продолжаю компилировать код где это делал раньше
    MOV DX, OFFSET TEXT2
    MOV AH, 9
    INT 21h
;Тут я вычислил в процессе компиляции, что мне
; надо данные (или код) расположить с адреса F000
    HERE = $
    ORG 0F000h
TEXT2   DB  ' world!$'
    ORG HERE
;Продолжаю компилировать код где это делал раньше
    MOV AX, 4C00h
    INT 21h
 
CODE    ENDS
    END START
Теперь вопрос. Как мне то-же самое сделать в FASM-e ?

Добавлено через 7 минут
Цитата Сообщение от VD Посмотреть сообщение
Тем не менее обязанность поместить во время выполнения код по правильному адресу лежит на программисте.
Во время компиляции, дорогой мой, во время компиляции. Иначе, что за ассемблер такой ?
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.06.2015, 08:48

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

При запуске компьютера открывается сайт zilvingamer.org ~ gameplayinfo.org
При каждом запуске компьютера открывается командная строка и в течении 1.5 секунды закрывается,...

При запуске системы выскакивают в chrome сайты dinoklafbzor.org и http://stabgames.org
Помогите решить проблему.

microformats.org VS schema.org
Микроформаты от microformats.org и микроразметка от schema.org . Кто что использует, есть ли...

Директива using
Задался вопросом по поводу директива using. #include <iostream> namespace x{int a = 100; int b...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.