Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.08.2020, 17:19   #1
Dymanski200
Новичок
Джуниор
 
Регистрация: 08.08.2020
Сообщений: 8
По умолчанию Где в бинарнике хранится информация по org 0x7C00 ?

Здравствуйте, только начал изучать язык ассемблера.
Имеется строка
Код:
org 0x7C00
Подскажите, где храниться информация в бинарном файле после трансляции, о том что программа должна грузиться по адресу 0x7C00 ?
Просмотрел hex редактором, но увидел только основные инструкции, без намёков на
Код:
org 0x7C00
Спасибо
Dymanski200 вне форума Ответить с цитированием
Старый 08.08.2020, 18:36   #2
Black Fregat
Программист
Участник клуба
 
Аватар для Black Fregat
 
Регистрация: 23.06.2009
Сообщений: 1,772
По умолчанию

Нигде не хранится. Это влияет только на процесс ассемблирования
Black Fregat вне форума Ответить с цитированием
Старый 08.08.2020, 21:32   #3
Dymanski200
Новичок
Джуниор
 
Регистрация: 08.08.2020
Сообщений: 8
По умолчанию

Цитата:
Сообщение от Black Fregat Посмотреть сообщение
Нигде не хранится. Это влияет только на процесс ассемблирования
Хорошо, тогда почему бинарник с org 0x7C00 и точно такой же бинарник без org 0x7C00 имеют абсолютно одинаковое содержимое в hex редакторе, но загружаются в разные адреса озу ? Где тогда храниться разница ?
Dymanski200 вне форума Ответить с цитированием
Старый 08.08.2020, 22:27   #4
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

Цитата:
Сообщение от Dymanski200 Посмотреть сообщение
но загружаются в разные адреса озу
А с чего вы взяли, что они загружаются на разные адреса?
Кроме того, на x86 можно писать перемещающийся код, который будет работать с любого адреса.
waleri вне форума Ответить с цитированием
Старый 09.08.2020, 00:07   #5
FPaul
Форумчанин
 
Регистрация: 25.01.2015
Сообщений: 472
По умолчанию

Попробовал генерировать листинг вашего исходника. Но, почему-то NASM, в отличие от MASM+TASM в листинге не отмечает значения констант (и меток в том числе).
Для теста можно загрузить эти константы в регистр и там их наблюдать
Код:
section .text
     bits 16
     org 0x7C00
start:
     mov ax, cs
     mov ds, ax
     mov ax, end
     mov ax, start
end:
     times 0x1FE-end+start db 0
     db 0x55,0xAA
При этом формируется такой листинг
Код:
     1                                  section .text
     2                                       bits 16
     3                                       org 0x7C00
     4                                  start:
     5 00000000 8CC8                         mov ax, cs
     6 00000002 8ED8                         mov ds, ax
     7 00000004 B8[0A00]                     mov ax, end
     8 00000007 B8[0000]                     mov ax, start
     9                                  end:
    10 0000000A 00<rept>                     times 0x1FE-end+start db 0
    11 000001FE 55AA                         db 0x55,0xAA
Если открыть файл в hex-редакторе с дизассемблером, то видно, что start=7C00h, end=7C0Ah.

Про загрузку - вы явно ошибаетесь. Загрузку выполняет не сам бинарик, а некая системная программа, в вашем случае - загрузчик из BIOS - который, не глядя, загружает определённый сектор дискеты в определённую область памяти со смещением 7C00h. Именно поэтому в исходнике такая константа при org.

Лично вы можете менять значение при org, но программа-загрузчик всё равно будет читать загрузочный сектор дискеты в память со смещением 7C00h. При этом ваш код из загрузочного сектора будет неправильно работать с переменными, строками и прочим.



Кстати, у masm листинг более информативен
Код:
_TEXT   segment word    public  'CODE'
        assume  cs:_TEXT, ds:_TEXT, ss:_TEXT
        org     7C00h
@@start:
        mov     ax,     cs
        mov     ds,     ax
        mov     ax,     @@end
        mov     ax,     @@start
@@end:
        db      1FEh-(@@end-@@start) dup(0)
        db      055h, 0AAh
_TEXT   ends

        end     @@start
листинг
Код:
Microsoft (R) Macro Assembler Version 6.15.8803		    08/09/20 00:16:13
main.asm						     Page 1 - 1


 0000				_TEXT	segment	word	public	'CODE'
				        assume  cs:_TEXT, ds:_TEXT, ss:_TEXT
					org 	7C00h
 7C00				@@start:
 7C00  8C C8				mov 	ax, 	cs
 7C02  8E D8				mov 	ds, 	ax
 7C04  B8 7C0A R			mov 	ax, 	@@end
 7C07  B8 7C00 R			mov 	ax, 	@@start
 7C0A				@@end:
 7C0A  01F4 [				db	1FEh-(@@end-@@start) dup(0)
        00
       ]
 7DFE  55 AA				db 	055h, 0AAh
 7E00				_TEXT	ends

					end	@@start
Microsoft (R) Macro Assembler Version 6.15.8803		    08/09/20 00:16:13
main.asm						     Symbols 2 - 1




Segments and Groups:

                N a m e                 Size     Length   Align   Combine Class

_TEXT  . . . . . . . . . . . . .	16 Bit	 7E00	  Word	  Public  'CODE'	


Symbols:

                N a m e                 Type     Value    Attr

@@end  . . . . . . . . . . . . .	L Near	 7C0A	  _TEXT	
@@start  . . . . . . . . . . . .	L Near	 7C00	  _TEXT	

	   0 Warnings
	   0 Errors

Последний раз редактировалось FPaul; 09.08.2020 в 00:19.
FPaul вне форума Ответить с цитированием
Старый 09.08.2020, 12:32   #6
Black Fregat
Программист
Участник клуба
 
Аватар для Black Fregat
 
Регистрация: 23.06.2009
Сообщений: 1,772
По умолчанию

Цитата:
Сообщение от Dymanski200 Посмотреть сообщение
тогда почему бинарник с org 0x7C00 и точно такой же бинарник без org 0x7C00 имеют абсолютно одинаковое содержимое в hex редакторе
Значит, там нет команд, зависящих от положения кода в памяти. Очень много есть команд, которые не меняются при перемене положения кода

Цитата:
Сообщение от Dymanski200 Посмотреть сообщение
но загружаются в разные адреса озу
А это уже от самого кода никак не зависит, только от загрузчика
Black Fregat вне форума Ответить с цитированием
Старый 09.08.2020, 14:52   #7
Dymanski200
Новичок
Джуниор
 
Регистрация: 08.08.2020
Сообщений: 8
По умолчанию

Вы меня совсем не поняли. Откуда процессор знает, что ему нужно читать программу с носителя именно в адрес 0x7C00 ? Вот я написал в коде
Код:
org 0x7C00
, транслировал в бинарник на жёсткий диск. Где сохранилась эта информация о том, что при исполнении программу нужно загрузить по 0x7C00?
Dymanski200 вне форума Ответить с цитированием
Старый 09.08.2020, 15:15   #8
Dymanski200
Новичок
Джуниор
 
Регистрация: 08.08.2020
Сообщений: 8
По умолчанию

Цитата:
Лично вы можете менять значение при org, но программа-загрузчик всё равно будет читать загрузочный сектор дискеты в память со смещением 7C00h. При этом ваш код из загрузочного сектора будет неправильно работать с переменными, строками и прочим.
Почему он будет работать неправильно ?
Вот 2 бинарника, в одном есть смещение, а в другом нет:
Код:
8C C8 8E D8 B4 42 B2 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 AA
Код:
8C C8 8E D8 B4 42 B2 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 AA
Не вижу никакой разницы в инструкциях вообще, но грузиться то они будут по разным адресам в озу ?
Dymanski200 вне форума Ответить с цитированием
Старый 09.08.2020, 15:36   #9
Dymanski200
Новичок
Джуниор
 
Регистрация: 08.08.2020
Сообщений: 8
По умолчанию

Открыл другую программу, сравнил бинарники со смещением и без, увидел разницу в 1 байт.
Сейчас открою онлайн дизассемблер и посмотрю на эту инструкцию.
Всем большое спасибо, всё понял. Извините за дотошность. Будут вопросы - приду ещё
Dymanski200 вне форума Ответить с цитированием
Старый 09.08.2020, 21:05   #10
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

Цитата:
Сообщение от Dymanski200 Посмотреть сообщение
Откуда процессор знает, что ему нужно читать программу с носителя именно в адрес 0x7C00
Процессору пофиг.
При включение питания процессор переходит на определенный адрес, все остальное делается инструкциями, записанными по этому адресу.
Загрузка по адресу 7С00 - не более чем спецификация.
waleri вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
В массиве хранится информация Борисс Паскаль, Turbo Pascal, PascalABC.NET 6 11.03.2015 08:44
Задача С++. В двумерном массиве хранится информация о количестве учеников. Найти численность самого большого класса I am Olik Помощь студентам 0 13.01.2014 18:25
В каком месте файла хранится информация о его структуре hammer4 Помощь студентам 4 20.08.2010 16:11
Пролог - В базе данных лаборатории хранится следующая информация об исследуемых водоемах: Наталек Павлова Помощь студентам 0 05.05.2010 20:35
Где хранится информация о версии программы? vrsl Помощь студентам 4 22.04.2010 15:36