我與一些AT & T彙編語法問題所困擾。不區分大小寫字符串匹配
進出口使用在Linux x86 「視」 的編譯器。
林做一個密碼程序,但它必須是不區分大小寫。澄清一下,無論任何特定角色的情況如何,它都應評估真實。
我有正常的評估程序正常工作,我有它設置爲通過字符串進行迭代。
#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
這是部分IM着,我無法弄清楚如何真正轉換的情況下的字符掙扎。我知道我需要添加或減去32,但有些不對。任何意見或建議都會非常有幫助。謝謝。
andb $32, %al #
xorb (%edx), %al
這是coverting的情況下的部分,我已經試過add
,sub
,and
和or
,我只是無法得到它的工作。這並不是必然的,我意識到jz SkipCase
。
的比較例程在很大程度上是基於對關在這裏另外一個問題,我會如果nessessary鏈接。
道歉佈局和過度的哈希值,壞的評論風格,我知道。
你的問題的標題是有點誤導,因爲你的問題顯然不是語法 – hirschhornsalz
的問題是,我不知道什麼語法使用。我認爲程序的邏輯很好,我只需要澄清哪些代碼在哪裏使用。 – TheoVate
嗯,我會建議使用_cmp_代替_sub_甚至_xor_。它具有不改變操作數的優點(像sub一樣)。對於從小寫到大寫的轉換,我建議'sub $ 20h'而不是'xor $ 20h',除非你想混淆你的代碼。但是,這一切與AT&T語法無關。 – hirschhornsalz