일부 & T 어셈블리 구문에 문제가 있습니다.대/소문자를 구분하지 않는 문자열 일치
리눅스 x86에서 "as"컴파일러를 사용하고 있습니다.
암호 프로그램을 만들고 있지만 대소 문자를 구분하지 않아야합니다. 명확히하기 위해 주어진 문자의 대소 문자에 상관없이 참이어야합니다.
정상적인 평가 프로세스가 올바르게 작동하고 문자열을 반복하도록 설정했습니다.
#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
이
이 사건을 coverting위한 섹션이다, 나는add
,
sub
,
and
및
or
을 시도하고 난 그냥 질수 일하러. 이것이 실현되지 않은 후에 나는
jz SkipCase
을 깨닫는다.
비교 루틴은 주로 nessessary 인 경우 링크 할 다른 질문을 기반으로합니다.
레이아웃 및 과도한 해시에 대한 사과, 잘못된 댓글 달기 스타일.
문제의 제목이 분명히 문법이 아니기 때문에 약간의 오해의 소지가 있습니다. – hirschhornsalz
문제는 어떤 구문을 사용해야할지 모르겠다는 것입니다. 나는 프로그램의 논리가 훌륭하다고 생각하는데, 나는 어디에서 사용할 코드를 명확히해야한다. – TheoVate
음, _sub_ 대신 _cmp_ 또는 _xor_를 사용하는 것이 좋습니다. 피연산자를 변경하지 않는 장점이 있습니다 (하위 코드처럼). 대문자에서 소문자로 변환하려면 코드를 난독 화하고 싶지 않다면'xor $ 20h' 대신'sub $ 20h'을 사용하는 것이 좋습니다. 하지만이 모든 것은 AT & T 문법과 아무 관련이 없습니다. – hirschhornsalz