diff options
Diffstat (limited to '')
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | b32d.asm | 47 | ||||
-rw-r--r-- | makefile | 25 |
3 files changed, 67 insertions, 6 deletions
@@ -2,3 +2,4 @@ b32e b32d *.o +*.b32 diff --git a/b32d.asm b/b32d.asm new file mode 100644 index 0000000..aa7582b --- /dev/null +++ b/b32d.asm @@ -0,0 +1,47 @@ +section .bss + +input_buffer resb 8 +output_buffer resb 8 + +section .text +global _start + +; read_input +; reads 5 bytes (40 bits) of input +; uses reg: rax, rdi, rsi, rdx +; uses mem: input_buffer +read_input: + ; linux x64 read(stdin, input_buffer, 5) + mov rax, 0 + mov rdi, 0 + mov rsi, input_buffer + mov rdx, 5 + syscall + ret + +; write_output +; writes the output buffer to stdout +; uses reg: rax, rdi, rsi, rdx +; uses mem: output_buffer(ro) +write_output: + ; linux x64 write(stdout, output_buffer, 8) + mov rax, 1 + mov rdi, 1 + mov rsi, output_buffer + mov rdx, 8 + syscall + ret + +; b32d +; decodes 8 RFC4648 characters without checking its validity (!!!) +; uses reg: +; uses mem: input_buffer, output_buffer +b32d: + ret + +_start: +.exit: + ; linux x64 exit(0) + mov rax, 60 + mov rdi, 0 + syscall @@ -1,15 +1,28 @@ -all: b32e - # test b32e hello - echo -n "hello" | ./b32e - @printf '\n' - echo -n "hello" | base32 -i +.PHONY: all +all: b32e b32d +.PHONY: test +test: b32e b32d + cat makefile | ./b32e > makefile.b32 + cat makefile | base32 -w 0 > makefile.check.b32 + + cat makefile.b32 | ./b32d + cat makefile.check.b32 | base32 -d + +# encoder b32e: b32e.o ld -o $@ $< b32e.o: b32e.asm nasm -f elf64 -g -F dwarf -O0 -w+all -o $@ $< +# decoder +b32d: b32d.o + ld -o $@ $< + +b32d.o: b32d.asm + nasm -f elf64 -g -F dwarf -O0 -w+all -o $@ $< + .PHONY: clean clean: - rm -f *.o b32e b32d + rm -f *.o b32e b32d *.b32 |