惭愧,到今天就只会这么简单的汇编程序,汇编语言要猛补一下。记录一下我第一个简单的汇编程序吧。
1
#include < windows.h >
2
3
int a[] =
{ 1 , 2 , 3 , 4 , 5 , 6 } ;
4
int b[] =
{ 2 , 2 , 3 , 4 , 5 , 6 } ;
5
int c[] =
{ 2 , 2 , 3 , 4 , 5 , 6 } ;
6
7
BOOL Compare( int * a, int * b, int len)
8
{
9
BOOL bRet = FALSE;
10
__asm
11
{
12
MOV ECX, len // 将a的长度放到ECX中
13
MOV EDX, len // 将b的长度放到EDX中
14
MOV ESI, a // 将a指针的值放到ESI中
15
MOV EDI, b // 将b指针的值放到EDI中
16
REP CMPSD // 按4个字节来比较ESI和EDI中的值,长度在ECX和EDX中给出
17
JNZ SETFLAG // 如果不相等条SETFLAG
18
MOV bRet, TRUE // 相等就设置bRet为TRUE
19
JMP EXITREG // 退出
20
SETFLAG:
21
MOV bRet, FALSE // 不相等
22
EXITREG:
23
}
24
return bRet;
25
}
26
27
int main( int argc, char * argv[])
28
{
29
BOOL bRet = Compare(a,b, 6 );
30
bRet = Compare(b,c, 6 );
31
return 0 ;
32
}
33
#include < windows.h > 2
3
int a[] =
{ 1 , 2 , 3 , 4 , 5 , 6 } ;4
int b[] =
{ 2 , 2 , 3 , 4 , 5 , 6 } ;5
int c[] =
{ 2 , 2 , 3 , 4 , 5 , 6 } ;6
7
BOOL Compare( int * a, int * b, int len)8
{9
BOOL bRet = FALSE;10
__asm11
{12
MOV ECX, len // 将a的长度放到ECX中 13
MOV EDX, len // 将b的长度放到EDX中 14
MOV ESI, a // 将a指针的值放到ESI中 15
MOV EDI, b // 将b指针的值放到EDI中 16
REP CMPSD // 按4个字节来比较ESI和EDI中的值,长度在ECX和EDX中给出 17
JNZ SETFLAG // 如果不相等条SETFLAG 18
MOV bRet, TRUE // 相等就设置bRet为TRUE 19
JMP EXITREG // 退出 20
SETFLAG:21
MOV bRet, FALSE // 不相等 22
EXITREG:23
} 24
return bRet;25
} 26
27
int main( int argc, char * argv[])28
{29
BOOL bRet = Compare(a,b, 6 );30
bRet = Compare(b,c, 6 );31
return 0 ;32
} 33
