win7ÉϵÄcºÍasm»¥µ÷ÓÃ
×î½üÔÚÑо¿²Ù×÷ϵͳ£¬¡¶×Ô¼º¶¯ÊÖд²Ù×÷ϵͳ¡·ÉϵÚ5Õ½²ÁËasmºÍcº¯ÊýÖ®¼ä»¥µ÷Óã¬Ä¿µÄÊÇʹÓÃcÀ´Ð´²Ù×÷ϵͳÄں˵ĴúÂ룬±Ï¾¹Óûã±àд´úÂ뻹ÊǺܷÑʱ¼äµÄÊ¡£
ÅäÖÃLinux¿ª·¢»·¾³ÊµÔÚÊÇÌ«Âé·³£¬Òª×°ÐéÄâ»ú£¬»¹ÒªÅäÖÃÀϰëÌì¡£ÓÚÊǾÍÏëÄܶ¼ÔÚwindows»·¾³ÏÂʵÏÖ»¥µ÷Ó㬺Ü×ÔÈ»µÄÏëµ½ÁËmingw½»²æ»·¾³¡£ÓÚÊÇÏÂÁËÒ»¸öwin32°æ±¾µÄnasm±àÒëÆ÷£¬ÓÃnasm±àÒë»ã±à£¬ÓÃgcc±àÒëc£¬²éÁËÒ»ÏÂnasmµÄ±àÒëÑ¡Ïî-f¿ÉÒÔÖ¸¶¨asmÎļþµÄÄ¿±ê¸ñʽ£¬¹À¼Æ¿ÉÐУ¬µ«¿¼Âǵ½mingwÊǽ»²æ»·¾³£¬¸Ð¾õÉÏ»¹ÊÇÓÃcl.exeÀ´±àcÎļþ±È½ÏºÃ£¬·´ÕýnasmÒ²Ö§³Öµ¼³öwin32¸ñʽµÄobjÎļþ¡£ÊÔÁËһϿÉÐУ¬ÏÖ½«´úÂëÌùÉÏÀ´¡£Ò»¹²Èý¸öÎļþ£ºbar.c, foo.asm, makefile.ÄÚÈÝÈçÏ£º
1. bar.c
#include <stdio.h>
void myprint(); // º¯ÊýÉùÃ÷
int choose(int a, int b)
{
int c;
// __asm int 3; // ¼Ó¶Ïµã»á½øÈëVSµ÷ÊÔÆ÷
__asm{ // ÄÚǶ»ã±à²âÊÔ£¬µÈ¼ÛÓÚ£ºc = b + 1;
mov eax, dword ptr [b]
inc eax
mov dword ptr [c], eax
}
printf("a = %d, b = %d, c = %d.\n", a, b, c); // Êä³ö£ºa = 3, b = 4, c = 5.
myprint(); // µ÷ÓÃfoo.asmÖеÄ_myprintº¯Êý
return 0;
}
2. foo.asm
extern _choose ; int choose(int a, int b); ±àÒëÆ÷±à³ÉµÄobjÎļþ»á½«cº¯ÊýÃûǰ×Ô¶¯¼ÓÏ»®Ïß
[section .data] ; Êý¾ÝÔÚ´Ë
num1st dd 3
num2nd dd 4
[section .text] ; ´úÂëÔÚ´Ë
global _main ; exeÈë¿Úº¯Êý£¬Í¬ÑùÒª¼ÓÏ»®Ïß
global _myprint ; µ¼³öÕâ¸öº¯ÊýΪÁËÈà bar.c ʹÓÃ
_main:
push ebp
mov esp, ebp
push dword [num2nd] ; ²ÎÊýÈëÕ»£¬´ÓÓÒÖÁ×ó
push dword [num1st]
call _choose ; µ÷ÓÃchoose()
add esp, 8 ; È¥µô²ÎÊý
pop ebp
ret
; void myprint(char* msg, int len)
_myprint: ; ¿Õµ÷ÓÃ
ret
3. makefile
#¼ÓZi£¬/DEBUG²ÎÊý¿ÉÒÔ½øÈëvsµ÷ÊÔ
CL=cl /Zi /c
LINK=link /DEBUG
#cl /Zi main.cpp, Ò²¿É±àÒë´ø½øvs2008µ÷ÊÔµÄÐÅÏ¢¡£
main.exe : foo.obj bar.obj
$(LINK) /OUT:main.exe foo.obj bar.obj
foo.obj : foo.asm
nasm -f win32 foo.asm -o foo.obj
bar.obj : bar.c
$(CL) bar.c
Ïà¹ØÎĵµ£º
µÚ8ÕÂ:ÔÙÂÛÊý×é
1.ʲôʱºòÊý×éºÍÖ¸ÕëÊÇÏàͬµÄ
CÓïÑÔ±ê×¢¶Ô´Ë×÷ÁËÈçÏÂ˵Ã÷:
¹æÔò1: ±í´ïʽÖеÄÊý×éÃû(ÓëÉùÃ÷²»Í¬)±»±àÒëÆ÷µ±×÷Ò»¸öÖ¸Ïò¸ÃÊý×éµÚÒ»¸öÔªËØµÄÖ¸Õë.
int a[10], *p, i=2;
¿ÉÒÔͨ¹ýÒÔÏÂÈκÎÒ»ÖÖ·½·¨·ÃÎÊa[i];
p = a; p[i];
p = a; *(p+a);
p = a + i; *p
ÔÚ±í´ïʽÖÐ,Ö¸ÕëºÍÊý×éÊÇ¿ÉÒÔ»¥»»µÄ,ÒòΪËüÃÇÔÚ± ......
ÔÚLinuxÓÃc±à³Ì£¬ºÜ¶àʱºò¶¼»áÅöµ½½á¹¹ÌåÕâ¸ö¸ÅÄÓÈÆäÊÇʹÓÃÖ¸Õë·ÃÎʽṹÌå³ÉÔ±¡££¨ÏÂÃæµÄÎÄ×Ö½éÉÜ£¬Çë²Î¿¼´úÂëÀí½â£©
1. ʹÓÃÒ»¸öÐÂÔËËã·û£º->,Õâ¸öÔËËã·ûÓÐÒ»¸öÁ¬½ÓºÅ£¨-£©ºó¸úÒ»¸ö´óÓÚ·ûºÅ£¨>£©×é³É
&nbs ......
1.ÒýÑÔ
¡¡¡¡±¾ÎĵÄд×÷Ä¿µÄ²¢²»ÔÚÓÚÌṩC/C++³ÌÐòÔ±ÇóÖ°ÃæÊÔÖ¸µ¼£¬¶øÖ¼ÔÚ´Ó¼¼ÊõÉÏ·ÖÎöÃæÊÔÌâµÄÄÚº¡£ÎÄÖеĴó¶àÊýÃæÊÔÌâÀ´×Ô¸÷´óÂÛ̳£¬²¿·ÖÊÔÌâ½â´ðÒ²²Î¿¼ÁËÍøÓѵÄÒâ¼û¡£
¡¡¡¡Ðí¶àÃæÊÔÌâ¿´ËÆ¼òµ¥£¬È´ÐèÒªÉîºñµÄ»ù±¾¹¦²ÅÄܸø³öÍêÃÀµÄ½â´ð¡£ÆóÒµÒªÇóÃæÊÔÕßдһ¸ö×î¼òµ¥µÄstrcpyº¯Êý¶¼¿É¿´³öÃæÊÔÕßÔÚ¼¼ÊõÉϾ¿¾¹´ïµ½Á ......
#include<stdio.h>
#include<math.h>
float x1,x2,disc,p,q;
int main()
{
void greater_than_zero(float,float);
void equal_to_zero(float,float);
void smaller_than_zero(float,float);
float a,b,c;
printf("\ninput a,b,c:");
scanf("%f,%f,%f",&a,&b,&c) ......
µÚ¶þÕ Êý¾ÝÀàÐÍ
Ò»¡¢Êý¾ÝÀàÐÍ·ÖÀà
1 ÁªºÏÀàÐÍ
2 º¯ÊýÀàÐÍ
3 ÊýÁ¿ÀàÐÍ
3.1ËãÊõÀàÐÍ
¢Ù »ù±¾Êý¾ÝÀàÐÍ
ÕûÐÍ£¨°üÀ¨char£©
¸¡µãÐÍ ......