Что скобки означают в x86 asm?

Учитывая следующий код:

L1     db    "word", 0

       mov   al, [L1]
       mov   eax, L1

Что делает скобки ([L1]) представляют?

56
задан starblue 9 January 2010 в 11:02
поделиться

7 ответов

[

][][L1][] означает содержимое памяти по адресу L1. После запуска [] mov al, [L1][] здесь, регистр [] al[] получит байт по адресу L1 (буква 'w').[

].
47
ответ дан 26 November 2019 в 17:15
поделиться
[

] В скобках указано, что адрес не указывается. Например[

] [
mov eax, [1234]
] [

]означает, что содержимое адреса 1234 следует перенести в EAX. Итак:[

] [
1234 00001
] [

]EAX будет содержать 00001.[

].
6
ответ дан 26 November 2019 в 17:15
поделиться
[

] Просто означает получение памяти по адресу, помеченному меткой L1. [

] [

] Если вам нравится C, то подумайте об этом вот так: [][L1][] это то же самое, что []*L1[][

]
30
ответ дан 26 November 2019 в 17:15
поделиться

Как и во многих языках ассемблера, это означает косвенное обращение. Другими словами, первый mov загружает al с содержимым из L1 (байт 'w' другими словами), а не адрес.

Ваш второй mov фактически загружает eax с адресом L1 , и вы можете позже разыменовать его, чтобы получить или установить его содержимое.

В обоих случаях L1 концептуально считается адресом.

0
ответ дан 26 November 2019 в 17:15
поделиться

Предпочтение композиции над наследованием.

По тому, что вы сказали:

Объект альбома имеет один или несколько объектов исполнителя. Объект альбома имеет один или несколько объектов песни

класс Album { Художник [] Художники; Песни [] Песни; }

Однако я не совсем так это предполагаю. Я думаю, что каждый Альбом имеет одну или несколько песен, которые исполняются одним или несколькими исполнителями. Я бы сделал это как:

класс Альбом { Песни [] Песни; //другие свойства альбома }

Песня класса { Художник [] Художники; //другие свойства песни }

Артист класса { //свойства, специфичные для исполнителя }

И я настоятельно рекомендую взглянуть на принципы OOD.

-121--4533534-

Создайте собственный тип делегата:

delegate void MyAction(ref DataRow dataRow, double doubleValue);

И используйте MyAction вместо Action < ref DataRow, Double > - который, как вы отметили, не компилируется.

-121--1351852-

Они означают, что вместо перемещения значения регистра или числового значения L1 в регистр al , рассматривайте значение регистра или числовое значение L1 как указатель в память, извлекайте содержимое этого адреса памяти и перемещайте это содержимое в al .

В этом случае L1 является ячейкой памяти, но та же логика применима, если имя регистра было в скобках:

mov al, [ebx]

Также называется нагрузкой.

1
ответ дан 26 November 2019 в 17:15
поделиться

Указывает, что регистр должен использоваться как указатель на фактическое местоположение, а не как действие на сам регистр.

0
ответ дан 26 November 2019 в 17:15
поделиться

Прямая адресация памяти - al будет загружена со значением, расположенным по адресу памяти L1.

2
ответ дан 26 November 2019 в 17:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: