Сборка - добавьте слова с EAX - PullRequest
0 голосов
/ 15 декабря 2011

У меня есть следующий код:

Var1: dw 0xFE
Var2: db 0xAB
Var3: db 0xBC

И я хочу добавить по одному для каждой переменной.

Как я понял, память выглядит так: FE00ABBC

и для этого должна работать следующая команда:

mov eax, 0x010000101
add dword [Var1], eax

Но этот работает:

mov eax, 0x01010001
add dword [Var1], eax

Почему? Спасибо.

Ответы [ 3 ]

1 голос
/ 15 декабря 2011

Ваша проблема заключается в том, что вы не учли порядковый номер архитектуры.

0 голосов
/ 15 декабря 2011

Ваш achitecure имеет младший порядок, младшие значащие биты находятся по младшему адресу памяти.Это обратное к обычному западному направлению письма.

Память выглядит точно так, как вы описали, но когда она загружена, похоже, она переворачивается:

`FE 00 AB BC`
 low    high    address

 mov eax, 0x1010001

 01 00 01 01
 low    high    byte in eax

Итак, содержимое eax теперь01010001 если вы пишете слева направо для записи.

Проблема возникает из-за того, что порядок записи числовых констант в исходном коде ассемблера отличается от порядка, в котором байты фактически сохраняются в памяти.

0 голосов
/ 15 декабря 2011

похоже ваша карта памяти неверна.Я бы интерпретировал это так:

 BCAB00FE
 ^      ^
 |      |
MSB    LSB

Что бы точно объяснить поведение, которое вы видите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...