67 lines
957 B
Plaintext
67 lines
957 B
Plaintext
section .data
|
|
|
|
MsgBalanced: db "OK", 10
|
|
MsgBalancedLen: equ 3
|
|
|
|
MsgUnbalanced: db "NOT OK", 10
|
|
MsgUnbalancedLen: equ 7
|
|
|
|
MsgBadInput: db "BAD INPUT", 10
|
|
MsgBadInputLen: equ 10
|
|
|
|
Open: equ '['
|
|
Closed: equ ']'
|
|
|
|
section .text
|
|
|
|
BalancedBrackets:
|
|
|
|
xor rcx, rcx
|
|
mov rsi, rdi
|
|
cld
|
|
|
|
processBracket:
|
|
lodsb
|
|
cmp al, 0
|
|
je determineBalance
|
|
|
|
cmp al, Open
|
|
je processOpenBracket
|
|
|
|
cmp al, Closed
|
|
je processClosedBracket
|
|
|
|
mov rsi, MsgBadInput
|
|
mov rdx, MsgBadInputLen
|
|
jmp displayResult
|
|
|
|
processOpenBracket:
|
|
add rcx, 1
|
|
jmp processBracket
|
|
|
|
processClosedBracket:
|
|
cmp rcx, 0
|
|
je unbalanced
|
|
|
|
sub rcx, 1
|
|
jmp processBracket
|
|
|
|
|
|
determineBalance:
|
|
cmp rcx, 0
|
|
jne unbalanced
|
|
|
|
mov rsi, MsgBalanced
|
|
mov rdx, MsgBalancedLen
|
|
jmp displayResult
|
|
|
|
unbalanced:
|
|
mov rsi, MsgUnbalanced
|
|
mov rdx, MsgUnbalancedLen
|
|
|
|
displayResult:
|
|
mov rax, 1
|
|
mov rdi, 1
|
|
syscall
|
|
ret
|