Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- set result to zero
- for each character:
- if character not valid handle "invalid character error" somehow
- else
- if result is larger than "max/10" handle "overflow error" somehow
- result = result * 10
- digit = character - '0'
- if result is larger than "max - digit" handle "overflow error" somehow
- result = result + digit
- ;esi = address of source number
- ;edi = address of destination number
- ;cl = shift count
- mov edx,[esi+12]
- mov eax,[esi+8]
- shld edx,eax,cl
- mov [edi+12],edx
- mov edx,eax
- mov eax,[esi+4]
- shld edx,eax,cl
- mov [edi+8],edx
- mov edx,eax
- mov eax,[esi]
- shld edx,eax,cl
- mov [edi+4],edx
- shl eax,cl
- mov [edi],eax
- ;esi = address of first source number
- ;edi = address of second source number and destination
- mov eax,[esi]
- add [edi],eax
- mov eax,[esi+4]
- adc [edi+4],eax
- mov eax,[esi+8]
- adc [edi+8],eax
- mov eax,[esi+12]
- adc [edi+12],eax
- ;eax = first number
- ;edi = address of second number and destination
- add [edi],eax
- adc dword [edi+4],0
- adc dword [edi+8],0
- adc dword [edi+12],0
- ;eax = first number
- ;edi = address of second number and destination
- sub [edi],eax
- sbb dword [edi+4],0
- sbb dword [edi+8],0
- sbb dword [edi+12],0
- ;esi = address of first source number
- ;edi = address of second source number
- mov eax,[esi+12]
- cmp [edi+12],eax
- jb .smaller
- ja .larger
- mov eax,[esi+8]
- cmp [edi+8],eax
- jb .smaller
- ja .larger
- mov eax,[esi+4]
- cmp [edi+4],eax
- jb .smaller
- ja .larger
- mov eax,[esi]
- cmp [edi],eax
- jb .smaller
- ja .larger
- mov al,0 ;Values are equal
- ret
- .smaller:
- mov al,-1 ;First value is smaller than second
- ret
- .larger:
- mov al,1 ;First value is larger than second
- ret
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement