Показать сообщение отдельно
  #19  
Старый 09.06.2012, 12:24
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Цитата:
о сути ассемблер для х64 отличается тем, что в нем есть qword (и регистры вроде с приставкой "r" - "rax, rbx, rdx...") и еще несколько новых команд, остальное все то же самое.
Особо в описание машинных кодов не вчитывался, но если правильно понял, то даже коды команд под x32 оставлены без изменений; все, что относится к x64 (qword'ы, rax, rbx,...) реализовано с помощью префиксов, не существующих в х32. То есть совместимость максимальная: код под х32, запущенный под х64, может и заработать...

Только что проверил - в своей х64 оси использовал х32 код:
Код:
use32
     mov eax, 1
     mov ebx, eax
     cmp eax, ebx
     test eax, eax
     add ebx, ecx
     mov eax, 1024*1024-4
     mov [eax], ebx 
(не надо пытаться понять смысл, это просто куча команд.)
Выполнилось без ошибок.
Из того что помню разница в push и pop: push 4 байт заменен на соответствующий push 8 байт.

А вот структура екзешника отличается, насколько я знаю: там указывается битность.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием