Guest User

Untitled

a guest
Jul 22nd, 2018
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. .386
  2. _TEXT SEGMENT PAGE PUBLIC 'CODE' FLAT
  3.  
  4. ;(X+10) - (Y<<2) * ((X - Y) / (X + 2*Y))
  5. ;  A1       A2        EAX       A4
  6.  
  7. ;------------------------------------------
  8. FuncAsm PROC STDCALL X:SDWORD, Y:SDWORD
  9. ;------------------------------------------
  10. LOCAL A1,A2,A4:SDWORD
  11.  
  12.     PUSH ESI
  13.     PUSH EDI
  14.    
  15.     MOV ESI,[X]
  16.     MOV EDI,[Y]
  17.  
  18.     MOV EAX,ESI
  19.     ADD EAX,10
  20.     MOV A1,EAX
  21.    
  22.     MOV EAX,EDI
  23.     SAL EAX,2
  24.     MOV A2,EAX
  25.    
  26.     LEA EAX,[ESI+2*EDI]
  27.     MOV A4,EAX
  28.    
  29.     MOV EAX,ESI
  30.     SUB EAX,EDI
  31.    
  32.     CDQ
  33.     IDIV A4
  34.    
  35.     IMUL EAX,A2
  36.    
  37.     NEG EAX
  38.     ADD EAX,A1
  39.  
  40.     POP EDI
  41.     POP ESI
  42.  
  43.     RET
  44. FuncAsm ENDP
  45. ;------------------------------------------
  46.  
  47. ;------------------------------------------
  48. FuncArrayAsm PROC STDCALL X: PTR SDWORD, Y: PTR SDWORD, Dst: PTR SDWORD, Arrlen :DWORD
  49. ;------------------------------------------
  50. LOCAL Xi,Yi,Ri:SDWORD, A1,A2,A4:SDWORD
  51.  
  52.     MOV ECX, Arrlen
  53.  
  54.     PUSH ESI
  55.     PUSH EDI
  56.     PUSH EBX
  57.    
  58.     MOV ESI,[X]
  59.     MOV EDI,[Y]
  60.     MOV EBX,[Dst]
  61.    
  62.     SUB EDI,ESI
  63.     SUB EBX,ESI
  64.    
  65.     .REPEAT
  66.    
  67.         MOV EAX,[ESI] ; Первый массив
  68.         MOV Xi,EAX
  69.         MOV EAX,[ESI+EDI] ; Второй массив
  70.         MOV Yi,EAX
  71.        
  72.         ;---------------------------------------
  73.        
  74.             PUSH EBX
  75.             PUSH ESI
  76.             PUSH EDI
  77.            
  78.             MOV ESI,Xi
  79.             MOV EDI,Yi
  80.  
  81.             MOV EAX,ESI
  82.             ADD EAX,10
  83.             MOV A1,EAX
  84.            
  85.             MOV EAX,EDI
  86.             SAL EAX,2
  87.             MOV A2,EAX
  88.            
  89.             LEA EAX,[ESI+2*EDI]
  90.             MOV A4,EAX
  91.            
  92.             MOV EAX,ESI
  93.             SUB EAX,EDI
  94.            
  95.             CDQ
  96.             IDIV A4
  97.            
  98.             IMUL EAX,A2
  99.            
  100.             NEG EAX
  101.             ADD EAX,A1
  102.  
  103.             POP EDI
  104.             POP ESI
  105.             POP EBX
  106.        
  107.         ;---------------------------------------
  108.        
  109.         MOV [ESI+EBX],EAX ; Третий массив
  110.        
  111.         LEA ESI,[ESI+4]
  112.         DEC ECX
  113.    
  114.     .UNTIL ZERO?
  115.    
  116.     POP EBX
  117.     POP EDI
  118.     POP ESI
  119.  
  120.     RET
  121. FuncArrayAsm ENDP
  122. ;------------------------------------------
  123.  
  124.  
  125.  
  126.  
  127.  
  128.  
  129.  
  130.  
  131.  
  132.  
  133.  
  134.  
  135.  
  136. ;------------------------------------------
  137. FuncArrayAsm_4 PROC STDCALL X: PTR SDWORD, Y: PTR SDWORD, Dst: PTR SDWORD, Arrlen :DWORD
  138. ;------------------------------------------
  139. LOCAL Xi,Yi,Ri:SDWORD, A1,A2,A4:SDWORD
  140.  
  141.     MOV ECX, Arrlen
  142.  
  143.     PUSH ESI
  144.     PUSH EDI
  145.     PUSH EBX
  146.    
  147.     MOV ESI,[X]
  148.     MOV EDI,[Y]
  149.     MOV EBX,[Dst]
  150.    
  151.     SUB EDI,ESI
  152.     SUB EBX,ESI
  153.    
  154.     .REPEAT
  155.    
  156.         CMP ECX,4
  157.         JB Low_4_elements
  158.    
  159.     REPT 4
  160.    
  161.         MOV EAX,[ESI] ; Первый массив
  162.         MOV Xi,EAX
  163.         MOV EAX,[ESI+EDI] ; Второй массив
  164.         MOV Yi,EAX
  165.        
  166.         ;---------------------------------------
  167.        
  168.             PUSH EBX
  169.             PUSH ESI
  170.             PUSH EDI
  171.            
  172.             MOV ESI,Xi
  173.             MOV EDI,Yi
  174.  
  175.             MOV EAX,ESI
  176.             ADD EAX,10
  177.             MOV A1,EAX
  178.            
  179.             MOV EAX,EDI
  180.             SAL EAX,2
  181.             MOV A2,EAX
  182.            
  183.             LEA EAX,[ESI+2*EDI]
  184.             MOV A4,EAX
  185.            
  186.             MOV EAX,ESI
  187.             SUB EAX,EDI
  188.            
  189.             CDQ
  190.             IDIV A4
  191.            
  192.             IMUL EAX,A2
  193.            
  194.             NEG EAX
  195.             ADD EAX,A1
  196.  
  197.             POP EDI
  198.             POP ESI
  199.             POP EBX
  200.        
  201.         ;---------------------------------------
  202.        
  203.         MOV [ESI+EBX],EAX ; Третий массив
  204.        
  205.         LEA ESI,[ESI+4]
  206.         DEC ECX
  207.    
  208.     ENDM
  209.    
  210.     .UNTIL ZERO?
  211.    
  212.     jmp quit
  213.     Low_4_elements:
  214.    
  215.     .REPEAT
  216.    
  217.         MOV EAX,[ESI] ; Первый массив
  218.         MOV Xi,EAX
  219.         MOV EAX,[ESI+EDI] ; Второй массив
  220.         MOV Yi,EAX
  221.        
  222.         ;---------------------------------------
  223.        
  224.             PUSH EBX
  225.             PUSH ESI
  226.             PUSH EDI
  227.            
  228.             MOV ESI,Xi
  229.             MOV EDI,Yi
  230.  
  231.             MOV EAX,ESI
  232.             ADD EAX,10
  233.             MOV A1,EAX
  234.            
  235.             MOV EAX,EDI
  236.             SAL EAX,2
  237.             MOV A2,EAX
  238.            
  239.             LEA EAX,[ESI+2*EDI]
  240.             MOV A4,EAX
  241.            
  242.             MOV EAX,ESI
  243.             SUB EAX,EDI
  244.            
  245.             CDQ
  246.             IDIV A4
  247.            
  248.             IMUL EAX,A2
  249.            
  250.             NEG EAX
  251.             ADD EAX,A1
  252.  
  253.             POP EDI
  254.             POP ESI
  255.             POP EBX
  256.        
  257.         ;---------------------------------------
  258.        
  259.         MOV [ESI+EBX],EAX ; Третий массив
  260.        
  261.         LEA ESI,[ESI+4]
  262.         DEC ECX
  263.    
  264.     .UNTIL ZERO?
  265.    
  266.     quit:
  267.     POP EBX
  268.     POP EDI
  269.     POP ESI
  270.  
  271.     RET
  272. FuncArrayAsm_4 ENDP
  273. ;------------------------------------------
  274.  
  275.  
  276.  
  277.  
  278.  
  279.  
  280.  
  281.  
  282. ;------------------------------------------
  283. FuncCycleCallArrayAsm PROC STDCALL X:PTR SDWORD, Y:PTR SDWORD, Dst:PTR SDWORD, Arrlen:SDWORD
  284. ;------------------------------------------
  285.     MOV ECX,Arrlen
  286.     JECXZ NotElement
  287.    
  288.     PUSH ESI
  289.     PUSH EDI
  290.     PUSH EBX
  291.    
  292.     MOV ESI,[X]
  293.     MOV EDI,[Y]
  294.     MOV EBX,[Dst]
  295.    
  296.     SUB EDI,ESI
  297.     SUB EBX,ESI
  298.    
  299.     .REPEAT
  300.    
  301.         MOV EAX,[ESI]        ; Первый массив
  302.         MOV EDX,[ESI+EDI]    ; Второй массив
  303.         invoke FuncAsm,EAX,EDX
  304.         MOV [ESI+EBX],EAX    ; Третий массив
  305.  
  306.         LEA ESI,[ESI+4]
  307.         DEC ECX
  308.        
  309.     .UNTIL ZERO?
  310.    
  311.     POP EBX
  312.     POP EDI
  313.     POP ESI
  314.    
  315.     NotElement:
  316.     RET
  317. FuncCycleCallArrayAsm ENDP
  318. ;------------------------------------------
  319.  
  320. _TEXT ENDS
  321. END
Add Comment
Please, Sign In to add comment