zombie-core-utils/3x+1.asm

72 lines
807 B
NASM
Raw Normal View History

extern puts
2021-10-04 15:15:14 -04:00
extern libz_atoi
2021-10-02 18:48:39 -04:00
section .data
text db "Number reaches 1",0
even db "even",0
odd db "odd",0
2021-10-04 16:33:08 -04:00
number dq "496489",0
2021-10-02 18:48:39 -04:00
tempstore db 0
section .text
global main
main:
sub rsp, 8
2021-10-06 15:51:52 -04:00
add rsi, 8
mov r8, [rsi]
mov [tempstore], r8
2021-10-02 18:48:39 -04:00
2021-10-06 15:51:52 -04:00
mov rdi, [tempstore]
2021-10-04 15:15:14 -04:00
call libz_atoi
2021-10-02 18:48:39 -04:00
mov r8, rax
_loop:
cmp r8, 1 ;if number is 1 then end
je _printstupid
test r8, 1 ;odd even check
jnz _odd
jz _even
_odd:
; mov rdi, odd
; cld
; call puts
mov rax, r8 ; gotta do this because mul only takes one argument
mov r9, 3
mul r9
add rax, 1
mov r8, rax
jmp _loop
_even:
; mov rdi, even
; cld
; call puts
xor rdx, rdx
mov rax, r8
mov rcx, 2
div rcx
mov r8, rax
jmp _loop
_printstupid:
mov rdi, text
cld
call puts ;this is the put s way of printing a string
_end:
add rsp, 8
ret