彙編求字符串長度

這裏用的是 win64 位
配置 請看:http://blog.51cto.com/haidragon/2097428
//main.cpp

#include<iostream>
using namespace std;

//聲明函數
extern "C" long mystrlen(char* ch);

int testc(char* ch) {
    if (*ch == '0') {
        cout << *ch;
    }
    int i = 0;
    while (*ch!='\0')
    {

        ++ch;
        ++i;
    }

    return i;
}
int main()
{
    //調用匯編函數
    char ch[] = "allenboy";
    int a = mystrlen(ch);
    int b = testc(ch);
    cout <<"c實現   "<<b<<endl<< "彙編實現   "<<a << endl;
    cin.get();
    return 0;
}

test.asm

.data
    szdata3 db '\0',0
.code
mystrlen proc
;-----------------------------------------------
    ;清0
    xor rax,rax
    ;清0
    xor rdx,rdx
    ;清0
    xor r8,r8
    ;清0
    xor r9,r9
    mov r8,offset szdata3
    mov r9,[r8]
    ;mov r8,0h
    ;rcx代表第一個參數
    mov rdx,rcx
allen:
     ;while(*ch!='\0'){
     ;cmp r8,r9  不能用 cmp [r8],r9   test [r8],[r9]
     test [rdx],r9
     ;break
     je boy
     ;else ++ch ++i
     inc rdx
     inc rax
     jmp allen
boy:
    ;return i
;----------------------------------------
    ret 
mystrlen endp
end
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章