Я пытаюсь создать ассемблерную программу с небольшим l oop и сравнением строк. Однако, когда я снова переключаюсь на основную функцию (в unknown
), input
не пусто и все еще заполнено введенной строкой. Но пользователь должен иметь возможность ввести другую строку. Как очистить эту input
переменную / метку?
Мой код:
section .data:
input: resb 16
welcome_msg: db "Welcome to this a bit more complex assembler program!", 0x0a
welcome_msg_len equ $-welcome_msg
msg_1: db "Type exit to exit the program", 0x0a
msg_1_len equ $-msg_1
msg_2: db "Unknown command!", 0x0a
msg_2_len equ $-msg_1
exit: db "exit", 0x0a
section .text
global _start
_start:
jmp main
unknown:
jmp main
exit_func:
; exit the programm
mov rax, 60
mov rdi, 0
syscall
main:
; print the welcome_msg
mov rax, 1
mov rdi, 1
mov rsi, welcome_msg
mov rdx, welcome_msg_len
syscall
; print the msg_1
mov rax, 1
mov rdi, 1
mov rsi, msg_1
mov rdx, msg_1_len
syscall
; wait for user input
mov rax, 0
mov rdi, 0
mov rsi, input
mov rdx, 16
syscall
; compare the input
mov rdi, exit
mov rsi, input
mov rcx, 4
repe cmpsb
je exit_func
; print the msg_1
mov rax, 1
mov rdi, 1
mov rsi, msg_2
mov rdx, msg_2_len
syscall
jmp unknown