;%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
OyVpbmNsdWRlICJpby5tYWMiCnNlY3Rpb24gLmRhdGEKaGVsbG8gZGIgJ0hlbGxvIFdvcmxkIScKCnNlY3Rpb24gLnRleHQKCWdsb2JhbCBfc3RhcnQKCl9zdGFydDoKCTtHZXRMSW50IGVheAoJO0dldExJbnQgZWJ4Cgltb3YgZWF4LDEwCgltb3YgZWJ4LC01CgoJcHVzaCBlYXgKCXB1c2ggZWJ4CgkKCW1vdiBlYngsZXNwIAoJbW92IGVheCxlc3AgCglhZGQgZWF4LDQKCQoJcHVzaCBlYngKCXB1c2ggZWF4CgkKCWNhbGwgbXVsdGkKCQoJcG9wIGVieAoJcG9wIGVieAoJCgltb3YgZWJ4LC01MAoJCiAgICBjbXAgZWF4LGVieAoJamUgZW5kCgkKCTtQdXRMSW50IGVheAoJbW92IGVheCw0Cgltb3YgZWJ4LDEgCgltb3YgZWN4LGhlbGxvIAoJbW92IGVkeCwxMgoJaW50IDgwaAoJCmVuZDogbW92IGVheCwxICAgICAgICAgICAgCgltb3YgZWJ4LDAgICAgICAgICAgICAKCWludCA4MGg7CgkKCSVkZWZpbmUgYTEgZHdvcmQgW2VicCs4XQoJJWRlZmluZSBhMiBkd29yZCBbZWJwKzEyXQoJCglzb21hOmVudGVyIDAsMAoJbW92IGVheCxhMQoJbW92IGVheCxbZWF4XQoJCgltb3YgZWJ4LGEyCglhZGQgZWF4LFtlYnhdCgkKCWxlYXZlCglyZXQKCiAgJWRlZmluZSBtcmVzIGR3b3JkW2VicC0xMl0KICAlZGVmaW5lIG1jb3VudCBkd29yZFtlYnAtOF0KICAlZGVmaW5lIG1iYXNlIGR3b3JkW2VicC00XQogICAgCgltdWx0aTplbnRlciAxMiwwCgkKCW1vdiBlYXgsYTIKCW1vdiBlYXgsW2VheF0gOyBEZXRlcm1pbmFuZG8gbyBjb250YWRvciB1dGlsaXphZG8gbmFzIG11bHRpcGxpY2HDp8O1ZXMKCW1vdiBtY291bnQsZWF4Cgltb3YgZWF4LGExCgltb3YgZWF4LFtlYXhdCgljbXAgZWF4LDAKCQoJamdlIGNvbnRtdWxwcmVwCgluZWcgZWF4Cgltb3YgZWJ4LG1jb3VudAoJbmVnIGVieAoJbW92IG1jb3VudCxlYnggOyBTZSBvIGNvbnRhZG9yIMOpIG5lZ2F0aXZvLCBpbnZlcnRlIG8gc2luYWwgZGEgYmFzZSBlIGNvbnRhZG9yCgkKY29udG11bHByZXA6bW92IG1iYXNlLGVheCA7IEVtcGlsaGFuZG8gdmFsb3IgZGEgYmFzZSAKCW1vdiBlYXgsMAoJbW92IG1yZXMsZWF4ICA7IEVtcGlsaGFuZG8gIHRvdGFsCgpsb29wbXVsOm1vdiBlY3gsbWNvdW50CiAgICBjbXAgZWN4LDAgCglqbGUgcmV0bXVsdAoJc3ViIGVjeCwxIAoJCgltb3YgbWNvdW50LGVjeCAgOyBhdHVhbGl6YW5kbyBjb250YWRvcgoJCgltb3YgZWF4LGVicAoJc3ViIGVheCw0IDsgYmFzZQoJcHVzaCBlYXggCgkKCW1vdiBlYXgsZWJwCglzdWIgZWF4LDEyCTsgcmVzdWx0YWRvCglwdXNoIGVheCA7IENvbG9jYW5kbyBvIGVuZGVyZcOnbyBkbyB2YWxvciBkbyByZXN1bHRhZG8KCgljYWxsIHNvbWEKCQoJcG9wIGVieAoJcG9wIGVieCA7IERlc2NhcnRhbmRvIG9zIHZhbG9yZXMgb3JpZ2luYWlzCgkKCW1vdiBtcmVzLGVheCAgOyBjb3BpYW5kbyBwYXJhIG8gcmVzdWx0YWRvCgkKCW1vdiBlYXgsNAoJbW92IGVieCwxIAoJbW92IGVjeCxoZWxsbyAKCW1vdiBlZHgsMTIKCWludCA4MGgKCQoJam1wIGxvb3BtdWwKCQoJcmV0bXVsdDoKCW1vdiBlYXgsbXJlcwoJbGVhdmUKCXJldA==