Error A2050: real or BCD number not allowed - Assembler

Узнай цену своей работы

Формулировка задачи:

есть у меня функция вычисляющая длину между точками:
Len PROTO x1:DWORD, y1:DWORD, x2:DWORD, y2:DWORD
x1, y1, x2, y2 - дробные числа одинарной точности(тип float языка C) в коде проги я её вызываю так:
invoke Len, 3.2, 1.5, 4.3, 1.5;
но на эту строчку ругается компилятор, мол "error A2050: real or BCD number not allowed"... что я сделал не так?

Решение задачи: «Error A2050: real or BCD number not allowed»

textual
Листинг программы
Len PROTO DWORD, DWORD, DWORD, DWORD
.data
x1 dd  3.2
y1 dd 1.5
x2 dd 4.3 
y2 dd 1.5
...
.code
...
invoke Len x1, y1, x2, x3
...

Объяснение кода листинга программы

  1. В начале кода есть объявление переменных x1, y1, x2, y2 и возможно x3 и y3, которые имеют тип данных DWORD (целое число), а также строка Len, которая имеет тип данных PROTO (указатель на процедуру).
  2. Затем идет сегмент .data, в котором объявлены переменные x1, y1, x2, y2 и возможно x3 и y3. Значения переменных x1, y1, x2 и y2 могут быть любыми действительными числами.
  3. После этого идет сегмент .code, в котором происходит вызов функции Len с аргументами x1, y1, x2 и x3.
  4. Функция Len принимает четыре аргумента типа DWORD и возвращает значение типа DWORD.
  5. Ошибка A2050, которую вы упомянули, обычно возникает, когда функция ожидает аргументы определенного типа, но получает другие. В данном случае, возможно, функция Len ожидает аргументы типа DWORD, но получает аргументы, которые могут быть типа BCD (десятичное число в двоичной форме) или действительное число.
  6. Возможное решение проблемы - проверить типы данных аргументов перед вызовом функции Len и убедиться, что они соответствуют ожидаемым.

Оцени полезность:

15   голосов , оценка 4.067 из 5