0
上週在實驗室中,我們必須在x86_64程序集中實現strlen函數。我完成了實驗並得到了全額獎勵,但後來發現我的代碼中存在錯誤。對於長字符串,它工作正常,但對於長度爲1,2,3的字符串,或4我的函數返回6.我不明白爲什麼。以下是代碼。strlen程序集返回6用於短字符串
.text .globl mystrlen .type mystrlen, @function mystrlen: movq $0, %rax #put 0 in return register movq $0, %r15 beginloop: cmpq $0, (%rdi) #while n!=0 je end incq %rax incq %rdi movq $0, %r14 cmpq $0, %r14 #go back to bginning je beginloop end: # ret # return result;
現在我知道這是不是實現strlen的一種好方法,有件事情我可以利用的優勢,使這種高效的,但我真的不在乎。我只是想弄清楚爲什麼這個代碼返回長度爲1,2,3或4的字符串爲6。它確實返回長度爲0或大於5的字符串。請幫我理解
當你使用'cmpq $ 0,(%rdi)'時,你比較了多少個字節? –