Доступ к операндам и операциям из 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").