SII wrote:
DW 3 размещает в памяти слово со значением 0003, однако, поскольку на IA-32 принят порядок "младший-старший", сначала в памяти будет лежать байт 03, а за ним -- 00.
MOV загружает двойное слово с адреса Data, а там байты лежат в таком порядке:
01 02 03 00
Соответственно, в EAX они грузятся задом наперёд: 00030201.
Чего чего?
В IA32 используется little endian
Достаточно открыть в любом HEX редакторе любое распакованное приложение Kolibri и посмотреть порядок следования байт в заголовке например после db 'MENUET01' сразу идет число dd 0x01.
Откуда 01 02 03 00??? Бред! Пить нужно после, а не до!
Для исключения неточностей вот второй вариант программа сохраняющая свой дамп, после записи значения.
le_check_dump.7z
Дамп:
Le_check_dump.7z
Результаты:
heed_le.png
patriotxp_le.png
Теперь ВНИМАНИЕ вопрос!
Откуда взялось:
SII wrote:EAX = 00030201h
Всё очень просто, на самом-то деле. Директивы определения данных (DB и тому подобные) всегда размещают указанные в них данные в порядке их следования, т.е.
DB 1, 2
сначала разместит в памяти байт 1, потом -- байт 2.
DW 3 размещает в памяти слово со значением 0003, однако, поскольку на IA-32 принят порядок "младший-старший", сначала в памяти будет лежать байт 03, а за ним -- 00.
MOV загружает двойное слово с адреса Data, а там байты лежат в таком порядке:
01 02 03 00
Соответственно, в EAX они грузятся задом наперёд: 00030201.
Все я разобрался! Противоречий между моими и SII утверждениями нет, просто он запутанно изложил материал.
Я так понимаю подразумевалась последовательная запись:
Mario wrote:Все я разобрался! Противоречий между моими и SII утверждениями нет, просто он запутанно изложил материал
Я отвечал конкретному человеку (Gluk) на конкретный его пост, где был приведён вызывавший у него вопросы код. Так что это не я запутанно излагаю, а некто не посмотрел, к чему вообще моё сообщение относилось. Пытаться ж понять без контекста... В общем, нельзя так бурно праздновать
Mario wrote:З.Ы. Отладчик правильный! Ведь его писал САМ! Он конечно тоже человек, но все же.
Не знаю, что такое САМ, однако разночтения в отображении памяти кода и памяти данных на скриншоте налицо. Так что очень похоже, что отладчик всё-таки неправильный.
Веришь или нет, но не пил! Совсем не пил! Видимо хреново выспался. Зато теперь любой, у кого возникнут вопрос и непонимание, может наглядно посмотреть. Раз уж даже такой болван как я разобрался.
SII wrote:Не знаю, что такое САМ, однако разночтения в отображении памяти кода и памяти данных на скриншоте налицо. Так что очень похоже, что отладчик всё-таки неправильный.
Пока не вижу неправильностей, можешь подробнее описать. Если что код начинается с 0x00000024, до этого идут данные заголовка.
Mario wrote:Раз уж даже такой болван как я разобрался
Не такой уж болван, если на ассемблере писать способен что-то сложней хелловорлда...
Пока не вижу неправильностей, можешь подробнее описать.
Обратите внимание на скриншот отладчика. В верхней части, где отображаются данные, по адресам 36-37 лежат байты AA BB, записанные туда MOVом, как и предполагалось (они красным обведены вместе со следующими за ними CC DD). А вот в нижней части, где дизассемблированный код, видно, что по адресам 36-37 лежат нули. Судя по всему, этот отладчик дизассемблирует код только один раз и не учитывает, что он может измениться. Изначально там действительно лежали нули, MOV записал новое значение, ну а отладчик не удосужился провести повторное дизассемблирование, поэтому там до сих пор видим 00 00.
SII wrote:Обратите внимание на скриншот отладчика. В верхней части, где отображаются данные, по адресам 36-37 лежат байты AA BB, записанные туда MOVом, как и предполагалось (они красным обведены вместе со следующими за ними CC DD). А вот в нижней части, где дизассемблированный код, видно, что по адресам 36-37 лежат нули. Судя по всему, этот отладчик дизассемблирует код только один раз и не учитывает, что он может измениться. Изначально там действительно лежали нули, MOV записал новое значение, ну а отладчик не удосужился провести повторное дизассемблирование, поэтому там до сих пор видим 00 00.
Вот ты про что, ну я так думаю это не существенно. Реальное положение всегда отображается в верхней панели.