Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

118
Vistas
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 Respuestas
Responde la pregunta

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda