Unit unit_1; ReadOnly neptun:string;@external; neptun:string:="csjfv1"; procedure Fgv11(VAL i:int32; VAL j:int16); @use EAX;@returns("EAX");@external; procedure Fgv12(VAL a:int32; VAL b:uns16; VAR tomb:int32; VAL N:uns32); @use EAX ;@returns("EAX");@external; procedure Fgv11(VAL i:int32; VAL j:int16); @nodisplay; VAR r:int32; begin Fgv11; // HASZNN�LHATT� REGISZTEREK: EAX, EBX, ECX, EDX, ESI, EDI, // NEM HASZNN�LHATT� �LTALL�NOS REGISZTEREK: EBP, ESP // s : r= (j*j*2) * (i -j - 3) - 7*j; // c : return j*j*i - (i+15*r) * (108 - j); push(EBX); push(ECX); push(EDX); push(ESI); MOVSX(j,EBX); // Tipus konverzii� segg�tss�gg�vel bett�ltt�ttt�k a j MOV(i,ECX); // ECX=i MOV(EBX,EDX); INTMUL(EDX,EDX); // EDX=j*j MOV(ECX,EAX); SUB(EBX,EAX); SUB(3,EAX); // EAX=i-j-3 //INTMUL(2,EDX,ESI); //MOV(EDX,ESI);ADD(ESI,ESI); // ESI=2*j*j LEA([EDX*2],ESI); INTMUL(ESI,EAX); // EAX=(j*j*2)*(i-j-3) //MOV(EBX,ESI);ADD(ESI,ESI);ADD(ESI,ESI);ADD(ESI,ESI);SUB(EBX,ESI); LEA([EBX*8],ESI);SUB(EBX,ESI); SUB(ESI,EAX); // EAX=r INTMUL(ECX,EDX); // EDX=j*j*i INTMUL(15,EAX); ADD(EAX,ECX); // ECX=i+15*r MOV(108,EAX);SUB(EBX,EAX); // EAX=108-j INTMUL(ECX,EAX); SUB(EDX,EAX); // EAX= - EREDMM�NY NEG(EAX); // KK�szen vagyunk pop(ESI); pop(EDX); pop(ECX); pop(EBX); end Fgv11; procedure Fgv12(VAL a:int32; VAL b:uns16; VAR tomb:int32; VAL N:uns32); @nodisplay; begin Fgv12; // j r0=N*b<=a%12345?b-5*a:a+b/N r1=(N+a*3-b)%(N+|max(a,b)|) // f ri=(ri1-ri2)*(a/(|a+b|+3)) R=Summa{ri-ri%N;i=0..N-1} push(ebx);push(edi);push(edx);push(ecx); mov(tomb,edi); movzx(b,EBX); intmul(N,EBX); // EBX=N*b mov(a,EAX); CDQ; // EDX:EAX=a mov(12345,ecx); idiv(ecx); // EDX=a%12345 //if(ebx<=edx) then //if(ebx<=(type int32 edx)) then cmp(ebx,edx); jg kihagy; movzx(b,eax); intmul(5,a,ebx); sub(ebx,eax); // EAX=b-5*a //else jmp tovabb; kihagy: movzx(b,eax); cdq; idiv(N); add(a,eax); // EAX=a+b/N //endif; tovabb: mov(eax,[EDI]); //* // j r0=N*b<=a%12345?b-5*a:a+b/N r1=(N+a*3-b)%(N+|max(a,b)|) mov(a,eax); mov(N,ebx); lea([eax+eax*2],eax); add(ebx,eax); movzx(b,ecx); sub(ecx,eax); // eax=(N+a*3-b) mov(a,edx);if((type int32 edx) > ecx) then mov(edx,ecx); endif; // ECX=max(a,b) if((type int32 ecx) < 0 ) then neg(ecx); endif; //ECX=|max(a,b) add(ebx,ecx); //ECX=N+|max(a, cdq; idiv(ecx); add(4,edi); mov(edx,[edi]); // f ri=(ri1-ri2)*(a/(|a+b|+3)) R=Summa{ri-ri%N;i=0..N-1} push(esi); //* mov(edx,ebx); mov(a,eax);movzx(b,esi);add(eax,esi);if(@s)then neg(esi); endif; add(3, cdq; idiv(esi); mov(eax,esi); //mov([edi-4],eax); //sub(4,edi); //for(mov(2,ecx);ecx0) then mov(ebx,eax); cdq; idiv(N); sub(edx,ebx); endif; add(ebx,esi); endfor; mov(esi,eax); //*/ pop(esi); pop(ecx);pop(edx);pop(edi); pop(ebx); end Fgv12; end unit_1;