Guest User

Untitled

a guest
Oct 16th, 2017
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.47 KB | None | 0 0
  1. int solution(int x, int y, int z)
  2. {
  3. x=4;
  4. y=5;
  5. z=2;
  6. int result;
  7. __asm
  8. {
  9. mov eax, -2
  10. imul [x]
  11. imul [y]
  12. mov ebx, eax
  13. mov eax, -3
  14. imul [z]
  15. sub eax, ebx
  16.  
  17.  
  18. mov [result], eax ;
  19. }
  20. assert(result == -2*x*y – 3*z);
  21. printf("solution_for_grade_6(%d, %d,**strong text** %d) = %dn", x, y, z, result);
  22. return result;
  23.  
  24. __asm
  25. {
  26. PUSH EDI
  27. PUSH ESI
  28.  
  29. MOV EAX,[x]
  30. MOV ECX,[y]
  31. MOV ESI,[z]
  32.  
  33. /* INPUT: EAX= X */
  34. /* ECX= Y */
  35. /* ESI= Z */
  36. /* TEMP: ECX, EDI, ESI */
  37. /* OUTPUT: EDX:EAX= -(2*xy+3*z) */
  38.  
  39. IMUL ECX
  40.  
  41. SHL EAX,1
  42. RCL EDX,1 /* EDX:EAX=2*xy */
  43.  
  44. MOV EDI,ESI
  45. SHL EDI,1
  46. SBB ECX,ECX /* ECX:EDI=2*z */
  47.  
  48. ADD EDI,ESI
  49. ADC ECX,ECX /* ECX:EDI=3*z */
  50.  
  51. ADD EAX,EDI
  52. ADC EDX,ECX /* EDX:EAX=2*xy+z*3 */
  53.  
  54. NOT EAX
  55. NOT EDX
  56.  
  57. ADD EAX,1
  58. ADC EDX,0 /* EDX:EAX=-(2*xy+z*3) */
  59.  
  60. POP ESI
  61. POP EDI
  62. }
  63.  
  64. ; INPUT: EAX= X
  65. ; ECX= Y
  66. ; ESI= Z
  67. ; TEMP: ECX, EDI, ESI, EBP
  68. ; OUTPUT: EBX:EDX:EAX= -(2*xy+3*z)
  69.  
  70. IMUL ECX
  71.  
  72. SHL EAX,1
  73. RCL EDX,1
  74. SBB EBX,EBX ;EBX:EDX:EAX=2*xy
  75.  
  76. MOV EDI,ESI
  77. SHL EDI,1
  78. SBB ECX,ECX ;ECX:EDI=z*2
  79.  
  80. MOV EBP,ECX
  81. ADD EDI,ESI
  82. ADC ECX,ECX
  83. ADC EBP,0 ;EBP:ECX:EDI=z*3
  84.  
  85. ADD EAX,EDI
  86. ADC EDX,ECX
  87. ADC EBX,EBP ;EBX:EDX:EAX=2*xy+z*3
  88.  
  89. NOT EAX
  90. NOT EDX
  91. NOT EBX
  92.  
  93. ADD EAX,1
  94. ADC EDX,0
  95. ADC EBX,0 ;EBX:EDX:EAX=-(2*xy+z*3)
Add Comment
Please, Sign In to add comment