RosettaCodeData/Task/Balanced-brackets/X86-Assembly/balanced-brackets.x86

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