这里用的是 win64 位
配置 请看:https://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
转载于:https://blog.51cto.com/haidragon/2097430