diff --git a/Nub.Lang/.idea/.idea.Nub.Lang/.idea/indexLayout.xml b/Nub.Lang/.idea/.idea.Nub.Lang/.idea/indexLayout.xml index 7b08163..1b8e138 100644 --- a/Nub.Lang/.idea/.idea.Nub.Lang/.idea/indexLayout.xml +++ b/Nub.Lang/.idea/.idea.Nub.Lang/.idea/indexLayout.xml @@ -1,7 +1,10 @@ - + + ../input + ../output + diff --git a/Nub.Lang/Nub.Lang/input/core/print.nub b/input/core/print.nub similarity index 100% rename from Nub.Lang/Nub.Lang/input/core/print.nub rename to input/core/print.nub diff --git a/Nub.Lang/Nub.Lang/input/core/strlen.asm b/input/core/strlen.asm similarity index 100% rename from Nub.Lang/Nub.Lang/input/core/strlen.asm rename to input/core/strlen.asm diff --git a/Nub.Lang/Nub.Lang/input/core/strlen.nub b/input/core/strlen.nub similarity index 100% rename from Nub.Lang/Nub.Lang/input/core/strlen.nub rename to input/core/strlen.nub diff --git a/Nub.Lang/Nub.Lang/input/program.nub b/input/program.nub similarity index 100% rename from Nub.Lang/Nub.Lang/input/program.nub rename to input/program.nub diff --git a/Nub.Lang/Nub.Lang/output/build.sh b/output/build.sh similarity index 100% rename from Nub.Lang/Nub.Lang/output/build.sh rename to output/build.sh diff --git a/Nub.Lang/Nub.Lang/output/debug.sh b/output/debug.sh similarity index 100% rename from Nub.Lang/Nub.Lang/output/debug.sh rename to output/debug.sh diff --git a/output/out b/output/out new file mode 100755 index 0000000..ddbe9c2 Binary files /dev/null and b/output/out differ diff --git a/output/out.asm b/output/out.asm new file mode 100644 index 0000000..840ee46 --- /dev/null +++ b/output/out.asm @@ -0,0 +1,201 @@ +global _start +extern strlen + +section .bss + label1: resq 1 + label2: resq 1 + label3: resq 1 + +section .text +_start: + mov rax, 1 + mov [label1], rax + mov rax, 1 + mov [label2], rax + mov rax, 2 + mov [label3], rax + call label4 + mov rdi, 0 + mov rax, 60 + syscall + +label4: + push rbp + mov rbp, rsp + sub rsp, 0 + mov rax, label16 + push rax + pop rdi + call label12 + mov rax, 1 + push rax + pop rdi + call label14 + mov rax, label19 + push rax + pop rdi + call strlen + push rax + mov rax, 1 + mov rbx, rax + pop rax + cmp rax, rax + sete al + movzx rax, al + cmp rax, 0 + je label18 + mov rax, label20 + push rax + pop rdi + call label12 + jmp label17 +label18: + mov rax, 0 + cmp rax, 0 + je label21 + mov rax, label22 + push rax + pop rdi + call label12 + jmp label17 +label21: + mov rax, 1 + cmp rax, 0 + je label23 + mov rax, label24 + push rax + pop rdi + call label12 + jmp label17 +label23: + mov rax, label25 + push rax + pop rdi + call label12 +label17: +label5: + mov rsp, rbp + pop rbp + ret + +label6: + push rbp + mov rbp, rsp + sub rsp, 8 + mov [rbp - 8], rdi + mov rax, [label1] + push rax + mov rax, [label2] + push rax + mov rax, [rbp - 8] + push rax + mov rax, [rbp - 8] + push rax + pop rdi + call strlen + push rax + pop rdx + pop rsi + pop rdi + pop rax + syscall +label7: + mov rsp, rbp + pop rbp + ret + +label8: + push rbp + mov rbp, rsp + sub rsp, 8 + mov [rbp - 8], rdi + mov rax, [rbp - 8] + cmp rax, 0 + je label27 + mov rax, label28 + push rax + pop rdi + call label6 + jmp label26 +label27: + mov rax, label29 + push rax + pop rdi + call label6 +label26: +label9: + mov rsp, rbp + pop rbp + ret + +label10: + push rbp + mov rbp, rsp + sub rsp, 0 + mov rax, label30 + push rax + pop rdi + call label6 +label11: + mov rsp, rbp + pop rbp + ret + +label12: + push rbp + mov rbp, rsp + sub rsp, 8 + mov [rbp - 8], rdi + mov rax, [rbp - 8] + push rax + pop rdi + call label6 + call label10 +label13: + mov rsp, rbp + pop rbp + ret + +label14: + push rbp + mov rbp, rsp + sub rsp, 8 + mov [rbp - 8], rdi + mov rax, [rbp - 8] + push rax + pop rdi + call label8 + call label10 +label15: + mov rsp, rbp + pop rbp + ret + +strcmp: + xor rdx, rdx +.loop: + mov al, [rsi + rdx] + mov bl, [rdi + rdx] + inc rdx + cmp al, bl + jne .not_equal + cmp al, 0 + je .equal + jmp .loop +.not_equal: + mov rax, 0 + ret +.equal: + mov rax, 1 + ret + +section .data +label16: db `test`, 0 +label19: db `1`, 0 +label20: db `1`, 0 +label22: db `2`, 0 +label24: db `3`, 0 +label25: db `4`, 0 +label28: db `true`, 0 +label29: db `false`, 0 +label30: db `\n`, 0 diff --git a/output/out.o b/output/out.o new file mode 100644 index 0000000..8a62271 Binary files /dev/null and b/output/out.o differ diff --git a/Nub.Lang/Nub.Lang/output/run.sh b/output/run.sh similarity index 100% rename from Nub.Lang/Nub.Lang/output/run.sh rename to output/run.sh diff --git a/output/strlen.o b/output/strlen.o new file mode 100644 index 0000000..83e9fe4 Binary files /dev/null and b/output/strlen.o differ