Объявил массив : .data? X dq 5000 dup (?) Y dq 5000 dup (?) Далее в процедуре которая вызывается нажатием кнопки из отдельного диалога заполняю эти массивы (процедура вычисления и процедура диалога находятся в отдельном ML.inc файле .code include ML.inc start: .............) Затем в обработчике WM_PAINT рисую кривую по данным точкам точнее пытаюсь : Код (Text): ML_Func proc mov ecx, Count fld b fld a fsub fild Count fdiv fst h fldz fst X[0] fld st fsin fstp Y[0] push edi xor edi, edi inc edi @loop: fadd st, st(1) fst X[edi] fld st fsin ; пока здесь просто синус fstp Y[edi] inc edi loop @loop inc Calc pop edi ret ML_Func endp здесь все в порядке под дебуггером смотрел Count=0 пока Код (Text): Paint_Canvas proc LOCAL hGraphics:DWORD LOCAL hBrush:DWORD LOCAL hPen:DWORD LOCAL x1 : DWORD LOCAL y1 : DWORD LOCAL x2 : DWORD LOCAL y2 : DWORD jmp @a SX dd 200 SY dd 200 @a: invoke GdipCreateFromHDC,hDc,ADDR hGraphics invoke GdipCreateSolidFill, ColorsNavy, addr hBrush invoke GdipFillRectangleI, hGraphics, hBrush, r.left, r.top, r.right, r.bottom invoke GdipCreatePen1, ColorsYellow, wi1,UnitWorld,ADDR hPen invoke MessageBox,hWnd,addr AboutMsg,addr AppName,MB_OK .if Calc != 0 xor eax, eax mov x1, eax mov y1, eax mov ecx, 100 dec ecx push edi xor edi, edi finit @loop: fld X[edi] fmul SX frndint fstp x2 fld Y[edi] fmul SY frndint fstp y2 inc edi push ecx invoke GdipDrawLineI,hGraphics,hPen,x1,y1,x2, y2 pop ecx push x2 pop x1 push y2 pop y1 loop @loop pop edi .endif ;invoke MessageBox,hWnd,addr AboutMsg,addr AppName,MB_OK invoke GdipDeleteBrush,hBrush invoke GdipDeletePen,hPen invoke GdipDeleteGraphics,hGraphics ret Paint_Canvas endp А здесь в .if ... .endif не работает т.е. из x,y какая-то хрень вылезает совсем не график функции синус что не так?
не понятно, в каком месте вызывается ML_func, которая делает inc Calc, которую использует .if ... .endif
murtix > IMHO не всё: Размер элемента qword, так что нужно или так: fst X[edi*8] или add edi, 8 вместо inc edi
Спасибо S_T_A_S_ типичная ошибка новичка. Вообще я думал, что если я объвил как dq, то компилятор все сам сделает (привык понимаешь-ли в дельфях . >shoo Понимаешь ML_func вызывается из другого диалога и делает inc Calc ... .data Calc dd 0 ... мол значения вычислены, а Paint_Canvas проверяет вычислено или нет