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