Доступ к операндам и операциям из IA32 в Linux

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

(Сборка гну):

| address  || Value |
|  0x100   || 0xFF  |
|  0x104   || 0xAB  |
|  0x108   || 0x13  |
|  0x10C   || 0x11  |


| Register|| Value |
|  %eax   || 0x100 |
|  %ecx   ||  0x1  |
|  %edx   ||  0x3  |

Заполните следующую таблицу соответствующими значениями для указанных операндов:

|  Operand     || Value |
|   %eax       ||
|   0x104      ||
|  $0x108      ||
|  (%eax)      ||
|  4(%eax)     ||
| 9(%eax,%edx) ||
|260(%ecx,%edx)||
|0xFC(,%ecx,4) ||
|(%eax,%edx,4) ||

Глядя на это, я могу сказать, что первый операнд имеет шестнадцатеричное значение 0x100 и является регистром, второй я не могу сказать, потому что раньше ничего не имел, у третьего операнда есть флаг доллара, я читал, что это немедленный операнд, не могу сказать, какое значение он получает.

4(%eax) это, вероятно, адрес памяти, а 4 - смещение, с этого момента я понятия не имею...

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

С уважением, Соуза.

1 ответ

Решение

Кажется, вам нужно посмотреть синтаксис AT&T. Вот краткое описание того, как интерпретировать операнды памяти синтаксиса AT&T (в разделе "Синтаксис стиля AT&T").

Другие вопросы по тегам