;%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
cmp eax,ebx
je end
;PutLInt eax
mov eax,4
mov ebx,1
mov ecx,hello
mov edx,12
int 80h
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,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] ; Determinando 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 eax,ebp
sub eax,4 ; base
push eax
mov eax,ebp
sub eax,12 ; resultado
push eax ; Colocando o endereço do valor do resultado
call soma
pop ebx
pop ebx ; Descartando os valores originais
mov mres,eax ; copiando para o resultado
mov eax,4
mov ebx,1
mov ecx,hello
mov edx,12
int 80h
jmp loopmul
retmult:
mov eax,mres
leave
ret
OyVpbmNsdWRlICJpby5tYWMiCnNlY3Rpb24gLmRhdGEKaGVsbG8gZGIgJ0hlbGxvIFdvcmxkIScKCnNlY3Rpb24gLnRleHQKCWdsb2JhbCBfc3RhcnQKCl9zdGFydDoKCTtHZXRMSW50IGVheAoJO0dldExJbnQgZWJ4Cgltb3YgZWF4LDEwCgltb3YgZWJ4LDUKCglwdXNoIGVheAoJcHVzaCBlYngKCQoJbW92IGVieCxlc3AgCgltb3YgZWF4LGVzcCAKCWFkZCBlYXgsNAoJCglwdXNoIGVieAoJcHVzaCBlYXgKCQoJY2FsbCBtdWx0aQoJCglwb3AgZWJ4Cglwb3AgZWJ4CgkKCW1vdiBlYngsNTAKCQogICAgY21wIGVheCxlYngKCWplIGVuZAoJCgk7UHV0TEludCBlYXgKCW1vdiBlYXgsNAoJbW92IGVieCwxIAoJbW92IGVjeCxoZWxsbyAKCW1vdiBlZHgsMTIKCWludCA4MGgKCQplbmQ6IG1vdiBlYXgsMSAgICAgICAgICAgIAoJbW92IGVieCwwICAgICAgICAgICAgCglpbnQgODBoOwoJCgklZGVmaW5lIGExIGR3b3JkIFtlYnArOF0KCSVkZWZpbmUgYTIgZHdvcmQgW2VicCsxMl0KCQoJc29tYTplbnRlciAwLDAKCW1vdiBlYXgsYTEKCW1vdiBlYXgsW2VheF0KCQoJbW92IGVieCxhMgoJYWRkIGVheCxbZWJ4XQoJCglsZWF2ZQoJcmV0CgogICVkZWZpbmUgbXJlcyBkd29yZFtlYnAtMTJdCiAgJWRlZmluZSBtY291bnQgZHdvcmRbZWJwLThdCiAgJWRlZmluZSBtYmFzZSBkd29yZFtlYnAtNF0KICAgIAoJbXVsdGk6ZW50ZXIgMTIsMAoJCgltb3YgZWF4LGEyCgltb3YgZWF4LFtlYXhdIDsgRGV0ZXJtaW5hbmRvIG8gY29udGFkb3IgdXRpbGl6YWRvIG5hcyBtdWx0aXBsaWNhw6fDtWVzCgltb3YgbWNvdW50LGVheAoJbW92IGVheCxhMQoJbW92IGVheCxbZWF4XQoJY21wIGVheCwwCgkKCWpnZSBjb250bXVscHJlcAoJbmVnIGVheAoJbW92IGVieCxtY291bnQKCW5lZyBlYngKCW1vdiBtY291bnQsZWJ4IDsgU2UgbyBjb250YWRvciDDqSBuZWdhdGl2bywgaW52ZXJ0ZSBvIHNpbmFsIGRhIGJhc2UgZSBjb250YWRvcgoJCmNvbnRtdWxwcmVwOm1vdiBtYmFzZSxlYXggOyBFbXBpbGhhbmRvIHZhbG9yIGRhIGJhc2UgCgltb3YgZWF4LDAKCW1vdiBtcmVzLGVheCAgOyBFbXBpbGhhbmRvICB0b3RhbAoKbG9vcG11bDptb3YgZWN4LG1jb3VudAogICAgY21wIGVjeCwwIAoJamxlIHJldG11bHQKCXN1YiBlY3gsMSAKCQoJbW92IG1jb3VudCxlY3ggIDsgYXR1YWxpemFuZG8gY29udGFkb3IKCQoJbW92IGVheCxlYnAKCXN1YiBlYXgsNCA7IGJhc2UKCXB1c2ggZWF4IAoJCgltb3YgZWF4LGVicAoJc3ViIGVheCwxMgk7IHJlc3VsdGFkbwoJcHVzaCBlYXggOyBDb2xvY2FuZG8gbyBlbmRlcmXDp28gZG8gdmFsb3IgZG8gcmVzdWx0YWRvCgoJY2FsbCBzb21hCgkKCXBvcCBlYngKCXBvcCBlYnggOyBEZXNjYXJ0YW5kbyBvcyB2YWxvcmVzIG9yaWdpbmFpcwoJCgltb3YgbXJlcyxlYXggIDsgY29waWFuZG8gcGFyYSBvIHJlc3VsdGFkbwoJCgltb3YgZWF4LDQKCW1vdiBlYngsMSAKCW1vdiBlY3gsaGVsbG8gCgltb3YgZWR4LDEyCglpbnQgODBoCgkKCWptcCBsb29wbXVsCgkKCXJldG11bHQ6Cgltb3YgZWF4LG1yZXMKCWxlYXZlCglyZXQ=