Нечувствительное к регистру совпадение строк - PullRequest
0 голосов
/ 11 декабря 2011

У меня проблема с синтаксисом некоторых сборок AT & T.

Я использую компилятор "as" в linux x86.

Я создаю программу паролей, но это должно быть так.нечувствительны.Чтобы уточнить, он должен оценивать true независимо от случая любого заданного символа.

У меня нормальный процесс оценки работает правильно, и я настроил его для перебора строки.

#Comparison Routine

    movl $Password, %ebx     #Move the entire hardcoded password into ebx
    movl $buffer_data, %edx  #Move the entire input password into edx
    movl $Password_len, %ecx #Move the length of the input password into ecx

0:  
    movb (%ebx), %al         #Move one byte of the hardcoded password into al
    xorb (%edx), %al         #Compare one byte of the input password to one byte of the hardedcoded
    jz SkipCase              #If they match, jump to SkipCase

##### 

    andb $32, %al   # 
    xorb (%edx), %al

    jz SkipCase
    jnz IncorrectOutput #   

SkipCase:
    inc %ebx                #Iterate through the
    inc %edx                #strings and decrease
    dec %ecx                #the length variable
    jnz 0b                  #if we're not finished, continue
    jmp CorrectOutput       #If all is good, goto CorrectOutput

Это раздел, с которым я борюсь, я не могу понять, как на самом деле конвертировать персонажа между делами.Я знаю, что мне нужно добавить или вычесть 32 из этого, но что-то не так.Любые комментарии или предложения будут очень полезны.Спасибо.

andb $32, %al   # 
xorb (%edx), %al

Это раздел, посвященный рассмотрению дела, я пробовал add, sub, and и or, и я просто не могу заставить его работать.я понимаю, что jz SkipCase после этого не является обязательным.

Процедура сравнения в значительной степени основана на другом вопросе, который я здесь приведу, если это необходимо.

Извинения за компоновку и избыточные хэши,плохой стиль комментирования, я знаю.

1 Ответ

1 голос
/ 11 декабря 2011

Я вижу, что вы сначала пытаетесь сопоставить символы "строго", а когда это не удается, вы переходите к сопоставлению без учета регистра.

andb $32, %al     # this 'and' operation only leaves the $32 bit if it is 
                  # present in al, all other bits are set to 0

# al is now either 0 (for a lower case character)
# or $32 (for an upper case character)

xorb (%edx), %al  # so this operation will become zero if the upper case 
                  # bit ($32) is set in the hardcoded password character

Вместо этого вам нужно сделать что-то вроде этого:

xorb $32, %al     # invert case of the character by toggling the upper case bit
cmp (%edx), %al   # try to match again
je SkipCase

Надеюсь, это поможет, мне очень сложно объяснить битовые операции в таком коротком посте, как этот.:)


Кроме того, я предполагаю, что это либо домашнее задание, либо какое-то упражнение, потому что реальная процедура ввода пароля должна быть более умной - например, выполнять только проверку букв без учета регистра, никогда не вводить цифры или другиесимволы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...