fork download
  1. ;%include "io.mac"
  2. section .data
  3. hello db 'Hello World!'
  4.  
  5. section .text
  6. global _start
  7.  
  8. _start:
  9. ;GetLInt eax
  10. ;GetLInt ebx
  11. mov eax,10
  12. mov ebx,5
  13.  
  14. push eax
  15. push ebx
  16.  
  17. mov ebx,esp
  18. mov eax,esp
  19. add eax,4
  20.  
  21. push ebx
  22. push eax
  23.  
  24. call multi
  25.  
  26. pop ebx
  27. pop ebx
  28.  
  29. mov ebx,50
  30.  
  31. failed: cmp eax,ebx
  32. je failed
  33.  
  34. ;PutLInt eax
  35. push eax
  36. mov eax,4
  37. mov ebx,1
  38. mov ecx,ebp
  39. mov edx,1
  40.  
  41. end: mov eax,1
  42. mov ebx,0
  43. int 80h;
  44.  
  45. %define a1 dword [ebp+8]
  46. %define a2 dword [ebp+12]
  47.  
  48. soma:enter 0,0
  49. mov eax,a1
  50. mov eax,[eax]
  51. mov ebx,a2
  52. add eax,[ebx]
  53. mov ebx,a2
  54. mov eax,[ebx]
  55. cmp eax,0
  56. je end
  57.  
  58. leave
  59. ret
  60.  
  61. %define mres dword[ebp-12]
  62. %define mcount dword[ebp-8]
  63. %define mbase dword[ebp-4]
  64.  
  65. multi:enter 12,0
  66.  
  67.  
  68. mov eax,a2
  69. mov eax,[eax] ; Empilhando o contador utilizado nas multiplicações
  70. mov mcount,eax
  71. mov eax,a1
  72. mov eax,[eax]
  73. cmp eax,0
  74.  
  75. jge contmulprep
  76. neg eax
  77. mov ebx,mcount
  78. neg ebx
  79. mov mcount,ebx ; Se o contador é negativo, inverte o sinal da base e contador
  80.  
  81. contmulprep:mov mbase,eax ; Empilhando valor da base
  82. mov eax,0
  83. mov mres,eax ; Empilhando total
  84.  
  85. loopmul:mov ecx,mcount
  86. cmp ecx,0
  87. jle retmult
  88. sub ecx,1
  89.  
  90. mov mcount,ecx ; atualizando contador
  91. mov ebx,mbase
  92. mov eax,10
  93. cmp mres,eax
  94. je retmult
  95.  
  96. mov eax,ebp
  97. sub eax,4 ; base
  98. push eax
  99.  
  100. mov eax,ebp
  101. sub eax,12 ; resultado
  102. push eax ; Colocando o endereço do valor do resultado
  103.  
  104. call soma
  105.  
  106. pop ebx
  107. pop ebx ; Descartando os valores originais
  108.  
  109. mov mres,eax ; copiando para o resultado
  110.  
  111. mov eax,4
  112. mov ebx,1
  113. mov ecx,hello
  114. mov edx,12
  115. int 80h
  116.  
  117. jmp loopmul
  118.  
  119. retmult:
  120. mov eax,mres
  121. leave
  122. ret
Success #stdin #stdout 0s 5320KB
stdin
Standard input is empty
stdout
Hello World!