Ò׽ؽØͼÈí¼þ¡¢µ¥Îļþ¡¢Ãâ°²×°¡¢´¿ÂÌÉ«¡¢½ö160KB

ARMÖÐCºÍ»ã±à»ìºÏ±à³Ì¼°Ê¾Àý

1£® ÔÚCÓïÑÔÖÐÄÚǶ»ã±à
ÔÚCÖÐÄÚǶµÄ»ã±àÖ¸Áî°üº¬´ó²¿·ÖµÄARMºÍThumbÖ¸Á²»¹ýÆäʹÓÃÓë»ã±àÎļþÖеÄÖ¸ÁîÓÐЩ²»Í¬£¬´æÔÚһЩÏÞÖÆ£¬Ö÷ÒªÓÐÏÂÃ漸¸ö·½Ã棺
 
a. ²»ÄÜÖ±½ÓÏòPC¼Ä´æÆ÷¸³Öµ£¬³ÌÐòÌøתҪʹÓÃB»òÕßBLÖ¸Áî
b. ÔÚʹÓÃÎïÀí¼Ä´æÆ÷ʱ£¬²»ÒªÊ¹ÓùýÓÚ¸´ÔÓµÄC±í´ïʽ£¬±ÜÃâÎïÀí¼Ä´æÆ÷³åÍ»
c. R12ºÍR13¿ÉÄܱ»±àÒëÆ÷ÓÃÀ´´æ·ÅÖмä±àÒë½á¹û£¬¼ÆËã±í´ïʽֵʱ¿ÉÄܽ«R0µ½R3¡¢R12¼°R14ÓÃÓÚ×Ó³ÌÐòµ÷Óã¬Òò´ËÒª±ÜÃâÖ±½ÓʹÓÃÕâЩÎïÀí¼Ä´æÆ÷
d. Ò»°ã²»ÒªÖ±½ÓÖ¸¶¨ÎïÀí¼Ä´æÆ÷£¬¶øÈñàÒëÆ÷½øÐзÖÅä
ÄÚǶ»ã±àʹÓõıê¼ÇÊÇ __asm»òÕßasm¹Ø¼ü×Ö£¬Ó÷¨ÈçÏ£º
__asm
{
instruction [; instruction]

[instruction]
}
asm(“instruction [; instruction]”);
ÏÂÃæͨ¹ýÒ»¸öÀý×ÓÀ´ËµÃ÷ÈçºÎÔÚCÖÐÄÚǶ»ã±àÓïÑÔ£¬
#include <stdio.h>
 
void my_strcpy(const char *src, char *dest)
{
char ch;
 
__asm
{
loop:
ldrb ch, [src], #1
strb ch, [dest], #1
cmp ch, #0
bne loop
}
}
 
int main()
{
char *a = "forget it and move on!";
char b[64];
 
my_strcpy(a, b);
printf("original: %s", a);
printf("copyed: %s", b);
return 0;
}
ÔÚÕâÀïCºÍ»ã±àÖ®¼äµÄÖµ´«µÝÊÇÓÃCµÄÖ¸ÕëÀ´ÊµÏֵģ¬ÒòΪָÕë¶ÔÓ¦µÄÊǵØÖ·£¬ËùÒÔ»ã±àÖÐÒ²¿ÉÒÔ·ÃÎÊ¡£
 
2£® ÔÚ»ã±àÖÐʹÓÃC¶¨ÒåµÄÈ«¾Ö±äÁ¿
ÄÚǶ»ã±à²»Óõ¥¶À±à¼­»ã±àÓïÑÔÎļþ£¬±È½Ï¼ò½à£¬µ«ÊÇÓÐÖî¶àÏÞÖÆ£¬µ±»ã±àµÄ´úÂë½Ï¶àʱһ°ã·ÅÔÚµ¥¶ÀµÄ»ã±àÎļþÖС£Õâʱ¾ÍÐèÒªÔÚ»ã±àºÍCÖ®¼ä½øÐÐһЩÊý¾ÝµÄ´«µÝ£¬×î¼ò±ãµÄ°ì·¨¾ÍÊÇʹÓÃÈ«¾Ö±äÁ¿¡£
/* cfile.c
* ¶¨ÒåÈ«¾Ö±äÁ¿£¬²¢×÷ΪÖ÷µ÷³ÌÐò
*/
 
#include <stdio.h>
int gVar_1 = 12;
extern asmDouble(void);
 
int main()
{
printf("original value of gVar_1 is: %d", gVar_1);
asmDouble();
printf(" modified value of gVar_1 is: %d", gVar_1);
return 0;
}
 
¶ÔÓ¦µÄ»ã±àÓïÑÔÎļþ
;called by main(in C),to double an integer, a global var defined in C is used.
 
AREA asmfile, CODE, READONLY
 
EXPORT asmDouble
IMPORT gVar_1
 
asmDouble
ldr r0, =gVar_1
ldr r1, [r0]
mov r2, #2
mul r3, r1, r2
str r3, [r0]
mov pc, lr
END
 
3£® ÔÚCÖе÷Óûã±àµÄº¯Êý
ÔÚCÖе÷Óûã±àÎļþÖеĺ¯Êý£¬Òª×öµÄÖ÷Òª¹¤×÷Ó


Ïà¹ØÎĵµ£º

C»·¾³½«±äÁ¿¶¨Òåµ½RAM¾ø¶ÔµØÖ·Ö®ÉÏ


//À´Ô´²»Ïê
1. ¾ø¶Ôºê£º
ÔÚ³ÌÐòÖУ¬ÓÓ££include<absacc.h>”¼´¿ÉʹÓÃÆäÖж¨ÒåµÄºêÀ´·ÃÎʾø¶ÔµØÖ·£¬°üÀ¨CBYTE¡¢XBYTE¡¢PWORD¡¢DBYTE¡¢CWORD¡¢XWORD¡¢PBYTE¡¢DWORD
¾ßÌåʹÓÿɿ´Ò»¿´absacc.h±ãÖª£¬ÀýÈ磺
rval=CBYTE[0x0002];Ö¸Ïò³ÌÐò´æÖüÆ÷µÄ0002hµØÖ·
rval=XWORD[0x0002];Ö¸ÏòÍâRAMµÄ0002hµØÖ·
2 ......

Fortran & C »ì±à

C µ÷ÓÃ Fortran
c2ffn.f
      SUBROUTINE NAMEAGE(NAME, NLEN, AGE, TEMP)
      CHARACTER*(*) NAME
      INTEGER NLEN,AGE
      REAL TEMP
C
      WRITE(6,1000) NAME(1:NLEN),AGE,TEMP ......

console mode ÖÐʹÓà C/C++ ±àÒëÆ÷

jjhou.csdn.netÀïÃæÓÐ  
  --------------------------------------------------------------------------------  
   
  ÔÚ   console   mode   ÖÐʹÓà   C/C++   ±àÒëÆ÷  
  ºî½Ý   1999.04.08  
   
    ......

C/C++Ó﷨֪ʶ£ºtypedef struct Ó÷¨Ïê½â

µÚһƪ£ºtypedef structÓëstructµÄÇø±ð
1. »ù±¾½âÊÍ
typedefΪCÓïÑԵĹؼü×Ö£¬×÷ÓÃÊÇΪһÖÖÊý¾ÝÀàÐͶ¨ÒåÒ»¸öÐÂÃû×Ö¡£ÕâÀïµÄÊý¾ÝÀàÐÍ°üÀ¨ÄÚ²¿Êý¾ÝÀàÐÍ£¨int,charµÈ£©ºÍ×Ô¶¨ÒåµÄÊý¾ÝÀàÐÍ
£¨structµÈ£©¡£
ÔÚ±à³ÌÖÐʹÓÃtypedefÄ¿µÄÒ»°ãÓÐÁ½¸ö£¬Ò»¸öÊǸø±äÁ¿Ò»¸öÒ×¼ÇÇÒÒâÒåÃ÷È·µÄÐÂÃû×Ö£¬ÁíÒ»¸öÊǼò»¯Ò»Ð©±È½Ï¸´ÔÓµÄÀàÐÍÉùÃ÷ ......

C/C++µ¥Ôª²âÊÔÀíÂÛ¾«Òª£¨Ò»£©

ÄÚÈݽéÉÜ
   
  ±¾ÏµÁÐÎÄÕ¸ù¾Ý¡¶µ¥Ôª²âÊÔÓëVU2.6Ó¦Óá·ÊÓƵ½²×ùµÄÀíÂÛ²¿·ÖÕûÀí¶ø³É£¬Ö÷ÒªÌÖÂÛËĸöÎÊÌ⣺ΪʲôÐèÒªµ¥Ôª²âÊÔ£¿ÔõÑùÕ÷·þ¿É²âÐÔÄÑÌ⣿ÔõÑù²ÅÄܸßЧÂʲâÊÔ£¿ÔõÑù±£Ö¤²âÊÔЧ¹û£¿Öصã²ûÊöµ¥Ôª²âÊԵĹؼüÎÊÌ⣬²»ÊÇÒ»°ã¸ÅÄÊʺÏÓÚ¶Ôµ¥Ôª²âÊÔÓÐÒ»¶¨Á˽âµÄ¶ÁÕß¡£
  ÔÚÑ¡Ôñ¹¤¾ßºÍʵʩ ......
© 2009 ej38.com All Rights Reserved. ¹ØÓÚE½¡ÍøÁªÏµÎÒÃÇ | Õ¾µãµØͼ | ¸ÓICP±¸09004571ºÅ