Разница между памятью в и PTR в сборке - PullRequest
0 голосов
/ 28 января 2020

Вернемся к этому с другим вопросом сборки. Мне трудно понять, в чем разница между квадратными скобками и ptr в сборке.

mov dword ptr eax, 1234 ; this should write 1234 to the memory address stored at eax right?
mov dword ptr [eax], 1234; this writes to the memory address that is stored at the memory address that is stored in eax?
mov [eax], 1234 ; this does the same as the first one right? it writes 1234 to the memory address that is stored in eax?

Может кто-нибудь, пожалуйста, пролить свет на эту топи c?

1 Ответ

3 голосов
/ 28 января 2020

dword PTR - это просто указатель размера для следующего. Поскольку размер eax известен, dword PTR является избыточным в первом случае.

То есть mov dword ptr eax, 1234 - это то же самое, что и просто написать mov eax, 1234.

mov dword ptr [eax], 1234 означает запись 1234 в двойное слово в памяти по адресу, заданному eax.

mov [eax], 1234, неоднозначно и даже не должно собираться. Ассемблер не может знать, собирались ли вы сохранить слово или двойное слово.

...