diff --git a/main.asm b/main.asm index 1890a36..d313449 100644 --- a/main.asm +++ b/main.asm @@ -10,6 +10,7 @@ STDERR equ 0x2 ACTION_LOOP equ 0x0 ACTION_CHAR equ 0x1 ACTION_BACK_TO_OPENING equ 0x2 +ACTION_BACK_TO_COMMA equ 0x3 section .data space db " " @@ -58,6 +59,12 @@ _start: je case_opening cmp al, [opening_bracket] je case_opening + cmp al, [closing_curly] + je case_closing + cmp al, [closing_bracket] + je case_closing + cmp al, [comma] + je case_comma mov r15, ACTION_LOOP jmp print_char @@ -75,13 +82,25 @@ _start: jmp print_char case_opening: - mov r5, ACTION_BACK_TO_OPENING + mov r15, ACTION_BACK_TO_OPENING jmp print_char - + case_opening_back: inc byte[scope] + jmp ln_start - ;je ln_start - ;jmp loop + case_closing: + dec byte[scope] + mov r15, ACTION_CHAR + jmp ln_start + + case_comma: + mov r15, ACTION_BACK_TO_COMMA + jmp print_char + case_comma_back: + mov al, [escape_next] + cmp al, 0 + je ln_start + jmp loop print_char: mov rax, SYS_WRITE @@ -90,8 +109,12 @@ _start: mov rdx, 1 int 0x80 - cmp r15, ACTION_LOOP - je loop + cmp r15, ACTION_BACK_TO_OPENING + je case_opening_back + cmp r15, ACTION_BACK_TO_COMMA + je case_comma_back + + jmp loop ln_start: xor r8, r8 @@ -103,8 +126,19 @@ _start: imul rax, rbx mov r9, rax + mov rax, SYS_WRITE + mov rbx, STDOUT + mov rcx, endl + mov rdx, 1 + int 0x80 + cmp qword[scope], 0 - je loop + jne ln_loop + + ln_end: + cmp r15, ACTION_CHAR + je print_char + jmp loop ln_loop: mov rax, SYS_WRITE @@ -116,7 +150,8 @@ _start: inc r8 cmp r8, r9 jne ln_loop - je loop + + jmp ln_end end: mov rax, SYS_EXIT