| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Ошибка компиляции ассемблерной вставки |
| Автор: drkot 9.12.2012, 22:09 | ||
| [dcc64 Error]: E2116 Invalid combination of opcode and operands на строку
Насколько понимаю в x64 какойто другой ассемблер. Что не так? Где почитать? |
| Автор: Illusion Dolphin 9.12.2012, 23:32 | ||
| Про регистры http://msdn.microsoft.com/ru-ru/library/windows/hardware/ff561499%28v=vs.85%29.aspx EBX - 32 RBX - 64:
|
| Автор: drkot 10.12.2012, 00:45 |
| Спасибо |
| Автор: northener 10.12.2012, 01:33 |
О как! Компилятор 32-х битной Дельфи позволял использовать во встроенном ассемблере в инструкциях PUSH/POP 16-ти разрядные регистры, но не позволял использовать 8-ми разрядные. Теперь значит компилятор 64-х битной Дельфи позволяет использовать только 64-х разрядные регистры и никак иначе? :( Приму к сведению. |
| Автор: drkot 30.12.2012, 16:35 |
| регистры можно использовать любые но пуш работает с целыми регистрами |
| Автор: Чучмек 30.12.2012, 17:47 |
вранье. В дизассемблере видел push ebx для 64битного кода. Это просто делфа не компилит. |
| Автор: drkot 30.12.2012, 18:59 |
| если не сложно покажи машинные коды для х64 push ebx push rbx а то сколько компиляторов столько и мнений |
| Автор: drkot 30.12.2012, 19:22 |
| x64 Test.pas.37: PUSH BX 00000000006963C0 6653 push bx Test.pas.38: PUSH RBX 00000000006963C2 53 push rbx Test.pas.39: POP RBX 00000000006963C3 5B pop rbx Test.pas.40: POP BX 00000000006963C4 665B pop bx Test.pas.41: end; 00000000006963C6 C3 ret http://books.google.com.ua/books?id=c3SlgrqMid4C&pg=PA308&dq=push+64&hl=ru&sa=X&ei=wmXgUNyqF4b24QSZ-4CACA&ved=0CDgQ6AEwAA#v=onepage&q=push&f=false |
| Автор: Чучмек 30.12.2012, 21:06 |
| Сейчас нет под рукой x64. Через останов и Ctrl+Alt+C по F7 зайди в api-шную функцию.В LoadLiabraryW например. |
| Автор: Illusion Dolphin 30.12.2012, 21:12 | ||||
:000007FEFDE3B7B0 ; C:\Windows\system32\KERNELBASE.dll
|
| Автор: Чучмек 31.12.2012, 01:24 |
| push ebp - FFF5 Сейчас посмотрел как работает - идентично push rbp В чем прикол, не знаю. Баг в делфе. Еще один баг - push (64битная константа). Компилится как push (младшие 32 разряда) + db (старшие разряды) :( |