Что означает скобка ДО регистра в x86? - PullRequest
0 голосов
/ 07 ноября 2018

При отладке приложения с помощью IDA Pro и WinDbg я наткнулся на следующее утверждение.

mov esi, ds:(dword_16C6 - 16B2h)[esi]

Для упрощения, скажем,

mov esi, ds:(ABC)[esi]

Что означает (ABC) здесь?

1 Ответ

0 голосов
/ 07 ноября 2018

В синтаксисе Intel круглые скобки предназначены для группировки, как в математике. Это сделано потому, что

ds:dword_16C6 - 16B2h[esi]

может быть интерпретировано как

(ds:dword_16C6) - (16B2h[esi])

что не имеет никакого смысла.

В синтаксисе AT & T вместо группировки используются квадратные скобки.


Другими словами, это сложный способ написания ds:[esi + dword_16C6 - 16B2h], или ds:dword_16C6[esi - 16B2h], которые также являются допустимым синтаксисом MASM (я думаю).

Кто-то может сказать, что он излишне сложен, но он дает согласованность с синтаксисом symbol[index], который этот дизассемблер использует для режимов адресации символов + регистров.

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