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. leave
  54. ret
  55.  
  56. %define mres dword[ebp-12]
  57. %define mcount dword[ebp-8]
  58. %define mbase dword[ebp-4]
  59.  
  60. multi:enter 12,0
  61.  
  62.  
  63. mov eax,a2
  64. mov eax,[eax] ; Empilhando o contador utilizado nas multiplicações
  65. mov mcount,eax
  66. mov eax,a1
  67. mov mbase,eax ; Empilhando endereço da base
  68. mov eax,0
  69. mov mres,eax ; Empilhando total
  70.  
  71. loopmul:mov ecx,mcount
  72. cmp ecx,0
  73. jle retmult
  74.  
  75. sub ecx,1
  76.  
  77. mov mcount,ecx ; atualizando contador
  78. push mbase
  79. push mbase
  80.  
  81. call soma
  82.  
  83. pop ebx
  84. pop ebx ; Descartando os valores originais
  85.  
  86. add mres,eax ; Somando ao resultado
  87. mov eax,10
  88. cmp mres,eax
  89. je retmult
  90.  
  91. mov eax,4
  92. mov ebx,1
  93. mov ecx,hello
  94. mov edx,12
  95. int 80h
  96.  
  97. jmp loopmul
  98.  
  99. retmult:
  100. mov eax,mres
  101. leave
  102. ret
Success #stdin #stdout 0.01s 5284KB
stdin
Standard input is empty
stdout
Hello World!Hello World!Hello World!Hello World!Hello World!