Advertisement
Guest User

Tuenti contest (Assembler)

a guest
Jun 11th, 2011
1,928
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ; hard_sum tuenti contest (Assembler)
  2. ; by DjThD
  3.  
  4.     include \masm32\include\masm32rt.inc
  5.     include \masm32\include\kernel32.inc
  6.     include \masm32\include\msvcrt.inc
  7.     includelib \masm32\lib\kernel32.lib
  8.     includelib  \masm32\lib\msvcrt.lib
  9.  
  10. __p__iob proto c
  11.  
  12.     .data?
  13.     .data
  14.       buffer db 128 dup(0)
  15.       bufferlength equ $-buffer
  16.      
  17.       formatonumero db '%i',10,0
  18.  
  19.     .code
  20.  
  21. start:
  22.     call main
  23.     exit
  24.  
  25. main proc
  26.     call __p__iob
  27.     push eax
  28.     push bufferlength
  29.     push 1
  30.     push offset buffer
  31.     call crt_fread
  32.     add esp,010h
  33.  
  34.     mov esi, offset buffer
  35.     dec esi
  36.     xor ecx, ecx
  37.     mov ecx, 10
  38.     xor edi, edi
  39.     xor ebx, ebx
  40.     mov bl, '0'
  41.     xor eax, eax
  42.  
  43.     push ebp
  44.     xor ebp, ebp
  45.    
  46. _main_check:
  47.     sub bl, '0'
  48.     mul ecx
  49.     add eax, ebx
  50. _main_avanzar:
  51.     inc esi
  52.     mov bl, byte ptr [esi]
  53.     cmp bl, ' '
  54.     je _main_continuar
  55.     cmp bl, '+'
  56.     je _main_continuar
  57.     cmp bl, '-'
  58.     je _main_negativo
  59.     cmp bl, 10
  60.     je _main_nuevalinea
  61.     test bl, bl
  62.     jz _main_finalizar
  63.     cmp bl, 4
  64.     jne _main_check
  65.     cmp bl, '9'
  66.     jg _main_avanzar
  67.     cmp bl, '0'
  68.     jl _main_avanzar
  69.     jmp _main_finalizar
  70. _main_negativo:
  71.     or ebp, 00000001h
  72.     jmp _main_avanzar
  73. _main_nuevalinea:
  74.     or ebp, 00000100h
  75.     jmp _main_continuar
  76. _main_finalizar:
  77.     or ebp, 00000110h
  78. _main_continuar:
  79.     test ebp, 00000001h
  80.     jz _main_noesNegativo
  81.     mov ecx, eax
  82.     xor eax, eax
  83.     sub eax, ecx
  84. _main_noesNegativo:
  85.     add edi, eax
  86.     test ebp, 00000100h
  87.     jz _main_noImprimir
  88.     push edi
  89.     push offset formatonumero
  90.     call crt_printf
  91.     add esp, 8
  92.     xor edi, edi
  93. _main_noImprimir:
  94.     and ebp, 000000F0h
  95.     xor eax, eax
  96.     mov bl, '0'
  97.     mov ecx, 10
  98.     test ebp, 00000010h
  99.     jz _main_check
  100.  
  101.     pop ebp
  102.     ret
  103. main endp
  104. end start
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement