Адреса памяти имеют типы, отличные от целочисленного типа в языке ассемблера ATT? - PullRequest
0 голосов
/ 26 октября 2018

Я знаю, что язык ассемблера ATT имеет целочисленные типы (слово, двойное слово, четверное слово) и типы с плавающей запятой (одинарная точность, двойная точность).

Имеют ли адреса памяти целочисленный тип или свой собственный тип?

Я видел, что адрес памяти указывается напрямую, а целочисленная константа указывается с префиксом $.Это потому, что целое число и адрес памяти имеют разные типы?

1 Ответ

0 голосов
/ 26 октября 2018

В синтаксисе AT & T разные операнды обозначаются разными синтаксисами:

%eax                register operand
(%eax)              indirect operand
foo                 direct operand
$foo                immediate operand
foo(%eax)           indexed operand
foo(%eax,%ebx,4)    scale, index, base operand

Таким образом, разница между foo и $foo заключается в том, что первый относится к памяти по адресу foo, тогда какпоследний относится к адресу foo.Например, разница между

mov 0x1234, %eax

и

mov $0x1234, %eax

заключается в том, что первый загружает значение по адресу 0x1234 в %eax, а второй загружает значение 0x1234.

...