Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

117
Visualizações
Tratando de comparar dos cadenas en x86-64
global _start section .data firstMsg: db "hello worms, please say the passcode", 10 firstLen: equ $ - firstMsg secondMsg: db "Correct", 10 secondLen: equ $ - secondMsg thirdMsg: db "Incorrect.", 10 thirdLen: equ $ - thirdMsg password: db "Hello" section .bss attempt RESB section .data _start: ;Print the first message mov rax, 1 mov rdi, 1 mov rsi, firstMsg mov rdx, firstLen syscall ;Read input mov rax, 0 mov rdi, 0 mov rsi, attempt mov rdx, 10 syscall ;compare input to the password cmp attempt, password je L1 jne L2 syscall ;Display correct if correct L1: mov rax, 1 mov rdi, 1 mov rsi, secondMsg mov rdx, secondLen jmp L3 syscall ;display incorrect if incorrect L2: mov rax, 1 mov rdi, 1 mov rsi, thirdMsg mov rdx, secondLen syscall ;exit the program L3: mov rax, 60 mov rdi, 1 syscall

Este código devuelve este mensaje de error:

 inout.asm:13: error: invalid combination of opcode and operands inout.asm:33: error: invalid combination of opcode and operands

Lo que estoy tratando de hacer aquí es tomar la entrada de un usuario como una cadena, que luego se comparará con la contraseña constante. Si son idénticos, imprime "correcto", si no lo son, imprime "incorrecto" y vuelve a la primera pregunta (aún no se ha hecho esa parte).

Si alguien me puede ayudar a arreglar esto, sería genial.

over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

una instrucción cmp compara dos valores que caben en un registro (valores de 8, 16, 32 o 64 bits), no dos cadenas. Necesita un cmpsb para comparar cada carácter de las cadenas, y puede usar un rep para comparar la cadena completa de una sola vez:

 ;compare input to the password mov rsi, attempt ; first string mov rdi, password ; second string mov rcx, 5 ; length of the password repe cmpsb ; compare jne L2 ; no match cmp byte ptr [rsi], 10 ; \n to end the input jne L2 ; extra stuff in attempt jmp L1

Tenga en cuenta que podría simplificar esto un poco agregando el carácter '\n' a la contraseña esperada y usando una longitud de 6. Entonces no necesitaría la comprobación cmp/jne adicional para el final de la entrada.

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda