Путаница в том, какие значения фактически вычисляются в инструкциях по сборке? - PullRequest
0 голосов
/ 05 марта 2020

Я прочитал ответы на те же вопросы, что и мои, о переполнении стека, но я все еще не понимаю, что происходит на самом деле «под колпаком» между этими двумя утверждениями, поэтому я могу лучше понять, как данные используются в других функциях.


Предположим, у нас есть теоретические регистры 'a' и 'b':

enter image description here

у нас есть инструкция: "addq a, b ", что переводится как b = a + b или b + = a.

Означает ли это" установить значение регистра b, равное сумме значения регистра b плюс значение регистра a «

В результате чего значение регистра b меняется с 5 на 5 + 7 = 12.

ИЛИ

Означает ли это« установить значение регистра b равным сумме из регистра ADDRESS of b плюс регистр ADDRESS из "

В результате чего значение регистра 'b изменяется с 5 на 0x1 + 0x2 = 0x3.

Я предполагаю, что первый ответ правильно, но тогда в чем разница между первым утверждением и этим государственным деятелем t: «addq (a), b»?

Моя интерпретация этого утверждения «установить значение регистра b равным (разыменованное значение регистра a, равное содержимому a, равное значению регистра) а) плюс значение регистра b.

В результате значение регистра b изменяется с 5 на 5 + 7 = 12. Но B не разыменовывается, поэтому это не должно означать "установить регистр ADDRESS значение b равно (разыменованное значение регистра a, равного содержимому a, равному значению регистра VALUE для a) плюс значение VALUE для регистра b?

Но тогда мне это тоже не соответствует, потому что b не разыменовывается, поэтому не будет ли установка регистра ADDRESS для b равной регистру VALUE для плюс плюс регистра ADDRESS для b?

Возможно, аргумент назначения неявно разыменован; возможно, зависит ли его адрес или значение от типа вызова функции; может быть, sr c (адрес или значение) всегда записывается в значение регистров назначения, поэтому разыменование либо недопустимо, либо подразумевается?


Клири, у меня есть какое-то понятие задом наперед и / или неверно, какова правильная интерпретация?

Или и существуют ли крайние случаи или правила что мне неизвестно, какие аргументы функций могут быть разыменованы или неявно разыменованы, или как это может измениться в зависимости от операции?

1 Ответ

2 голосов
/ 05 марта 2020

Мы не можем знать, если вы не указываете язык ассемблера и его разновидность.

Однако принято указывать ссылки на память, используя обозначения [] или ().

Без этих скобок мы могли бы предполагать простые обновления регистров.

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

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