Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

116
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!