aboutsummaryrefslogtreecommitdiff
path: root/prog4.asm
diff options
context:
space:
mode:
authorJoe Hunkeler <jhunkeler@gmail.com>2015-09-24 00:18:11 -0400
committerJoe Hunkeler <jhunkeler@gmail.com>2015-09-24 00:18:11 -0400
commit99fcc633ec17f0291d7db174ca60a7632e2df72b (patch)
treeca741720a3a70485424bd2d0af22620845238ff1 /prog4.asm
parentf6634150c2faadd93c2d22c88045d55577e14e49 (diff)
downloadasmfun-99fcc633ec17f0291d7db174ca60a7632e2df72b.tar.gz
Add prog4 -- Inefficient while loop + stack play
Diffstat (limited to 'prog4.asm')
-rw-r--r--prog4.asm65
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