2013-03-22 3 views
0

Я столкнулся с этой проблемой, используя 64-разрядный встроенный ассемблер в Delphi XE3, который я не понимаю.64-разрядная встроенная сборка в Delphi XE3

Я попробовал это, и он работает на 32-битных и 64-разрядные

function test(a, b: integer): integer; assembler; register; 
asm 
    mov eax, a 
    add eax, edx 
end; 

Однако, это работает только на 32-разрядных, но не 64-бит, в 64-битном компилирует, но не вернул правильный результат из суммы двух целых чисел.

function test(a, b: integer): integer; assembler; register; 
asm 
    add eax, edx 
end; 

Я знаю, что предыдущий код FPU, такие как FLD, STP работает на 32-битной, но это даст ошибку компиляции на 64-разрядный компилятор. Любая идея, как обрабатывать плавающие числа в 64-битных?

+1

«Может кто-нибудь дать мне быстрый учебник» не является хорошим вопросом переполнения стека. Более того, код в вопросе использует 32-битные целые единицы, но вы действительно заинтересованы в коде FPU. Который радикально отличается в 64 бит. Мой самый сильный совет - перенести весь свой код ассемблера на Pascal и позволить компилятору сделать тяжелый подъем. –

+0

Собственно, приятель! когда вы видите вещи thios, вам просто нужно открыть окно процессора и сравнить, в каких регистах входят параметры. Если вы работаете с ассемблером, тогда отладка в ассемблере - это ваш дом! Если нет - тогда вам лучше спросить кого-нибудь, кто знает, что такое CPU, регистры и ассемблер. –

+0

@ Arioch'The Испытание и ошибка в отладчике - это не способ узнать MS x64 ABI. Официальная документация - как это сделать. –

ответ

Смежные вопросы