Ассамблея. гибридная программа. & quot; Ошибка делени & quot; и я ничего не делю

Мне нужно сделать 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

Проблема в том, что если я запускаю свою программу, она возвращает «Ошибка деления», и я не использую деление: | Кто-нибудь может мне помочь?

-3

Решение

Трудно сказать, не зная, как все настраивает звонящий. Однако лучше всего отладить свой код, пошагово, проверяя правильность работы, чтобы точно определить, где вы ошиблись. Кроме того, ссылка на [bp — 8] мне кажется неверной, и если ваша обработка стека неверна, деление на ноль может быть вызвано возвратом в поврежденный стек. Когда ассемблер идет не так, сообщения от другого кода вокруг него редко бывают значимыми. Вы должны ожидать этого и всегда шаг за шагом через нового ассемблера наблюдать и оценивать его начальное поведение.

-1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]