Advertisement
yosikadoshi

EX1 1.3.17

Jul 8th, 2017
137
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. .MODEL SMALL
  2. .STACK 100h
  3. .DATA
  4. fibo0   DD ?
  5. fibo1   DD ?
  6. fibo2   DD ?
  7. i       DW ?
  8. index   DW ?
  9. res     DD ?
  10. .CODE
  11. .386
  12. ;extern unsigned long int find_largest_fibo(unsigned long int n, unsigned int *index)
  13. ;                                                       [BP+4]          [BP+8]
  14. PUBLIC _find_largest_fibo
  15. _find_largest_fibo PROC NEAR
  16.     PUSH BP
  17.     MOV BP,SP
  18.    
  19.     ;FIBO0=FIBO1=FIBO2=1
  20.     MOV EAX,1
  21.     MOV fibo0, EAX
  22.     MOV fibo1, EAX 
  23.     MOV fibo2, EAX 
  24.    
  25.     ;i=0
  26.     XOR AX,AX
  27.     MOV i,AX
  28.    
  29.     ;EBX=n=[bp+4]
  30.     MOV EBX, DWORD PTR [BP+4]
  31.    
  32.     ;for(i=0;n>=fibo2;i++)
  33.     JMP checkn
  34. myLoop:
  35.     ;fibo2=fibo1+fibo0
  36.     MOV EAX, fibo0
  37.     ADD EAX, fibo1
  38.     MOV fibo2, EAX
  39.     ;fibo0=fibo1
  40.     MOV EAX, fibo1
  41.     MOV fibo0, EAX
  42.     ;fibo1=fibo2
  43.     MOV EAX, fibo2
  44.     MOV fibo1, EAX 
  45.     INC i
  46. checkn:
  47.     CMP EBX, fibo2
  48.     JAE myLoop
  49.    
  50.     MOV DI, WORD PTR[BP+8]
  51.     MOV AX, i
  52.     MOV [DI], AX
  53.    
  54.     PUSH fibo0
  55.     POP AX
  56.     POP DX
  57.    
  58.     POP BP
  59.     RET
  60.     _find_largest_fibo ENDP
  61.    
  62. ;extern unsigned long int compute_fibo_code(unsigned long int n);
  63. ;                                                   [BP+4]
  64. PUBLIC _compute_fibo_code
  65. _compute_fibo_code PROC NEAR   
  66.     PUSH BP
  67.     MOV BP, SP
  68.  
  69.     MOV EBX, DWORD PTR [BP+4]
  70.    
  71.     JMP check
  72. whileLoop:
  73.    
  74.     PUSH OFFSET index
  75.     PUSH EBX
  76.     CALL _find_largest_fibo
  77.     ADD SP, 6
  78.     PUSH DX
  79.     PUSH AX
  80.     POP EAX
  81.    
  82.     ;n-=eax
  83.     SUB EBX, EAX
  84.    
  85.     ;adding bit indexed "i" to result
  86.     XOR EAX,EAX
  87.     INC EAX
  88.     MOV CX, index
  89.     SHL EAX, CL
  90.     ADD res, EAX
  91.    
  92. check:
  93.     CMP EBX,0
  94.     JA whileLoop
  95.    
  96.     PUSH res
  97.     POP AX
  98.     POP DX
  99.    
  100.     POP BP
  101.     RET
  102.     _compute_fibo_code ENDP
  103.     END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement