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,5
  12. mov ebx,10
  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.  
  30.  
  31. ;PutLInt eax
  32. push eax
  33. mov eax,4
  34. mov ebx,1
  35. mov ecx,ebp
  36. mov edx,1
  37.  
  38. end: mov eax,1
  39. mov ebx,0
  40. int 80h;
  41.  
  42. %define a1 dword [ebp+8]
  43. %define a2 dword [ebp+12]
  44.  
  45. soma:enter 0,0
  46. mov eax,a1
  47. add eax,a2
  48. leave
  49. ret
  50.  
  51. %define mres dword[ebp-12]
  52. %define mcount dword[ebp-8]
  53. %define mbase dword[ebp-4]
  54.  
  55. multi:enter 12,0
  56.  
  57.  
  58. mov eax,a2
  59. mov mcount,eax ; Empilhando o contador utilizado nas multiplicações
  60. mov eax,a1
  61. mov mbase,eax ; Empilhando endereço da base
  62. mov eax,0
  63. mov mres,eax ; Empilhando total
  64.  
  65. loopmul:mov ecx,mcount
  66. mov ecx,[ecx]
  67. cmp ecx,0
  68. jle retmult
  69.  
  70. sub ecx,1
  71.  
  72. mov eax,mcount
  73. mov [eax],ecx ; atualizando contador
  74. push mbase
  75. push mbase
  76.  
  77. ;call soma
  78.  
  79. pop ebx
  80. pop ebx ; Descartando os valores originais
  81. add eax,mres ; Somando ao resultado
  82. mov mres,eax
  83.  
  84. mov eax,4
  85. mov ebx,1
  86. mov ecx,hello
  87. mov edx,12
  88. int 80h
  89.  
  90. jmp loopmul
  91.  
  92. retmult:
  93. mov eax,mres
  94. leave
  95. ret
Success #stdin #stdout 0s 5288KB
stdin
Standard input is empty
stdout
Hello World!Hello World!Hello World!Hello World!Hello World!Hello World!Hello World!Hello World!Hello World!Hello World!