惭愧,到今天就只会这么简单的汇编程序,汇编语言要猛补一下。记录一下我第一个简单的汇编程序吧。
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
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