Что за ORG и с чем его едят?

Тема в разделе "WASM.BEGINNERS", создана пользователем SaNTa_RnD, 31 янв 2006.

  1. SaNTa_RnD

    SaNTa_RnD New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2005
    Сообщения:
    21
    Адрес:
    Russia
    Я часто вижу в коде команду ORG(обычно в начале объявляемого сегмента данных), но как ее использовать и зачем она нужна не знаю, кто-нибудь может доходчиво объяснить начинающему кодеру?
     
  2. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine
    Это директива компилятору(линкеру), см. справку по ним. В кратце если компилить "label: mov eax,label", то в еax должен оказатся адрес метки label в памяти или если говорить о коде, то EIP команды mov



    К примеру, это скомпилится по умолчанию в "mov eax,0x00401000", но можно перед меткой переопределить её адрес, если поставить org 0, то получится "mov eax,0"
     
  3. asmasm

    asmasm New Member

    Публикаций:
    0
    Регистрация:
    16 янв 2006
    Сообщения:
    69
    Адрес:
    Uzbekistan
    Синтаксис: ORG выражение



    ORG $+выражение



    Описание:



    Загружает в программный счетчик адрес, указанный параметром <выражение>.

    Ассемблер использует эту директиву для настройки программного счетчика

    (счетчик адресов, данных; location counter).



    Директива ORG $+выражение заставляет ассемблер прибавить к программному

    счетчику количество байт, указанное параметром <выражение>. <Выражение>



    должно вычисляться в константу без ссылок наперед (without forward

    references).



    Внутри блока STRUCT, параметр <выражение> указан относительно начала

    Структуры. Это можно использовать для создания элементов структуры,

    которые обращаются к байтам, расположенным в памяти ниже начала

    структуры.
     
  4. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    SaNTa_RnD

    Хоть бы указали к какому компилятору относится вопрос. Большинство препроцессоров (masm, tasm) трактуют ORG так, как объяснил bogrus, но не все (nasm слегка халтурит :).
     
  5. brat315

    brat315 New Member

    Публикаций:
    0
    Регистрация:
    29 янв 2006
    Сообщения:
    21
    Адрес:
    Russia
    Слушай внимательно ORG это директива компилятора которая говорит ему откуда начинается "точка входа в программу"-

    то же самое с какого места начинает выполнение твоя программа,в COM-файлах это ORG 100h,потому что до этого адреса начинается PSP-("Префикс програмного сегмента") и если не указать эту директиву программа начнет своё выполнение с адреса 0000:0000 где находится PSP и затерет все данные т.е PSP,кстати область PSP занимает как раз 256 байт а в hex именно 100h,вот поэтому в начале идет PSP

    от 0000:0000 до 100h а уж потом работает твой код

    начинаюшийся с адреса 100h для которого ты и ставиш

    ORG 100h