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,12
  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,60
  30.  
  31. cmp eax,ebx
  32. je end
  33.  
  34. ;PutLInt eax
  35. mov eax,4
  36. mov ebx,1
  37. mov ecx,hello
  38. mov edx,12
  39. int 80h
  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.  
  52. mov ebx,a2
  53. add eax,[ebx]
  54.  
  55. leave
  56. ret
  57.  
  58. %define mres dword[ebp-12]
  59. %define mcount dword[ebp-8]
  60. %define mbase dword[ebp-4]
  61.  
  62. multi:enter 12,0
  63.  
  64. mov eax,a2
  65. mov eax,[eax] ; Determinando o contador utilizado nas multiplicações
  66. mov mcount,eax
  67. mov eax,a1
  68. mov eax,[eax]
  69.  
  70. mov ebx,mcount
  71. cmp ebx,0
  72. jge contmulprep
  73. neg eax
  74. mov ebx,mcount
  75. neg ebx
  76. mov mcount,ebx ; Se o contador é negativo, inverte o sinal da base e contador
  77.  
  78. contmulprep:mov mbase,eax ; Empilhando valor da base
  79. mov eax,0
  80. mov mres,eax ; Empilhando total
  81.  
  82. loopmul:mov ecx,mcount
  83. cmp ecx,0
  84. jle retmult
  85. sub ecx,1
  86.  
  87. mov mcount,ecx ; atualizando contador
  88.  
  89. mov eax,ebp
  90. sub eax,4 ; base
  91. push eax
  92.  
  93. mov eax,ebp
  94. sub eax,12 ; resultado
  95. push eax ; Colocando o endereço do valor do resultado
  96.  
  97. call soma
  98.  
  99. pop ebx
  100. pop ebx ; Descartando os valores originais
  101.  
  102. mov mres,eax ; copiando para o resultado
  103.  
  104. mov eax,4
  105. mov ebx,1
  106. mov ecx,hello
  107. mov edx,12
  108. int 80h
  109.  
  110. jmp loopmul
  111.  
  112. retmult:
  113. mov eax,mres
  114. leave
  115. ret
Success #stdin #stdout 0s 5320KB
stdin
Standard input is empty
stdout
Hello World!Hello World!Hello World!Hello World!Hello World!Hello World!