Я часто вижу в коде команду ORG(обычно в начале объявляемого сегмента данных), но как ее использовать и зачем она нужна не знаю, кто-нибудь может доходчиво объяснить начинающему кодеру?
Это директива компилятору(линкеру), см. справку по ним. В кратце если компилить "label: mov eax,label", то в еax должен оказатся адрес метки label в памяти или если говорить о коде, то EIP команды mov К примеру, это скомпилится по умолчанию в "mov eax,0x00401000", но можно перед меткой переопределить её адрес, если поставить org 0, то получится "mov eax,0"
Синтаксис: ORG выражение ORG $+выражение Описание: Загружает в программный счетчик адрес, указанный параметром <выражение>. Ассемблер использует эту директиву для настройки программного счетчика (счетчик адресов, данных; location counter). Директива ORG $+выражение заставляет ассемблер прибавить к программному счетчику количество байт, указанное параметром <выражение>. <Выражение> должно вычисляться в константу без ссылок наперед (without forward references). Внутри блока STRUCT, параметр <выражение> указан относительно начала Структуры. Это можно использовать для создания элементов структуры, которые обращаются к байтам, расположенным в памяти ниже начала структуры.
SaNTa_RnD Хоть бы указали к какому компилятору относится вопрос. Большинство препроцессоров (masm, tasm) трактуют ORG так, как объяснил bogrus, но не все (nasm слегка халтурит .
Слушай внимательно ORG это директива компилятора которая говорит ему откуда начинается "точка входа в программу"- то же самое с какого места начинает выполнение твоя программа,в COM-файлах это ORG 100h,потому что до этого адреса начинается PSP-("Префикс програмного сегмента") и если не указать эту директиву программа начнет своё выполнение с адреса 0000:0000 где находится PSP и затерет все данные т.е PSP,кстати область PSP занимает как раз 256 байт а в hex именно 100h,вот поэтому в начале идет PSP от 0000:0000 до 100h а уж потом работает твой код начинаюшийся с адреса 100h для которого ты и ставиш ORG 100h