Advertisement
Guest User

Untitled

a guest
Jul 21st, 2019
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.88 KB | None | 0 0
  1. set result to zero
  2. for each character:
  3. if character not valid handle "invalid character error" somehow
  4. else
  5. if result is larger than "max/10" handle "overflow error" somehow
  6. result = result * 10
  7. digit = character - '0'
  8. if result is larger than "max - digit" handle "overflow error" somehow
  9. result = result + digit
  10.  
  11. ;esi = address of source number
  12. ;edi = address of destination number
  13. ;cl = shift count
  14.  
  15. mov edx,[esi+12]
  16. mov eax,[esi+8]
  17. shld edx,eax,cl
  18. mov [edi+12],edx
  19. mov edx,eax
  20. mov eax,[esi+4]
  21. shld edx,eax,cl
  22. mov [edi+8],edx
  23. mov edx,eax
  24. mov eax,[esi]
  25. shld edx,eax,cl
  26. mov [edi+4],edx
  27. shl eax,cl
  28. mov [edi],eax
  29.  
  30. ;esi = address of first source number
  31. ;edi = address of second source number and destination
  32.  
  33. mov eax,[esi]
  34. add [edi],eax
  35. mov eax,[esi+4]
  36. adc [edi+4],eax
  37. mov eax,[esi+8]
  38. adc [edi+8],eax
  39. mov eax,[esi+12]
  40. adc [edi+12],eax
  41.  
  42. ;eax = first number
  43. ;edi = address of second number and destination
  44.  
  45. add [edi],eax
  46. adc dword [edi+4],0
  47. adc dword [edi+8],0
  48. adc dword [edi+12],0
  49.  
  50. ;eax = first number
  51. ;edi = address of second number and destination
  52.  
  53. sub [edi],eax
  54. sbb dword [edi+4],0
  55. sbb dword [edi+8],0
  56. sbb dword [edi+12],0
  57.  
  58. ;esi = address of first source number
  59. ;edi = address of second source number
  60.  
  61. mov eax,[esi+12]
  62. cmp [edi+12],eax
  63. jb .smaller
  64. ja .larger
  65. mov eax,[esi+8]
  66. cmp [edi+8],eax
  67. jb .smaller
  68. ja .larger
  69. mov eax,[esi+4]
  70. cmp [edi+4],eax
  71. jb .smaller
  72. ja .larger
  73. mov eax,[esi]
  74. cmp [edi],eax
  75. jb .smaller
  76. ja .larger
  77. mov al,0 ;Values are equal
  78. ret
  79.  
  80. .smaller:
  81. mov al,-1 ;First value is smaller than second
  82. ret
  83.  
  84. .larger:
  85. mov al,1 ;First value is larger than second
  86. ret
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement