diff options
author | Joe Hunkeler <jhunkeler@gmail.com> | 2015-09-24 00:18:11 -0400 |
---|---|---|
committer | Joe Hunkeler <jhunkeler@gmail.com> | 2015-09-24 00:18:11 -0400 |
commit | 99fcc633ec17f0291d7db174ca60a7632e2df72b (patch) | |
tree | ca741720a3a70485424bd2d0af22620845238ff1 /prog4.asm | |
parent | f6634150c2faadd93c2d22c88045d55577e14e49 (diff) | |
download | asmfun-99fcc633ec17f0291d7db174ca60a7632e2df72b.tar.gz |
Add prog4 -- Inefficient while loop + stack play
Diffstat (limited to 'prog4.asm')
-rw-r--r-- | prog4.asm | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/prog4.asm b/prog4.asm new file mode 100644 index 0000000..0a49cd8 --- /dev/null +++ b/prog4.asm @@ -0,0 +1,65 @@ +; begin playing around with variables! +section .bss + fart_count: resb 4 + +section .data + fart_max: db 255 + +section .text + global _start + +dofarts: + push ebp + mov ebp, esp + add ebp, 4 + + ; set the fart_count to zero + mov DWORD [fart_count], 0 + + ; save eax to the stack because we're gonna use it + push eax + + jmp dofarts.keepgoing + +dofarts.stop: + ;clean up and return + pop eax + pop ebp + ret + +dofarts.keepgoing: + ; put fart_count into a register (i wish i could do mem,mem) + mov eax, [fart_count] + + ; increment the fart_count + add dword[fart_count], 1 + + ; has fart_count reached fart_max? + jge dofarts.check + ; else, stop... this is redundant... + jmp dofarts.stop + +dofarts.check: + ; is fart_count (eax) fart_max? + cmp eax, [fart_max] + ; if so, stop + jge dofarts.stop + ; else keep going + jmp dofarts.keepgoing + + +_start: + push ebp + mov ebp, esp + + call dofarts + mov ebx, [fart_count] + add ebx, [fart_max] + + mov esp, ebp + pop ebp + + mov eax, 1 + ;mov ebx, 0 + int 80h + ret |