Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- int solution(int x, int y, int z)
- {
- x=4;
- y=5;
- z=2;
- int result;
- __asm
- {
- mov eax, -2
- imul [x]
- imul [y]
- mov ebx, eax
- mov eax, -3
- imul [z]
- sub eax, ebx
- mov [result], eax ;
- }
- assert(result == -2*x*y – 3*z);
- printf("solution_for_grade_6(%d, %d,**strong text** %d) = %dn", x, y, z, result);
- return result;
- __asm
- {
- PUSH EDI
- PUSH ESI
- MOV EAX,[x]
- MOV ECX,[y]
- MOV ESI,[z]
- /* INPUT: EAX= X */
- /* ECX= Y */
- /* ESI= Z */
- /* TEMP: ECX, EDI, ESI */
- /* OUTPUT: EDX:EAX= -(2*xy+3*z) */
- IMUL ECX
- SHL EAX,1
- RCL EDX,1 /* EDX:EAX=2*xy */
- MOV EDI,ESI
- SHL EDI,1
- SBB ECX,ECX /* ECX:EDI=2*z */
- ADD EDI,ESI
- ADC ECX,ECX /* ECX:EDI=3*z */
- ADD EAX,EDI
- ADC EDX,ECX /* EDX:EAX=2*xy+z*3 */
- NOT EAX
- NOT EDX
- ADD EAX,1
- ADC EDX,0 /* EDX:EAX=-(2*xy+z*3) */
- POP ESI
- POP EDI
- }
- ; INPUT: EAX= X
- ; ECX= Y
- ; ESI= Z
- ; TEMP: ECX, EDI, ESI, EBP
- ; OUTPUT: EBX:EDX:EAX= -(2*xy+3*z)
- IMUL ECX
- SHL EAX,1
- RCL EDX,1
- SBB EBX,EBX ;EBX:EDX:EAX=2*xy
- MOV EDI,ESI
- SHL EDI,1
- SBB ECX,ECX ;ECX:EDI=z*2
- MOV EBP,ECX
- ADD EDI,ESI
- ADC ECX,ECX
- ADC EBP,0 ;EBP:ECX:EDI=z*3
- ADD EAX,EDI
- ADC EDX,ECX
- ADC EBX,EBP ;EBX:EDX:EAX=2*xy+z*3
- NOT EAX
- NOT EDX
- NOT EBX
- ADD EAX,1
- ADC EDX,0
- ADC EBX,0 ;EBX:EDX:EAX=-(2*xy+z*3)
Add Comment
Please, Sign In to add comment