2010-10-17 63 views
0

我們正在嘗試在彙編中實現流水線距離算法並從C代碼中調用匯編函數。但是我們有一些字符比較問題,並不能解決問題。彙編角色比較問題

函數帶兩個char *參數。在前兩行中,我將這些地址放到ecx和edx中。 iminusOne和jminusOne是獲取當前(代碼塊是循環的一部分)字符的索引。找到字符的地址後,我將字符移動到寄存器中並使用cmp進行比較。但例如,當我比較兩個字符串「蘋果」和「蘋果」時,前三個字符似乎相同,但其他兩個字符不相等。我在ecx和edx的地址上向控制檯顯示字符,他們似乎也是平等的。當前字符數的

mov ecx,[esp+4] 
    mov edx,[esp+8] 

    mov ebx,[iminusOne] 
    add ecx,ebx 
    mov ebx,[jminusOne]  
    add edx,ebx 
    call printCurrentChars 
    mov edx,[edx]; bellekteki veriyi direk register a yüklüyoruz çünkü karşılaştırma 
     ; işlemine parametre olarak iki adres alanı veremiyoruz 
    mov ecx,[ecx] 
    cmp edx,ecx 
    jne notEqual 
    call printHello 
    mov ebx,eax 

打印結果:

appleapple
AA
你好,世界! // OK
AP
AP

AE
PA

你好,世界! // OK

//這應該是平等的,但不是
PL
PE
PA

//這應該是平等的,但不是

你好,世界!
PL
PE

LP
LP
LL
//這應該是平等的,但不是

EA
EP
EP
EL
EE
//這應該是平等的,但不是

+2

請問爲什麼要實現這個機器代碼,而你正在開發C中的應用程序的其他部分? – 2010-10-17 08:47:07

+0

這是系統編程課的作業主要目的不是算法的確。 – mehmet6parmak 2010-10-17 09:01:38

回答

5
mov edx,[edx] 
mov ecx,[ecx] 
cmp edx,ecx 

我想你是比較dword而不是字節。

嘗試

mov dh, byte ptr [edx] 
mov ch, byte ptr [ecx] 
cmp dh, ch 
+0

我們用cl和dl表示感謝 – mehmet6parmak 2010-10-17 09:44:03