Мне нужно сделать Hyrid-программу с использованием C ++ и сборки. Основная функция написана на с ++. Функция, написанная на ассемблере, добавляет элементы массива с плавающей точкой. У меня не было проблем сделать это, используя числа Intiger, но это выглядит очень по-разному, используя числа с плавающей точкой.
Вот код:
PROC fun
push bp
mov bp, sp
push cx
push esi
push ebx
mov cx, word ptr [bp+12] ; array size
mov [bp-8], ecx
mov esi, dword ptr [bp+8] ; array
mov ebx, 0fld dword ptr [ebx]
p:
fld dword ptr [esi]
fadd
add esi, byte ptr 8
loop pfst dword ptr [eax]
pop esi
pop cx
pop ebx
mov sp, bp
pop bp
ret
ENDP
Проблема в том, что если я запускаю свою программу, она возвращает «Ошибка деления», и я не использую деление: | Кто-нибудь может мне помочь?
Трудно сказать, не зная, как все настраивает звонящий. Однако лучше всего отладить свой код, пошагово, проверяя правильность работы, чтобы точно определить, где вы ошиблись. Кроме того, ссылка на [bp — 8] мне кажется неверной, и если ваша обработка стека неверна, деление на ноль может быть вызвано возвратом в поврежденный стек. Когда ассемблер идет не так, сообщения от другого кода вокруг него редко бывают значимыми. Вы должны ожидать этого и всегда шаг за шагом через нового ассемблера наблюдать и оценивать его начальное поведение.
Других решений пока нет …