Skip to content

Instantly share code, notes, and snippets.

@urish urish/7-boom.asm Secret
Created May 26, 2017

Embed
What would you like to do?
.text
.globl _start
_start:
ldr %r0, =hello_message
mov %r1, #hello_message_len
bl _print
mov %r0, #199
push { %r0}
bl _boom
bl _newline
_mefareklemisparim:
pop {%r0}
cmp %r0, #0
beq _exit
sub %r0, %r0, #1
push {%r0}
bl _boom
bl _newline
b _mefareklemisparim
_exit:
mov %r0, #0 // exit status 0 (ok)
mov %r7, #1 // syscall 1 (exit)
swi #0
_boom: // prints the number in r0 if it does not divide by 7
push {%r0, %r1, %r2, %r3, %r14}
mov %r3, #7
udiv %r1, %r0, %r3
mul %r2, %r1, %r3
cmp %r0, %r2
beq _print_boom
blne _mispar
b _sof_boom
_print_boom:
ldr %r0, =boom_message
mov %r1, #boom_message_len
bl _print
_sof_boom:
pop {%r0, %r1, %r2, %r3, %r14}
bx %r14
_mispar: // prints the number in r0
push { %r1, %r2, %r3,%r4, %r14 }
mov %r4, #0
_HOZERHALILA:
cmp %r0, #10
blt _sifra_ahrona
// r0 < 10 - then print r0
// r0 > 10 - divide by 10
// print remainder
// repeat
mov %r3, #10
udiv %r1, %r0, %r3
mul %r2, %r1, %r3
sub %r0, %r0, %r2
push {%r0}
add %r4, %r4, #1
mov %r0, %r1
b _HOZERHALILA
_sifra_ahrona:
bl _sifra
_losiamnu:
cmp %r4, #0
beq _sofsof
pop { %r0 }
bl _sifra
sub %r4, %r4, #1
b _losiamnu
_sofsof:
pop { %r1, %r2,%r3,%r4, %r14 }
bx %r14
_sifra: // prints the digit in r0
push { %r1, %r14 }
ldr %r1, =message
add %r1, %r1, %r0
mov %r0, %r1
mov %r1, #1
bl _print
pop { %r1, %r14 }
bx %r14
_newline:
push { %r0, %r1, %r14}
ldr %r0, =kfotzli
mov %r1, #1
bl _print
pop { %r0, %r1, %r14}
bx %r14
_print: // prints the text in r0, how many characters to print in r1
push { %r0, %r1, %r2, %r7 }
mov %r2, %r1 // length
mov %r1, %r0 // what to print
mov %r0, #1 // fd 1 (stdout)
mov %r7, #4 // syscall 4 (write)
swi #0
pop { %r0, %r1, %r2, %r7 }
bx %r14
.data
hello_message: .ascii "7-BOOM by Ariella Eliassaf & Uri Shaked\n\n"
hello_message_len = . - hello_message
kfotzli:
.ascii "\n"
boom_message:
.ascii "BOOM"
boom_message_len = . - boom_message
message:
.ascii "0123456789"
message_len = . - message
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.