;%include "io.mac"
section .data
hello db 'Hello World!'
section .text
global _start
_start:
;GetLInt eax
;GetLInt ebx
mov eax,10
mov ebx,5
push eax
push ebx
mov ebx,esp
mov eax,esp
add eax,4
push ebx
push eax
call multi
pop ebx
pop ebx
mov ebx,50
failed: cmp eax,ebx
je failed
;PutLInt eax
push eax
mov eax,4
mov ebx,1
mov ecx,ebp
mov edx,1
end: mov eax,1
mov ebx,0
int 80h;
%define a1 dword [ebp+8]
%define a2 dword [ebp+12]
soma:enter 0,0
mov eax,a1
mov eax,[eax]
mov ebx,10
cmp eax,ebx
je end
mov ebx,a2
add eax,[ebx]
leave
ret
%define mres dword[ebp-12]
%define mcount dword[ebp-8]
%define mbase dword[ebp-4]
multi:enter 12,0
mov eax,a2
mov eax,[eax] ; Empilhando o contador utilizado nas multiplicações
mov mcount,eax
mov eax,a1
mov eax,[eax]
cmp eax,0
jge contmulprep
neg eax
mov ebx,mcount
neg ebx
mov mcount,ebx ; Se o contador é negativo, inverte o sinal da base e contador
contmulprep:mov mbase,eax ; Empilhando valor da base
mov eax,0
mov mres,eax ; Empilhando total
loopmul:mov ecx,mcount
cmp ecx,0
jle retmult
sub ecx,1
mov mcount,ecx ; atualizando contador
mov ebx,mbase
mov eax,10
cmp mres,eax
je retmult
mov eax,ebp
sub eax,4
push eax
push eax ; Colocando o endereço do valor da base
call soma
pop ebx
pop ebx ; Descartando os valores originais
add mres,eax ; Somando ao resultado
mov eax,4
mov ebx,1
mov ecx,hello
mov edx,12
int 80h
jmp loopmul
retmult:
mov eax,mres
leave
ret
OyVpbmNsdWRlICJpby5tYWMiCnNlY3Rpb24gLmRhdGEKaGVsbG8gZGIgJ0hlbGxvIFdvcmxkIScKCnNlY3Rpb24gLnRleHQKCWdsb2JhbCBfc3RhcnQKCl9zdGFydDoKCTtHZXRMSW50IGVheAoJO0dldExJbnQgZWJ4Cgltb3YgZWF4LDEwCgltb3YgZWJ4LDUKCglwdXNoIGVheAoJcHVzaCBlYngKCQoJbW92IGVieCxlc3AgCgltb3YgZWF4LGVzcCAKCWFkZCBlYXgsNAoJCglwdXNoIGVieAoJcHVzaCBlYXgKCQoJY2FsbCBtdWx0aQoJCglwb3AgZWJ4Cglwb3AgZWJ4CgkKCW1vdiBlYngsNTAKCQpmYWlsZWQ6IGNtcCBlYXgsZWJ4CglqZSBmYWlsZWQKCQoJO1B1dExJbnQgZWF4CglwdXNoIGVheCAgICAgICAgIAoJbW92IGVheCw0Cgltb3YgZWJ4LDEgCgltb3YgZWN4LGVicCAKCW1vdiBlZHgsMQoJCmVuZDogbW92IGVheCwxICAgICAgICAgICAgCgltb3YgZWJ4LDAgICAgICAgICAgICAKCWludCA4MGg7CgkKCSVkZWZpbmUgYTEgZHdvcmQgW2VicCs4XQoJJWRlZmluZSBhMiBkd29yZCBbZWJwKzEyXQoJCglzb21hOmVudGVyIDAsMAoJbW92IGVheCxhMQoJbW92IGVheCxbZWF4XQoJbW92IGVieCwxMAoJY21wIGVheCxlYngKCWplIGVuZAoJbW92IGVieCxhMgoJYWRkIGVheCxbZWJ4XQoJCglsZWF2ZQoJcmV0CgogICVkZWZpbmUgbXJlcyBkd29yZFtlYnAtMTJdCiAgJWRlZmluZSBtY291bnQgZHdvcmRbZWJwLThdCiAgJWRlZmluZSBtYmFzZSBkd29yZFtlYnAtNF0KICAgIAoJbXVsdGk6ZW50ZXIgMTIsMAoJCgkKCW1vdiBlYXgsYTIKCW1vdiBlYXgsW2VheF0gOyBFbXBpbGhhbmRvIG8gY29udGFkb3IgdXRpbGl6YWRvIG5hcyBtdWx0aXBsaWNhw6fDtWVzCgltb3YgbWNvdW50LGVheAoJbW92IGVheCxhMQoJbW92IGVheCxbZWF4XQoJY21wIGVheCwwCgkKCWpnZSBjb250bXVscHJlcAoJbmVnIGVheAoJbW92IGVieCxtY291bnQKCW5lZyBlYngKCW1vdiBtY291bnQsZWJ4IDsgU2UgbyBjb250YWRvciDDqSBuZWdhdGl2bywgaW52ZXJ0ZSBvIHNpbmFsIGRhIGJhc2UgZSBjb250YWRvcgoJCmNvbnRtdWxwcmVwOm1vdiBtYmFzZSxlYXggOyBFbXBpbGhhbmRvIHZhbG9yIGRhIGJhc2UgCgltb3YgZWF4LDAKCW1vdiBtcmVzLGVheCAgOyBFbXBpbGhhbmRvICB0b3RhbAoKbG9vcG11bDptb3YgZWN4LG1jb3VudAogICAgY21wIGVjeCwwIAoJamxlIHJldG11bHQKCXN1YiBlY3gsMSAKCQoJbW92IG1jb3VudCxlY3ggIDsgYXR1YWxpemFuZG8gY29udGFkb3IKCW1vdiBlYngsbWJhc2UKCW1vdiBlYXgsMTAKCWNtcCBtcmVzLGVheAoJamUgcmV0bXVsdAoJbW92IGVheCxlYnAKCXN1YiBlYXgsNAoJCglwdXNoIGVheAoJcHVzaCBlYXggOyBDb2xvY2FuZG8gbyBlbmRlcmXDp28gZG8gdmFsb3IgZGEgYmFzZQoKCWNhbGwgc29tYQoJCglwb3AgZWJ4Cglwb3AgZWJ4IDsgRGVzY2FydGFuZG8gb3MgdmFsb3JlcyBvcmlnaW5haXMKCQoJYWRkIG1yZXMsZWF4ICA7IFNvbWFuZG8gYW8gcmVzdWx0YWRvCgkKCQoJCgltb3YgZWF4LDQKCW1vdiBlYngsMSAKCW1vdiBlY3gsaGVsbG8gCgltb3YgZWR4LDEyCglpbnQgODBoCgkKCWptcCBsb29wbXVsCgkKCXJldG11bHQ6Cgltb3YgZWF4LG1yZXMKCWxlYXZlCglyZXQ=