Как понимать байты в исполняемом файле и относиться к загрузке программы в память? - PullRequest
1 голос
/ 28 июля 2011

Следующее близко к моему вопросу, но у меня все еще отсутствует ссылка, которая поможет мне понять процесс загрузки.

Как DOS загружает программу в память?

У меня вопрос "что будет происходить на компьютере шаг за шагом, когда я наберу mf.com в командной строке?"

Я использую Windows 7 и установил NASM для компиляции. Ниже приводится сборка, которую я получил на одном из сайтов

Имя файла: mf.asm


org 100h

мов дх, сообщения мов ах, 9

int 21h RET

msg db "Привет, мир! $"


Я использовал следующую команду для получения файла My mf.com

nasm -f bin mf.asm -o mf.com

Теперь я запускаю mf.com, набрав

mf.com

я получаю результат Привет, мир! $

Я открыл двоичный файл mf.com в textpad, и он выглядел следующим образом.


   0: BA 08 01 B4 09 CD 21 C3  48 65 6C 6C 6F 2C 20 77  ********Hello, w
  10: 6F 72 6C 64 20 21 24                              orld !$

******** были соответствующими символами, которые были показаны в текстовых редакторах.

что будет происходить в машине шаг за шагом, когда я наберу mf.com в командной строке и нажму Enter? особенно "BA 08 01 B4 09 CD 21 C3", как эти 8 байтов будут использоваться?

Ответы [ 2 ]

1 голос
/ 28 июля 2011

Это байты, которые представляют сами инструкции, байты префикса (я думаю, до 4), первичный код операции (1 или 2), необязательные байты MODRM и SIB, байты смещения и, наконец, непосредственные операнды (если есть).Машина интерпретирует эти байты в зависимости от префикса и первичного кода операции инструкции.Если вы действительно хотите узнать, вы можете найти таблицы, которые показывают вам, что это в двоичном виде.

Процессоры не интерпретируют инструкции как мнемонику, мнемоника - только их, поэтому вам легче писать код,Эти мнемоники изменяются компилятором на то, что компьютер может понять, что это байт-код или необработанные двоичные данные.Аппаратные средства вступают во владение с этого момента.

1 голос
/ 28 июля 2011

Символы BA 08 01 B4 09 CD 21 C3 48 65 6C 6C 6F 2C 20 77 являются машинным кодом.Они будут переведены в инструкции по сборке.Из вашей программы они являются переводом следующего кода:

mov dx, msg mov ah, 9

int 21h ret

Итак, в двух словах, эти 8 байтов заставляют MOV и INT выполнять инструкции в вашем процессоре.Инструкция MOV копирует адрес ячейки памяти в регистр DX, который содержит строку «Hello World! $».

...