Ошибка A2001 в программе сборки

Код процедуры:

Values PROC ,

Text:PTR BYTE, listPtr:PTR BYTE

mov edx,Text

L1: call WriteString 

call ReadFloat

      fild 100

      fcomp comVal

      jg endLoop

      fild 100

      fcomp comVal

      jl endPRoc

    fstp REAL8 PTR [esi]

      add esi, TYPE REAL8


endProc:

Ценности ENDP

Я вызываю его с помощью invoke storeValues, ADDR prompt, ADDR List и получаю ошибку 2001 и не понимаю, как это исправить.


person Robenson Sam    schedule 02.05.2016    source источник
comment
Может быть еще одна проблема: запятая после PROC в вашей первой строке. PROC и аргументы разделяются не запятой, а пробелом.   -  person zx485    schedule 02.05.2016


Ответы (1)


Как определено в Руководство по программному обеспечению Intel стр. 830, FILD принимает операнд памяти, а не непосредственный:

DF /0 FILD m16int Valid Valid Push m16int onto the FPU register stack.
DB /0 FILD m32int Valid Valid Push m32int onto the FPU register stack.
DF /5 FILD m64int Valid Valid Push m64int onto the FPU register stack.

Вы хотите определить константы в сегменте данных и указать на него. Что-то типа:

.data 
hundred dd 100

; ....

.code
fild dword ptr [hundred]
person Florent DUGUET    schedule 02.05.2016
comment
У вас несоответствие размеров. dw соответствует word ptr, а dd соответствует dword ptr. - person Fifoernik; 02.05.2016
comment
@Fifoernik, спасибо, что заметили. только что отредактировал ответ соответственно. - person Florent DUGUET; 02.05.2016