ARMϰÌâ´ð°¸

¡¶ARMǶÈëʽϵͳ½á¹¹Óë±à³Ì¡·Ï°Ìâ²Î¿¼´ð°¸

µÚÒ»Õ Ð÷ÂÛ

1. ¹úÄÚǶÈëʽϵͳÐÐÒµ¶Ô¡°Ç¶Èëʽϵͳ¡±µÄ¶¨ÒåÊÇʲô£¿ÈçºÎÀí½â£¿

´ð£º¹úÄÚǶÈëʽÐÐÒµÒ»¸öÆÕ±éÈÏͬµÄ¶¨ÒåÊÇ£ºÒÔÓ¦ÓÃΪÖÐÐÄ£¬ÒÔ¼ÆËã»ú¼¼ÊõΪ»ù´¡£¬ÈíÓ²¼þ¿É²Ã¼ô£¬ÊÊÓ¦Ó¦ÓÃϵͳ¶Ô¹¦ÄÜ£¬¿É¿¿ÐÔ£¬³É±¾£¬Ìå»ý£¬¹¦ºÄÑϸñÒªÇóµÄרҵ¼ÆËã»úϵͳ¡£ ´ÓÕâ¸ö¶¨Òå¿ÉÒÔ¿´³öǶÈëʽϵͳÊÇÓëÓ¦ÓýôÃܽáºÏµÄ£¬Ëü¾ßÓкÜÇ¿µÄרÓÃÐÔ£¬±ØÐë½áºÏʵ¼ÊϵͳÐèÇó½øÐкÏÀíµÄ¼ô²ÃÀûÓá£Òò´ËÓÐÈ˰ÑǶÈëʽϵͳ±È×÷ÊÇÒ»¸öÕë¶ÔÌØ¶¨µÄÓ¦Óöø¡°Á¿Éí¶¨×ö¡±µÄרҵ¼ÆËã»úϵͳ¡£

2£®Ç¶ÈëʽϵͳÊÇ´ÓºÎʱ²úÉúµÄ£¬¼òÊöÆä·¢Õ¹Àú³Ì¡£ ´ð£º´Ó20ÊÀ¼Í70Äê´úµ¥Æ¬»úµÄ³öÏÖµ½Ä¿Ç°¸÷ʽ¸÷ÑùµÄǶÈëʽ΢´¦ÀíÆ÷£¬Î¢¿ØÖÆÆ÷µÄ´ó¹æÄ£Ó¦Óã¬Ç¶ÈëʽϵͳÒѾ­ÓÐÁË30¶àÄêµÄ·¢Õ¹ÀúÊ·¡£

ǶÈëʽϵͳµÄ³öÏÖ×î³õÊÇ»ùÓÚµ¥Æ¬»úµÄ¡£Intel¹«Ë¾1971Ä꿪·¢³öµÚһƬ¾ßÓÐ4λ×ÜÏ߽ṹµÄ΢´¦ÀíÆ÷4004£¬¿ÉÒÔ˵ÊÇǶÈëʽϵͳµÄÃÈÑ¿½×¶Î¡£80Äê´ú³õµÄ8051Êǵ¥Æ¬»úÀúÊ·ÉÏÖµµÃ¼ÍÄîµÄÒ»Ò³¡£20ÊÀ¼Í80Äê´úÔçÆÚ£¬³öÏÖÁËÉÌÒµ¼¶µÄ¡°ÊµÊ±²Ù×÷ϵͳÄںˡ±£¬ÔÚʵʱÄÚºËϱàдӦÓÃÈí¼þ¿ÉÒÔʹвúÆ·µÄÑØ×Ÿü¿ì£¬¸ü½ÚÊ¡×ʽð¡£20ÊÀ¼Í90Äê´úʵʱÄں˷¢Õ¹ÎªÊµÊ±¶àÈÎÎñ²Ù×÷ϵͳ¡£²½Èë21ÊÀ¼ÍÒÔÀ´£¬Ç¶ÈëʽϵͳµÃµ½Á˼«´óµÄ·¢Õ¹¡£ÔÚÓ²¼þÉÏ£¬MCUµÄÐÔÄܵõ½Á˼«´óµÄÌáÉý£¬ÌرðÊÇARM¼¼ÊõµÄ³öÏÖÓëÍêÉÆ£¬ÎªÇ¶Èëʽ²Ù×÷ϵͳÌṩÁ˹¦ÄÜÇ¿´óµÄÓ²¼þÔØÌ壬½«Ç¶ÈëÊ½ÏµÍ³ÍÆÏòÁËÒ»¸öոеĽ׶Ρ£

3£®µ±Ç°×î³£ÓõÄÔ´Â뿪·ÅµÄǶÈëʽ²Ù×÷ϵͳÓÐÄÄЩ£¬Çë¾Ù³öÁ½Àý£¬²¢·ÖÎöÆäÌØµã¡£ ´ð£ºÖ÷ÒªÓÐǶÈëʽLinuxºÍǶÈëʽʵʱ²Ù×÷ÄÚºËuC/OS-II

ǶÈëʽLinux²Ù×÷ϵͳÊÇÕë¶ÔǶÈëʽ΢¿ØÖÆÆ÷µÄÌØµã¶øÁ¿Éí¶¨×öµÄÒ»ÖÖLinux²Ù×÷ϵͳ£¬°üÀ¨³£ÓõÄǶÈëʽͨÐÅЭÒéºÍ³£ÓÃÇý¶¯£¬Ö§³Ö¶àÖÖÎļþϵͳ¡£Ö÷ÒªÓÐÒÔÏÂÌØµã£ºÔ´Â뿪·Å£¬Ò×ÓÚÒÆÖ²£¬ÄÚºËС£¬¹¦ÄÜÇ¿´ó£¬ÔËÐÐÎȶ¨£¬Ð§Âʸߵȡ£

uC/OSÊÇÔ´Â빤¿¨µÄʵʱǶÈëʽϵͳÄںˣ¬Ö÷ÒªÓÐÒÔÏÂÌØµã£ºÔ´Â빫¿ª£¬¿ÉÒÆÖ²ÐÔÇ¿£¬¿É¹Ì»¯£¬¿É¼ô²Ã£¬Õ¼ÏÈʽ£¬¶àÈÎÎñ£¬¿ÉÈ·¶¨ÐÔ£¬Ìṩϵͳ·þÎñµÈ¡£

4£®¾ÙÀý˵Ã÷ǶÈëʽÉ豸ÔÚ¹¤¿ØÉ豸ÖеÄÓ¦Óᣠ´ð£ºÓÉÓÚ¹¤Òµ¿ØÖÆÏµÍ³ÌرðÇ¿µ÷¿É¿¿ÐÔºÍʵʱÐÔ£¬¡°Á¿Éí¶¨×ö¡±µÄǶÈëʽ¿ØÖÆÏµÍ³Ç¡ÄÜÂú×㹤ҵ¿ØÖƵÄÐèÇó¡£ÀýÈ磺¹¤Òµ¹ý³Ì¿ØÖÆ£¬Êý×Ö¿ØÖÆ»ú´²£¬µçÍøÉ豸¼à²â£¬µçÁ¦×Ô¶¯¿ØÖÆÏµÍ³£¬Ê¯ÓÍ»¯¹¤¼à¿ØµÈ¡£

5£®Ç¶Èëʽ¼¼ÊõµÄ·¢Õ¹Ç÷ÊÆÓÐÄÄЩ£¿

´ð£ºÎ´À´Ç¶ÈëʽϵͳµÄ·¢Õ¹Ç÷ÊÆÓУº1.Ëæ×ÅÐÅÏ¢»¯ÓëÊý×Ö»¯µÄ·¢Õ¹£¬Ç¶ÈëʽÉ豸½øÐÐÍøÂ绥ÁªÊÇδÀ´·¢Õ¹µÄÇ÷ÊÆ¡£2.ÓÅ»¯Ç¶ÈëʽϵͳÈíÓ²¼þÄںˣ¬Ìá¸ßϵͳÔËÐÐËÙ¶È£¬½µµÍ¹¦ºÄºÍÓ²¼þ³É±¾¡£3.Ö¸ÁµÄ²¢ÐмÆËã¼¼Êõ½«ÒýÈëǶÈëʽ΢´¦ÀíÆ÷¡£4.ǶÈëʽ΢´¦ÀíÆ÷½«»áÏò¶àºË¼¼Êõ·¢Õ¹¡£5.ǶÈëʽ¼¼Êõ½«ÒýÁìÐÅϢʱ´ú¡£

µÚ2Õ ARM¼¼ÊõÓëARMÌåϵ½á¹¹

1.¼òÊöARM´¦ÀíÆ÷Äں˵÷ÊԽṹԭÀí

´ð£ºARM´¦ÀíÆ÷Ò»°ã¶¼´øÓÐǶÈëʽ׷×ٺ굥ԪETM£¨Embedded Trace Macro£©£¬ËüÊÇARM¹«Ë¾×Ô¼ºÍƳöµÄµ÷ÊÔ¹¤¾ß¡£ARM´¦ÀíÆ÷¶¼Ö§³Ö»ùÓÚJTAG£¨Joint Test Action Group ÁªºÏ²âÊÔÐж¯Ð¡×飩µÄµ÷ÊÔ·½·¨¡£ËüÀûÓÃоƬÄÚ²¿µÄEmbedded ICEÀ´¿ØÖÆARMÄں˲Ù×÷£¬¿ÉÍê

³Éµ¥²½µ÷ÊԺͶϵãµ÷ÊԵȲÙ×÷¡£µ±CPU´¦Àíµ¥²½Ö´ÐÐÍê±Ï»òµ½´ï¶Ïµã´¦Ê±£¬¾Í¿ÉÒÔÔÚËÞÖ÷»ú¶Ë²é¿´´¦ÀíÆ÷ÏÖ³¡Êý¾Ý£¬µ«ÊÇËü²»ÄÜÔÚCPUÔËÐйý³ÌÖжÔʵʱÊý¾Ý½øÐзÂÕæ¡£

ETM½â¾öÁËÉÏÊöÎÊÌ⣬Äܹ»ÔÚCPUÔËÐйý³ÌÖÐʵʱɨÃè´¦ÀíÆ÷µÄÏÖ³¡ÐÅÏ¢£¬²¢Êý¾ÝËÍÍùTAP£¨Test Access Port£©¿ØÖÆÆ÷¡£ÉÏͼÖзÖΪÈýÌõɨÃèÁ´£¨Í¼ÖеĴÖʵÏߣ©£¬·Ö±ðÓÃÀ´¼àÊÓARMºË£¬ETM£¬Ç¶ÈëʽICEµÄ״̬¡£

2. ·ÖÎöARM7TDMI-S¸÷×ÖĸËù´ú±íµÄº¬Òå¡£ ´ð£ºARM7 T D M I ¨C S ÖÐ

ARMÊÇAdvanced RISC MachinesµÄËõд 7ÊÇϵÁкţ»

T£ºÖ§³Ö¸ßÃܶÈ16λµÄThumbÖ¸Á£» D£ºÖ§³ÖJTAGƬÉϵ÷ÊÔ£»

M£ºÖ§³ÖÓÃÓÚ³¤³Ë·¨²Ù×÷£¨64λ½á¹û£©ARMÖ¸Á°üº¬¿ìËٳ˷¨Æ÷£»£» I£º´øÓÐǶÈëʽ׷×ٺ굥ԪETM£¬ÓÃÀ´ÉèÖöϵãºÍ¹Û²ìµãµÄµ÷ÊÔÓ²¼þ£»

S£º¿É×ۺϰ汾£¬Òâζ×Å´¦ÀíÆ÷ÄÚºËÊÇÒÔÔ´´úÂëÐÎʽÌṩµÄ¡£ÕâÖÖÔ´´úÂëÐÎʽÓÖ¿ÉÒÔ±àÒë³ÉÒ»ÖÖÒ×ÓÚEDA¹¤¾ßʹÓõÄÐÎʽ¡£

3. ARM´¦ÀíÆ÷µÄ¹¤×÷ģʽÓÐÄļ¸ÖÖ£¬ÆäÖÐÄÄÐ©ÎªÌØÈ¨Ä£Ê½£¬ÄÄЩΪÒ쳣ģʽ£¬²¢Ö¸³ö´¦

ÀíÆ÷ÔÚʲôÇé¿öϽøÈëÏàÓ¦µÄģʽ¡£

´ð£ºARM¼¼ÊõµÄÉè¼ÆÕß½«ARM´¦ÀíÆ÷ÔÚÓ¦ÓÃÖпÉÄܲúÉúµÄ״̬½øÐÐÁË·ÖÀ࣬²¢Õë¶ÔͬһÀàÐ͵ÄÒ쳣״̬É趨ÁËÒ»¸ö¹Ì¶¨µÄÈë¿Úµã£¬µ±Òì³£²úÉúʱ£¬³ÌÐò»á×Ô¶¯Ìø×ªµ½¶ÔÓ¦Òì³£Èë¿Ú´¦½øÐÐÒì³£·þÎñ¡£

? 1£®Óû§Ä£Ê½£º·ÇÌØÈ¨Ä£Ê½£¬Ò²¾ÍÊÇÕý³£³ÌÐòÖ´ÐеÄģʽ£¬´ó²¿·ÖÈÎÎñÔÚÕâÖÖģʽÏÂ

Ö´ÐС£ÔÚÓû§Ä£Ê½Ï£¬Èç¹ûûÒì³£·¢Éú£¬²»ÔÊÐíÓ¦ÓóÌÐò×ÔÐиı䴦ÀíÆ÷µÄ¹¤×÷ģʽ£¬Èç¹ûÓÐÒì³£·¢Éú£¬´¦ÀíÆ÷»á×Ô¶¯Çл»¹¤×÷ģʽ

? 2£®FIQģʽ£ºÒ²³ÆÎª¿ìËÙÖжÏģʽ£¬Ö§³Ö¸ßËÙÊý¾Ý´«ÊäºÍͨµÀ´¦Àí£¬µ±Ò»¸ö¸ßÓÅÏÈ

¼¶(fast)ÖжϲúÉúʱ½«»á½øÈëÕâÖÖģʽ¡£

? 3£®IRQģʽ£ºÒ²³ÆÎªÆÕͨÖжÏģʽ£¬:µ±Ò»¸öµÍÓÅÏȼ¶(normal)ÖжϲúÉúʱ½«»á½øÈë

ÕâÖÖģʽ¡£ÔÚÕâģʽϰ´ÖжϵĴ¦ÀíÆ÷·½Ê½ÓÖ·ÖΪÏòÁ¿ÖжϺͷÇÏòÁ¿ÖжÏÁ½ÖÖ¡£Í¨³£µÄÖжϴ¦Àí¶¼ÔÚIRQģʽϽøÐС£

? 4£®SVCģʽ£º³ÆÖ®Îª¹ÜÀíģʽ£¬ËüÊÇÒ»ÖÖ²Ù×÷ϵͳ±£»¤Ä£Ê½¡£µ±¸´Î»»òÈíÖжÏÖ¸

ÁîÖ´ÐÐʱ´¦ÀíÆ÷½«½øÈëÕâÖÖģʽ¡£

? 5£®ÖÐֹģʽ£ºµ±´æÈ¡Ò쳣ʱ½«»á½øÈëÕâÖÖģʽ£¬ÓÃÀ´´¦Àí´æ´¢Æ÷¹ÊÕÏ¡¢ÊµÏÖÐéÄâ´æ

?

? ?

?

´¢»ò´æ´¢±£»¤¡£

6£®Î´¶¨ÒåÖ¸ÁîÒ쳣ģʽ£ºµ±Ö´ÐÐ䶨ÒåÖ¸Áîʱ»á½øÈëÕâÖÖģʽ£¬Ö÷ÒªÊÇÓÃÀ´´¦Àí䶨ÒåµÄÖ¸ÁîÏÝÚ壬֧³ÖÓ²¼þЭ´¦ÀíÆ÷µÄÈí¼þ·ÂÕæ£¬ÒòΪ䶨ÒåÖ¸Áî¶à·¢ÉúÔÚ¶ÔЭ´¦ÀíÆ÷µÄ²Ù×÷ÉÏ¡£

7£®ÏµÍ³Ä£Ê½£ºÊ¹ÓúÍUserģʽÏàͬ¼Ä´æÆ÷×éµÄÌØÈ¨Ä£Ê½£¬ÓÃÀ´ÔËÐÐÌØÈ¨¼¶µÄ²Ù×÷ϵͳÈÎÎñ¡£

ÔÚÕâ7ÖÖ¹¤×÷ģʽÖУ¬³ýÁËÓû§Ä£Ê½ÒÔÍ⣬ÆäËû6ÖÖ´¦ÀíÆ÷ģʽ¿ÉÒÔ³ÆÎªÌØÈ¨Ä£Ê½£¬ÔÚÕâЩģʽÏ£¬³ÌÐò¿ÉÒÔ·ÃÎÊËùÓеÄϵͳ×ÊÔ´£¬Ò²¿ÉÒÔÈÎÒâµØ½øÐд¦ÀíÆ÷ģʽµÄÇл»¡£

ÔÚÕâ6ÖÖÌØÈ¨Ä£Ê½ÖУ¬³ýÁËϵͳģʽÍâµÄÆäËû5ÖÖÌØÈ¨Ä£Ê½ÓÖ³ÆÎªÒ쳣ģʽ£¬Ã¿ÖÖÒì³£¶¼¶ÔÓ¦ÓÐ×Ô¼ºµÄÒì³£´¦ÀíÈë¿Úµã¡£

4. ·ÖÎö³ÌÐò״̬¼Ä´æÆ÷£¨PSR£©¸÷λµÄ¹¦ÄÜÃèÊö£¬²¢ËµÃ÷C,Z,N,VÔÚʲôÇé¿öϽøÐÐÖÃλ

ºÍÇåÁã¡£ ´ð£º

? Ìõ¼þλ£º

? N = 1-½á¹ûΪ¸º, 0-½á¹ûΪÕý»ò0 ? Z = 1-½á¹ûΪ0, 0-½á¹û²»Îª0 ? C =1-½øÎ»£¬ 0-½èλ

? V =1-½á¹ûÒç³ö£¬ 0½á¹ûûÒç³ö

? Q λ£º

? ½öARM 5TE/J¼Ü¹¹Ö§³Ö

? ָʾÔöÇ¿ÐÍDSPÖ¸ÁîÊÇ·ñÒç³ö

? ÖжϽûֹλ£º

? I = 1: ½ûÖ¹ IRQ. ? F = 1: ½ûÖ¹ FIQ.

? T Bit

? ½öARM xT¼Ü¹¹Ö§³Ö

? T = 0: ´¦ÀíÆ÷´¦ÓÚ ARM ״̬ ? T = 1: ´¦ÀíÆ÷´¦ÓÚ Thumb ״̬

? Modeλ(´¦ÀíÆ÷ģʽλ):

? 0b10000 User ? 0b10001 FIQ ? 0b10010 IRQ

? 0b10011 Supervisor ? 0b10111 Abort

? 0b11011 ? 0b11111 Undefined System

5. ¼òÊöARM´¦ÀíÆ÷Òì³£´¦ÀíºÍ³ÌÐò·µ»ØµÄ¹ý³Ì¡£ ´ð£ºÖ»ÒªÕý³£µÄ³ÌÐòÁ÷±»ÔÝʱÖÐÖ¹£¬´¦ÀíÆ÷¾Í½øÈëÒ쳣ģʽ¡£ÀýÈçÏìÓ¦Ò»¸öÀ´×ÔÍâÉèµÄÖжϡ£ÔÚ´¦ÀíÒ쳣֮ǰ£¬ARM7TDMIÄں˱£´æµ±Ç°µÄ´¦ÀíÆ÷״̬£¬ÕâÑùµ±´¦Àí³ÌÐò½áÊøÊ±¿ÉÒÔ»Ö¸´Ö´ÐÐÔ­À´µÄ³ÌÐò¡£Èç¹ûͬʱ·¢ÉúÁ½¸ö»ò¸ü¶àÒì³££¬ÄÇô½«°´Õչ̶¨µÄ˳ÐòÀ´´¦ÀíÒì³£¡£

Òì³£»òÈë¿Ú ·µ»ØÖ¸Áî ´¦ÀíÆ÷ģʽ ÓÅÏȼ¶ BL SWI MOV PC,R14 6 6 5 3 4 2 1 0x00000008 0x00000004 0x0000000C 0x0000001C 0x00000018 0x00000010 0x00000000 ÏòÁ¿±íÆ«ÒÆ MOVS PC,R14_svc SVC 䶨ÒåµÄÖ¸Áî MOVS PC,R14_und UND ԤȡָÖÐÖ¹ ¿ìÖÐ¶Ï ÖÐ¶Ï Êý¾ÝÖÐÖ¹ ¸´Î» SUBS PC,R14_abt,#4 SUBS PC,R14_fiq,#4 SUBS PC,R14_irq,#4 SUBS PC,R14_abt,#8 ÎÞ ABT FIQ IRQ ABT SVC ÔÚÒì³£·¢Éúºó£¬ARM7TDMIÄں˻á×÷ÒÔϹ¤×÷£º 1.ÔÚÊʵ±µÄLRÖб£´æÏÂÒ»ÌõÖ¸ÁîµÄµØÖ· 2.½«CPSR¸´ÖƵ½Êʵ±µÄSPSRÖУ»

3. ½«CPSRÄ£Ê½Î»Ç¿ÖÆÉèÖÃΪÓëÒì³£ÀàÐÍÏà¶ÔÓ¦µÄÖµ£» 4.Ç¿ÖÆPC´ÓÏà¹ØµÄÒì³£ÏòÁ¿´¦È¡Ö¸¡£

ARM7TDMIÄÚºËÔÚÖжÏÒ쳣ʱÖÃλÖжϽûÖ¹±êÖ¾£¬ÕâÑù¿ÉÒÔ·ÀÖ¹²»ÊÜ¿ØÖƵÄÒ쳣ǶÌס£ ×¢£ºÒì³£×ÜÊÇÔÚARM״̬ÖнøÐд¦Àí¡£µ±´¦ÀíÆ÷´¦ÓÚThumb״̬ʱ·¢ÉúÁËÒì³££¬ÔÚÒì³£ÏòÁ¿µØÖ·×°ÈëPCʱ£¬»á×Ô¶¯Çл»µ½ARM״̬¡£ µ±Òì³£½áÊøÊ±£¬Òì³£´¦Àí³ÌÐò±ØÐ룺

1.½«LRÖеÄÖµ¼õÈ¥Æ«ÒÆÁ¿ºó´æÈëPC£¬Æ«ÒÆÁ¿¸ù¾ÝÒì³£µÄÀàÐͶøÓÐËù²»Í¬£» 2.½«SPSRµÄÖµ¸´ÖÆ»ØCPSR£»

3.ÇåÁãÔÚÈë¿ÚÖÃλµÄÖжϽûÖ¹±êÖ¾¡£

×¢£º»Ö¸´CPSRµÄ¶¯×÷»á½«T¡¢FºÍIλ×Ô¶¯»Ö¸´ÎªÒì³£·¢ÉúǰµÄÖµ¡£

6. ARM´¦ÀíÆ÷×ÖÊý¾ÝµÄ´æ´¢¸ñʽÓÐÄÄÁ½ÖÖ£¿²¢Ö¸³öÕâÁ½ÖÖ¸ñʽµÄÇø±ð¡£ ´ð£ºARM7TDMI´¦ÀíÆ÷¿ÉÒÔ½«´æ´¢Æ÷ÖеÄ×ÖÒÔÏÂÁиñʽ´æ´¢

? ´ó¶Ë¸ñʽ£¨Big-endian£© ? С¶Ë¸ñʽ£¨Little-endian£©

? С¶Ë´æ´¢Æ÷ϵͳ£º ÔÚС¶Ë¸ñʽÖУ¬¸ßλÊý×Ö´æ·ÅÔÚ¸ßλ×Ö½ÚÖС£Òò´Ë´æ´¢Æ÷ϵͳ×Ö½Ú0Á¬½Óµ½Êý¾ÝÏß7¡«0¡£

? ´ó¶Ë´æ´¢Æ÷ϵͳ£º ÔÚ´ó¶Ë¸ñʽÖУ¬¸ßλÊý×Ö´æ·ÅÔÚµÍλ×Ö½ÚÖС£Òò´Ë´æ´¢Æ÷ϵͳ×Ö½Ú0Á¬½Óµ½Êý¾ÝÏß31¡«24¡£

7. ·ÖÎö´øÓд洢Æ÷·ÃÎÊÖ¸ÁLDR£©µÄÁ÷Ë®ÏßÔËÐÐÇé¿ö£¬²¢ÓÃͼʾ˵Ã÷Á÷Ë®ÏßµÄÔËÐлúÖÆ¡£ ´ð£º´æ´¢Æ÷·ÃÎÊÖ¸ÁîLDR Á÷Ë®Ïß¾ÙÀý

ȡָµÄ´æ´¢Æ÷·ÃÎʺÍÖ´ÐеÄÊý¾Ý·¾¶Õ¼Óö¼ÊDz»¿Éͬʱ¹²ÏíµÄ×ÊÔ´£¬¶ÔÓÚ¶àÖÜÆÚÖ¸ÁîÀ´Ëµ£¬Èç¹ûÖ¸ÁÔÓÒÔÖÁÓÚ²»ÄÜÔÚµ¥¸öʱÖÓÖÜÆÚÄÚÍê³ÉÖ´Ðн׶Σ¬¾Í»á²úÉúÁ÷Ë®Ïß×èÈû¡£ ¶Ô´æ´¢Æ÷µÄ·ÃÎÊÖ¸ÁîLDRÊǷǵ¥ÖÜÆÚÖ¸Áî

LDRÖ¸ÁîµÄÖ´ÐУ¬·ÃÎÊ´æ´¢Æ÷£¬»ØÐ´¼Ä´æÆ÷£¨Õ¼ÓÃÁË3¸öÖÜÆÚ£©¡£Ôì³ÉÁËMOVÖ¸ÁîµÄÖ´Ðб»×è¶Ï¡£

8. ¼òÊöARM9µÄ5¼¶Á÷Ë®Ïßÿһ¼¶ËùÍê³ÉµÄ¹¦ÄܺÍʵÏֵIJÙ×÷¡£ ´ð£ºARM920ÔÚÖ¸Áî²Ù×÷ÉϲÉÓÃ5¼¶Á÷Ë®Ïß .

ȡָ£º´ÓÖ¸ÁîCacheÖжÁȡָÁî¡£ ÒëÂ룺¶ÔÖ¸Áî½øÐÐÒëÂ룬ʶ±ð³öÊǶÔÄĸö¼Ä´æÆ÷½øÐвÙ×÷²¢´ÓͨÓüĴæÆ÷ÖжÁÈ¡²Ù×÷Êý¡£ Ö´ÐУº½øÐÐALUÔËËãºÍÒÆÎ»²Ù×÷£¬Èç¹ûÊǶԴ洢Æ÷²Ù×÷µÄÖ¸ÁÔòÔÚALUÖмÆËã³öÒª·ÃÎʵĴ洢Æ÷µØÖ·¡£

´æ´¢Æ÷·ÃÎÊ£ºÈç¹ûÊǶԴ洢Æ÷·ÃÎʵÄÖ¸ÁÓÃÀ´ÊµÏÖÊý¾Ý»º³å¹¦ÄÜ£¨Í¨¹ýÊý¾ÝCache£©¡£ ¼Ä´æÆ÷»ØÐ´£º½«Ö¸ÁîÔËËã»ò²Ù×÷½á¹ûд»Øµ½Ä¿±ê¼Ä´æÆ÷ÖС£

9. ʲô½ÐÁ÷Ë®Ïß»¥Ëø£¿Ó¦ÈçºÎÀ´½â¾ö£¬¾ÙÀý˵Ã÷¡£

´ð£º»¥Ëø£ºµ±Ç°Ö¸ÁîµÄÖ´ÐÐÐèÒªÇ°ÃæÖ¸ÁîµÄÖ´Ðнá¹û£¬µ«Ç°ÃæµÄÖ¸ÁîûÓÐÖ´ÐÐÍê±Ï£¬ÒýÆðÁ÷Ë®Ïߵĵȴý¡£»¥Ëø·¢Éúʱ£¬Ó²¼þ»áÍ£Ö¹Ö¸ÁîµÄÖ´ÐУ¬Ö±µ½Êý¾Ý×¼±¸ºÃ¡£

Éϱ߳ÌÐòÖÐORRÖ¸ÁîÖ´ÐÐʱÐèҪʹÓÃLDRÖ¸Áî¼ÓÔØºóµÄR4¼Ä´æÆ÷£¬Òò´ËÔì³ÉÁËORRÖ¸ÁîµÄµÈ´ý¡£

±àÒëÆ÷ÒÔ¼°»ã±à³ÌÐòÔ±¿ÉÒÔͨ¹ýÖØÐÂÉè¼Æ´úÂëµÄ˳Ðò»òÕ߯äËû°ì·¨À´¼õÉÙ»¥ËøµÄÊýÁ¿¡£

µÚ3Õ ARMÖ¸ÁѰַ·½Ê½

1.ÔÚÖ¸Áî±àÂëÖУ¬Ìõ¼þÂëÕ¼¼¸Î»£¬×î¶àÓжàÉÙ¸öÌõ¼þ£¬¸÷¸öÌõ¼þÊÇÈçºÎÐγɵģ¿ ´ð£ºÌõ¼þÂëÕ¼4룬×î¶àÓÐ15¸öÌõ¼þ ²Ù×÷Âë 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 Ìõ¼þÖú¼Ç·û ±êÖ¾ EQ NE CS/HS CC/LO MI PL VS VC HI LS GE LT GT LE AL NV Z=1 Z=0 C=1 C=0 N=1 N=0 V=1 V=0 C=1,Z=0 C=0,Z=1 N=V N!=V Z=0,N=V Z=1,N!=V ÈκΠÈκΠº¬Òå ÏàµÈ ²»ÏàµÈ ÎÞ·ûºÅÊý´óÓÚ»òµÈÓÚ ÎÞ·ûºÅÊýСÓÚ ¸ºÊý ÕýÊý»òÁã Òç³ö ûÓÐÒç³ö ÎÞ·ûºÅÊý´óÓÚ ÎÞ·ûºÅÊýСÓÚ»òµÈÓÚ ÓзûºÅÊý´óÓÚ»òµÈÓÚ ÓзûºÅÊýСÓÚ ÓзûºÅÊý´óÓÚ ÓзûºÅÊýСÓÚ»òµÈÓÚ ÎÞÌõ¼þÖ´ÐÐ (Ö¸ÁîĬÈÏÌõ¼þ) ´Ó²»Ö´ÐÐ(²»ÒªÊ¹ÓÃ)

2. Ö¸ÁîÌõ¼þÂëÖУ¬V±ê־λÔÚʲôÇé¿öϲÅÄܵÈÓÚ1£¿ ´ð£ºV¡ªÒç³ö±ê־λ ¶ÔÓÚ¼Ó¼õ·¨ÔËËãÖ¸Áµ±²Ù×÷ÊýºÍÔËËã½á¹ûΪ¶þ½øÖƲ¹Âë±íʾµÄ´ø·ûºÅÊýʱ£¬V=1±íʾ·ûºÅ

λÒç³ö£¬ÆäËûÖ¸Áîͨ³£²»Ó°ÏìVλ¡£

3. ÔÚARMÖ¸ÁîÖУ¬Ê²Ã´ÊǺϷ¨µÄÁ¢¼´Êý£¿ÅжÏÏÂÃæ¸÷Á¢¼´ÊýÊÇ·ñºÏ·¨£¬Èç¹ûºÏ·¨Ôòд³öÔÚÖ¸ÁîÖеıàÂë¸ñʽ£¨Ò²¾ÍÊÇ8λ³£ÊýºÍ4Î»ÒÆÎ»Êý£© 0x5430 0x108 0x304 0x501 0xfb10000 0x334000 0x3FC000 0x1FE0000 0x5580000 0x7F800 0x39C000 0x1FE80000

´ð£ºÁ¢¼´Êý±ØÐëÓÉ1¸ö8λµÄ³£Êýͨ¹ý½øÐÐ32λѭ»·ÓÒÒÆÅ¼ÊýλµÃµ½£¬ÆäÖÐÑ­»·ÓÒÒÆµÄλÊýÓÉÒ»¸ö4λ¶þ½øÖƵÄÁ½±¶±íʾ¡£¼´Ò»¸ö8λµÄ³£Êýͨ¹ýÑ­»·ÓÒÒÆ2*rotate_4루¼´0,2,4£¬¡£¡£¡£30£©µÃµ½ 0X5430

0000,0000,0000,0000,0101,0100,0011,0000 ·Ç·¨Á¢¼´Êý 0X108

0000,0000,0000,0000,0000,0001,0000,1000 0x42Ñ­»·ÓÒÒÆ30λ £¨rotate_4=0xF£© 0X304

0000,0000,0000,0000,0000,0011,0000,0100 0xC1Ñ­»·ÓÒÒÆ30λ £¨rotate_4=0xF£© 0x501

0000,0000,0000,0000,0000,0101,0000,0001 ·Ç·¨Á¢¼´Êý 0xfb10000

0000,1111,1011,0001,0000,0000,0000,0000 ·Ç·¨Á¢¼´Êý 0x334000

0000,0000,0011,0011,0100,0000,0000,0000 0Xcd Ñ­»·ÓÒÒÆ18루rotate_4=0x9£© 0x3FC000

0000,0000,0011,1111,1100,0000,0000,0000 0XFF Ñ­»·ÓÒÒÆ18루rotate_4=0x9£© 0x1FE0000

0000,0001,1111,1110,0000,0000,0000,0000 ·Ç·¨Á¢¼´Êý 0x5580000

0000,0101,0101,1000,0000,0000,0000,0000 ·Ç·¨Á¢¼´Êý 0x7F800

0000,0000,0000,0111,1111,1000,0000,0000 ·Ç·¨Á¢¼´Êý 0x39C000

0000,0000,0011,1001,1100,0000,0000,0000 0XE7Ñ­»·ÓÒÒÆ18루rotate_4=0x9£© 0x1FE80000

0001,1111,1110,1000,0000,0000,0000,0000 ·Ç·¨Á¢¼´Êý

4.·ÖÎöÂß¼­ÓÒÒÆ£¬ËãÊõÓÒÒÆ£¬Ñ­»·ÓÒÒÆ£¬´øÀ©Õ¹µÄÑ­»·ÓÒÒÆËüÃǼäµÄ²î±ð¡£ ´ð£ºLSLÂß¼­×óÒÆ £º

3100

LSRÂß¼­ÓÒÒÆ £º

3100

ASRËãÊõÓÒÒÆ £º

310

RORÑ­»·ÓÒÒÆ £º

310

RRX´øÀ©Õ¹µÄÑ­»·ÓÒÒÆ£º

31C0

5.ARMÊý¾Ý´¦ÀíÖ¸Áî¾ßÌåµÄѰַ·½Ê½ÓÐÄÄЩ£¬Èç¹û³ÌÐò¼ÆÊýÆ÷PC×÷ΪĿ±ê¼Ä´æÆ÷£¬»á²úÉúʲô½á¹û£¿

´ð£ºÊý¾Ý´¦ÀíÖ¸ÁîѰַ·½Ê½¾ßÌå¿É·ÖΪ5ÖÖÀàÐÍ£º

1£©µÚ¶þ²Ù×÷ÊýΪÁ¢¼´Êý2£©µÚ¶þ²Ù×÷ÊýΪ¼Ä´æÆ÷3£©µÚ¶þ²Ù×÷ÊýΪ¼Ä´æÆ÷ÒÆÎ»·½Ê½ÇÒÒÆÎ»µÄλÊýΪһ¸ö5λÁ¢¼´Êý4£©µÚ¶þ²Ù×÷ÊýΪ¼Ä´æÆ÷ÒÆÎ»·½Ê½ÇÒÒÆÎ»ÊýÖµ·ÅÔڼĴæÆ÷ÖÐ5£©µÚ¶þ²Ù×÷Êýλ¼Ä´æÆ÷½øÐÐRRXÒÆÎ»µÃµ½¡£Èç¹ûPC £¨R15£©ÓÃ×÷Ä¿±ê¼Ä´æÆ÷£¬Ö¸Áî»á²úÉú²»¿ÉÔ¤ÖªµÄ½á¹û¡£

6.ÔÚLoad/StoreÖ¸ÁîѰַÖУ¬×Ö£¬ÎÞ·ûºÅ×Ö½ÚµÄLoad/StoreÖ¸ÁîѰַºÍ°ë×Ö£¬ÓзûºÅ×Ö½ÚѰַ£¬ÊÔ·ÖÎöËüÃÇÖ®¼äµÄ²î±ð¡£ ´ð£ºÔÚLoad/StoreÖ¸ÁîѰַÖУ¬

×Ö£¬ÎÞ·ûºÅ×Ö½ÚµÄLoad/StoreÖ¸ÁîѰַÖй²ÓÐÒÔÏÂ3ÖÖÄÚ´æµØÖ·¹¹³É¸ñʽ£º

1£©Addressing_mode ÖÐµÄÆ«ÒÆÁ¿ÎªÁ¢¼´Êý 2£©Addressing_mode ÖÐµÄÆ«ÒÆÁ¿Îª¼Ä´æÆ÷µÄÖµ 3£©Addressing_mode ÖÐµÄÆ«ÒÆÁ¿Í¨¹ý¼Ä´æÆ÷ÒÆÎ»µÃµ½

°ë×Ö£¬ÓзûºÅ×Ö½ÚµÄLoad/StoreÖ¸ÁîѰַÖй²ÓÐÒÔÏÂ2ÖÖÄÚ´æµØÖ·¹¹³É¸ñʽ£º

1£©Addressing_mode ÖÐµÄÆ«ÒÆÁ¿ÎªÁ¢¼´Êý 2£©Addressing_mode ÖÐµÄÆ«ÒÆÁ¿Îª¼Ä´æÆ÷µÄÖµ

7.¿é¿½±´Load/StoreÖ¸ÁîÔÚʵÏּĴæÆ÷×éºÏÁ¬ÐøµÄÄÚ´æµ¥ÔªÖÐÊý¾Ý´«µÝʱ£¬µØÖ·µÄ±ä»¯·½Ê½ÓÐÄļ¸ÖÖÀàÐÍ£¬²¢·ÖÎöËüÃǵĵØÖ·±ä»¯Çé¿ö¡£

´ð£ºÅúÁ¿Load/StoreÖ¸ÁîÔÚʵÏּĴæÆ÷×éºÏÁ¬ÐøµÄÄÚ´æµ¥ÔªÖÐÊý¾Ý´«µÝʱ£¬µØÖ·µÄ±ä»¯·½Ê½ÓÐÒÔÏÂ4ÖÖÀàÐÍ£º

? ºóÔöIA (Increment After) £ºÃ¿´ÎÊý¾Ý´«ËͺóµØÖ·¼Ó4£» ? ÏÈÔöIB (Increment Before) £ºÃ¿´ÎÊý¾Ý´«ËÍǰµØÖ·¼Ó4 £» ? ºó¼õDA (Decrement After) £ºÃ¿´ÎÊý¾Ý´«ËͺóµØÖ·¼õ4 £» ? ÏȼõDB (Decrement Before) £ºÃ¿´ÎÊý¾Ý´«ËÍǰµØÖ·¼õ4 £»

8.Õ»²Ù×÷Ö¸ÁîµØÖ·µÄ±ä»¯·½Ê½ÓÐÄļ¸ÖÖÀàÐÍ£¬²¢·ÖÎöËüÃǵĵØÖ·±ä»¯Çé¿ö£¬´Ó¶øµÃ³öÕ»²Ù×÷Ö¸ÁîѰַºÍ¿é¿½±´Load/StoreÖ¸ÁîÖ®¼äµÄ¶ÔÓ¦¹ØÏµ¡£

´ð£º¸ù¾Ý¶ÑÕ»Ö¸ÕëµÄÖ¸ÏòλÖò»Í¬ºÍ¶ÑÕ»µÄÉú³¤·½Ïò²»Í¬£¬¹²ÓÐ4ÖÖÀàÐ͵ĶÑÕ»¹¤×÷·½Ê½£º ÂúµÝÔö¶ÑÕ»FA£º¶ÑÕ»Ö¸ÕëÖ¸Ïò×îºóѹÈëµÄÊý¾Ý£¬ÇÒÓɵ͵ØÖ·Ïò¸ßµØÖ·Éú³É¡£ ÂúµÝ¼õ¶ÑÕ»FD£º¶ÑÕ»Ö¸ÕëÖ¸Ïò×îºóѹÈëµÄÊý¾Ý£¬ÇÒÓɸߵØÖ·ÏòµÍµØÖ·Éú³É¡£

¿ÕµÝÔö¶ÑÕ»EA£º¶ÑÕ»Ö¸ÕëÖ¸ÏòÏÂÒ»¸öÒª·ÅÈëÊý¾ÝµÄ¿ÕλÖã¬ÇÒÓɵ͵ØÖ·Ïò¸ßµØÖ·Éú³É¡£

¿ÕµÝ¼õ¶ÑÕ»ED£º¶ÑÕ»Ö¸ÕëÖ¸ÏòÏÂÒ»¸öÒª·ÅÈëÊý¾ÝµÄ¿ÕλÖã¬ÇÒÓɸߵØÖ·ÏòµÍµØÖ·Éú³É¡£

9.·ÖÎöЭ´¦ÀíÆ÷¼ÓÔØ/´æ´¢Ö¸ÁîµÄѰַ·½Ê½ÖÖµÄÄÚ´æµØÖ·Ë÷Òý¸ñʽÖв»Í¬µÄ»ã±àÓï·¨¸ñʽÏÂÄÚ´æµØÖ·µÄ¼ÆËã·½·¨¡£ ´ð£ºÐ­´¦ÀíÆ÷¼ÓÔØ/´æ´¢Ö¸ÁîµÄѰַ·½Ê½ÖÖµÄÄÚ´æµØÖ·Ë÷Òý¸ñʽÖУ¬Ë÷Òý¸ñʽÀàËÆÓÚLDR/STRÖ¸ÁîѰַÖеÄÁ¢¼´Êý×÷ΪµØÖ·Æ«ÒÆÁ¿µÄÐÎʽ¡£Addressing_modeÖÐµÄÆ«ÒÆÁ¿Îª8λÁ¢¼´ÊýµÄ»ã±àÓï·¨¸ñʽÓÐÒÔÏÂ3ÖÖ£º

? ǰ±äÖ·²»»ØÐ´ÐÎʽ£º[£¬#+/-*4 ]

µÚÒ»¸öÄÚ´æµØÖ·±àºÅΪ»ùµØÖ·¼Ä´æÆ÷RnÖµ¼ÓÉÏ/¼õÈ¥imm_offset8µÄ4±¶£¬ºóÐøµÄÿһ¸öµØÖ·ÊÇǰһ¸öÄÚ´æµØÖ·¼Ó4£¬Ö±µ½Ð­´¦ÀíÆ÷·¢³öÐźţ¬½áÊø±¾´ÎÊý¾Ý´«ÊäΪֹ¡£ ? ǰ±äÖ·»ØÐ´ÐÎʽ£º [£¬#+/-*4]£¡

µÚÒ»¸öÄÚ´æµØÖ·±àºÅΪ»ùµØÖ·¼Ä´æÆ÷RnÖµ¼ÓÉÏ/¼õÈ¥imm_offset8µÄ4±¶£¬ºóÐøµÄÿһ¸öµØÖ·ÊÇǰһ¸öÄÚ´æµØÖ·¼Ó4£¬Ö±µ½Ð­´¦ÀíÆ÷·¢³öÐźţ¬½áÊø±¾´ÎÊý¾Ý´«ÊäΪֹ¡£µ±Ö¸ÁîÖ´ÐÐʱ£¬Éú³ÉµÄµØÖ·Öµ½«Ð´Èë»ùÖ·¼Ä´æÆ÷¡£

? ºó±äÖ·»ØÐ´ÐÎʽ£º []£¬#+/-*4

ÄÚ´æµØÖ·Îª»ùÖ·¼Ä´æÆ÷RnµÄÖµ£¬µ±´æ´¢Æ÷²Ù×÷Íê³Éºó£¬½«»ùµØÖ·¼Ä´æÆ÷RnÖµ¼ÓÉÏ/¼õÈ¥imm_offset8µÄ4±¶£¬ºóÐøµÄÿһ¸öµØÖ·ÊÇǰһ¸öÄÚ´æµØÖ·¼Ó4£¬Ö±µ½Ð­´¦ÀíÆ÷·¢³öÐźţ¬½áÊø±¾´ÎÊý¾Ý´«ÊäΪֹ¡£×îºó½«RnÖµ¼ÓÉÏ/¼õÈ¥imm_offset8µÄ4±¶Ð´»Øµ½»ùÖ·¼Ä´æÆ÷Rn£¨¸üлùµØÖ·¼Ä´æÆ÷£©¡£

10. д³öÏÂÁÐÖ¸ÁîµÄ»úÆ÷Â룬²¢·ÖÎöÖ¸Áî²Ù×÷¹¦ÄÜ¡£ MOV R0£¬R1 MOV R1£¬,0X198

ADDEQS R1£¬R2£¬,0xAB CMP R2,#0Xab LDR R0,[R1,#4] STR R0,[R1,R1,LSL #2]! LDRH R0,[R1,#4] LDRSB R0,[R2,#-2]! STRB R1,[R2,#0Xa0]

LDMIA R0,{R1,R2,R8}

STMDB R0!,{R1-R5,R10,R11} STMED SP!{R0-R3,LR} ´ð£º»úÆ÷Â벿·ÖÂÔ¡£

MOV R0£¬R1 £»R0¡¶-----R1 MOV R1£¬,0X198 £»R0¡¶----0X198

ADDEQS R1£¬R2£¬,0xAB £»µ±Z=1ʱ£¬R1¡¶---R2+0xAB ²¢Ó°Ïì±ê־λ CMP R2,#0Xab £»R2-0xAB£¬²¢Ó°Ïì±ê־λ LDR R0,[R1,#4] £»R0¡¶---¡¾R1+4¡¿ STR R0,[R1,R1,LSL #2]! £»¡¾R1+R1*4¡¿¡¶---R0£¬R1=R1+R1*4

LDRH R0,[R1,#4] £»R0¡¶---¡¾R1+4¡¿°ë×Ö£¬R0µÄ¸ß16λÇåÁã

LDRSB R0,[R2,#-2]! £»R0¡¶---¡¾R2-2¡¿×Ö½Ú£¬R0ÓзûºÅÀ©Õ¹Îª32룬R2=R2-2 STRB R1,[R2,#0Xa0] £»¡¾R2+0Xa0¡¿¡¶----R1µÍ8룬 LDMIA R0,{R1,R2,R8}

£»½«ÄÚ´æµ¥Ôª¡¾R0¡¿~¡¾R+11¡¿ÒÔ×ÖΪµ¥Î»¶ÁÈ¡µ½R1£¬R2£¬R8ÖÐ STMDB R0!,{R1-R5,R10,R11}

½«¼Ä´æÆ÷R1~R5£¬R10£¬R11µÄÖµÒÔ×ÖΪµ¥Î»ÒÀ´ÎдÈ롾R0¡¿ÖУ¬Ã¿Ð´Ò»¸ö×Ö֮ǰR0=R0-4 STMED SP!{R0-R3,LR}

½«¼Ä´æÆ÷R0~R3£¬LRµÄµÄÖµÒÔ×ÖΪµ¥Î»ÒÀ´ÎдÈ롾SP¡¿ÖУ¬Ã¿Ð´Ò»¸ö×ÖÖ®ºóSP=SP-4

µÚ4Õ ARMÖ¸Áϵͳ

1.ARMÖ¸Áî¿É·ÖΪÄļ¸Àࣿ˵³öÄļ¸ÌõÖ¸ÁîÊÇÎÞÌõ¼þÖ´Ðеġ£

´ð£ºARM΢´¦ÀíÆ÷µÄÖ¸Á¿ÉÒÔ·ÖΪ£ºÊý¾Ý´¦ÀíÖ¸Á·ÖÖ§Ö¸Á¼ÓÔØ/´æ´¢Ö¸ÁÅúÁ¿¼ÓÔØ/´æ´¢Ö¸Á½»»»Ö¸Á³ÌÐò״̬¼Ä´æÆ÷£¨PSR£©´¦ÀíÖ¸ÁЭ´¦ÀíÆ÷²Ù×÷Ö¸ÁîºÍÒì³£²úÉúÖ¸Áî°Ë´óÀà¡£

¼¸ºõËùÓеÄARMÖ¸Áî¶¼ÊÇ¿ÉÒÔÓÐÌõ¼þÖ´Ðеġ£´øÁ´½ÓºÍ״̬Çл»µÄÌø×ªÖ¸ÁîBLX£¬µ±Ä¿±êµØÖ·ÓɳÌÐò±êºÅ¸ø³öʱ£¬¼´£ºBLX

ÓÉÓÚÖ¸ÁîÂëÖÐÊÇûÓÐÌõ¼þ±àÂëλµÄ£¬ËùÒÔÖ¸ÁîÊÇÎÞÌõ¼þÖ´Ðеġ£

2.ÈçºÎʵÏÖÁ½¸ö64λÊýµÄ¼Ó·¨²Ù×÷£¬ÈçºÎʵÏÖÁ½¸ö64λÊýµÄ¼õ·¨²Ù×÷£¬ÈçºÎÇóÒ»¸ö64λÊýµÄ¸ºÊý£¿

´ð£º1£©Ê¹ÓÃADCʵÏÖ64λ¼Ó·¨£¬½á¹û´æÓÚR1¡¢R0ÖУº

ADDS R0,R0,R2 ;R0µÈÓÚµÍ32λÏà¼Ó£¬²¢Ó°Ïì±ê־λ ADC R1,R1,R3 ;R1µÈÓÚ¸ß32λÏà¼Ó£¬²¢¼ÓÉϵÍλ½øÎ»

2£©Ê¹ÓÃSBCʵÏÖ64λ¼õ·¨£¬½á¹û´æÓÚR1¡¢R0ÖУº SUBS R0,R0,R2 ; µÍ32λÏà¼õ£¬²¢Ó°Ïì±ê־λ SBC R1,R1,R3 ;¸ß32λÏà¼õ£¬²¢¼õÈ¥µÍλ½èλ

3£©Ê¹ÓÃRSCÖ¸ÁîʵÏÖÇó64λÊýÖµµÄ¸ºÊý £º RSBS R2,R0,#0 RSC R3,R1,#0

3.д³öLDRBÖ¸ÁîÓëLDRSBÖ¸ÁîµÄ¶þ½øÖƱàÂë¸ñʽ£¬²¢Ö¸³öËüÃÇÖ®¼äµÄÇø±ð¡£ ´ð£ºLDRBÖ¸ÁîµÄ¶þ½øÖƱàÂë¸ñʽ£º

LDRSBÖ¸ÁîµÄ¶þ½øÖƱàÂë¸ñʽ£º

LDRBÖ¸ÁîÓÃÓÚ½«ÄÚ´æÖеÄÒ»¸ö8λ×Ö½ÚÊý¾Ý¶ÁÈ¡µ½Ö¸ÁîÖеÄÄ¿±ê¼Ä´æÆ÷µÄµÍ8λÖУ¬¼Ä´æÆ÷µÄ¸ß24λÓÃÁãÀ©Õ¹¡£

LDRSBÖ¸ÁîÓÃÓÚ½«ÄÚ´æÖеÄÒ»¸ö8λ×Ö½ÚÊý¾Ý¶ÁÈ¡µ½Ö¸ÁîÖеÄÄ¿±ê¼Ä´æÆ÷µÄµÍ8λÖУ¬¼Ä´æÆ÷µÄ¸ß24λÓ÷ûºÅλÀ©Õ¹¡£

4.·ÖÎöÏÂÁÐÿÌõÓï¾äµÄ¹¦ÄÜ£¬²¢È·¶¨³ÌÐò¶ÎËùʵÏֵIJÙ×÷¡£ CMP R0£¬,0 MOVEQ R1£¬,0 MOVGT R1£¬,1

´ð£ºCMP R0£¬,0 £»±È½ÏR0Óë0µÄ´óС

MOVEQ R1£¬,0 £»ÈôR0==0£¬ÔòR1=0 MOVGT R1£¬,1 £»ÈôR0>0£¬ÔòR1=1

5.ÇëʹÓöàÖÖ·½·¨ÊµÏÖ½«×ÖÊý¾Ý0xFFFFFFFFËÍÈë¼Ä´æÆ÷R0 ´ð£º1£©MVN R0£¬#0 2£©MOV R0£¬#1

RSB R0£¬R0£¬#0

6.дһÌõARMÖ¸Á·Ö±ðÍê³ÉÏÂÁвÙ×÷£º (1)R0=16 (2)R0=R1/16 (3)R1=R2*3 (4)R0=-R0 ´ð£º

(1)R0=16 MOV R0£¬#16 (2)R0=R1/16 MOV R0£¬R1£¬LSR #4 (3)R1=R2*3 MOV R3£¬#3 MUL R1£¬R2£¬R3 (4)R0=-R0 RSB R0£¬R0£¬#0

7.±àдһ¸öARM»ã±à³ÌÐò£¬ÀÛ¼ÓÒ»¸ö¶ÓÁÐÖеÄËùÓÐÔªËØ£¬Åöµ½0ʱֹͣ¡£½á¹û·ÅÈëR4¡£ ´ð£º¼ÙÉè¶ÓÁÐΪµØÖ·´ÓR0¿ªÊ¼µÝÔöµÄ×Ö¶ÓÁУº LOOP

LDR R1, [R0,#4]! MOVS R2, R1 BEQ END

ADD R4,R4,R2 B LOOP

END

8.д³öʵÏÖÏÂÁвÙ×÷µÄARMÖ¸Á

µ±Z=1ʱ£¬½«´æ´¢Æ÷µØÖ·ÎªR1µÄ×ÖÊý¾Ý¶ÁÈë¼Ä´æÆ÷R0. µ±Z=1ʱ£¬½«´æ´¢Æ÷µØÖ·ÎªR1+R2µÄ×ÖÊý¾Ý¶ÁÈë¼Ä´æÆ÷R0 ½«´æ´¢Æ÷µØÖ·ÎªR1-4µÄ×ÖÊý¾Ý¶ÁÈë¼Ä´æÆ÷R0¡£

½«´æ´¢Æ÷µØÖ·ÎªR1+R6µÄ×ÖÊý¾Ý¶ÁÈë¼Ä´æÆ÷R0£¬²¢½«ÐµØÖ·R1+R6дÈëR1¡£ ´ð£º1)LDREQ R0, [R1] 2)LDREQ R0, [R1,R2] 3)LDR R0, [R1,#-4] 4)LDR R0, [R1,R6]!

9.д³öÏÂÁÐARMÖ¸ÁîËùʵÏֵIJÙ×÷£º LDR R2£¬[R3£¬#-4]! LDR R0£¬[R0],R2 LDR R1£¬[R3£¬R2£¬LSL #2]! LDRSB R0£¬[R2£¬#-2]! STRB R1£¬[R2£¬,0xA0] LDMIA R0,{R1,R2,R8}

STMDB R0!,{R1-R5,R10,R11} ´ð£ºLDR R2£¬[R3£¬#-4]! ;R2<-[R3-4], R3=R3-4

LDR R0£¬[R0],R2 ;R0<-[R0], R0=R0+R2 LDR R1£¬[R3£¬R2£¬LSL #2]! ;R1<-[R3+R2*4], R3=R3+R2*4 LDRSB R0£¬[R2£¬#-2]!

;R0µÍ8λ<-[R2-2]×Ö½ÚÊý¾Ý,£¬R0¸ß24λ·ûºÅÀ©Õ¹£¬R2=R2-2 STRB R1£¬[R2£¬#0xA0] R1µÍ8λ->¡¾R2+0xA0¡¿ LDMIA R0,{R1,R2,R8}

´ÓµØÖ·R0¿ªÊ¼µÄÄÚ´æÖÐÒÀ´Î¶ÁÈ¡×ÖÊý¾Ý£¬ËÍÈë¼Ä´æÆ÷R1£¬R2£¬R8 STMDB R0!,{R1-R5,R10,R11}

½«¼Ä´æÆ÷R11£¬R10£¬R5-R1µÄ×ÖÊý¾Ý£¬ÒÀ´ÎдÈëµØÖ·R0ÖУ¬Ã¿´ÎдÈëǰR0=R0-4

10.SWPÖ¸ÁîµÄÓÅÊÆÊÇʲô£¿

´ð£ºSWPÖ¸ÁîÖ§³ÖÔ­×Ó²Ù×÷£¬ËüÄÜÔÚÒ»ÌõÖ¸ÁîÖÐÍê³É´æ´¢Æ÷ºÍ¼Ä´æÆ÷Ö®¼äµÄÊý¾Ý½»»»¡£

11. ÈçºÎÓôøPSR²Ù×÷µÄÅúÁ¿×ÖÊý¾Ý¼ÓÔØÖ¸ÁîʵÏÖIRQÖжϵķµ»Ø£¿

´ð£ºÔÚ½øÈëIRQÖжϴ¦Àí³ÌÐòʱ£¬Ê×ÏȼÆËã·µ»ØµØÖ·£¬²¢±£´æÏà¹ØµÄ¼Ä´æÆ÷

? SUB R14,R14,#4 ;

? STMFD R13!, {R0-R3, R12, LR}

Èç¹ûIRQÖжϴ¦Àí³ÌÐò·µ»Øµ½±»ÖжϵĽø³ÌÔòÖ´ÐÐÏÂÃæµÄÖ¸Áî¡£¸ÃÖ¸Áî´ÓÊý¾ÝÕ»Öлָ´¼Ä´æÆ÷R0~R3¼°R12µÄÖµ£¬½«·µ»ØµØÖ·´«Ë͵½PCÖУ¬²¢½«SPSR_irqÖµ¸´ÖƵ½CPSR

ÖÐ

? LDMFD R13!, {R0-R3, R12, PC}^

12. ÓÃARM»ã±àÓïÑÔ±àд´úÂ룬ʵÏÖ½«ARM´¦ÀíÆ÷Çл»µ½Óû§Ä£Ê½£¬²¢¹Ø±ÕÖжϡ£ ´ð

£º

£»½ûÄÜIRQÖÐ¶Ï MRS R0 CPSR ORR R0, R0,#0x80

MSR CPSR, R0 £»Çл»µ½Óû§Ä£Ê½ MRS R0 CPSR BIC R0, #0x0F

MSR CPSR, R0

µÚ5Õ ThumbÖ¸Áî

1.Óë32λµÄARMÖ¸ÁÏà±È½Ï£¬16λµÄThumbÖ¸Á¾ßÓÐÄÄЩÓÅÊÆ£¿

´ð£ºÔÚARMÌåϵ½á¹¹ÖУ¬ARMÖ¸ÁÊÇ32λµÄ£¬¾ßÓкܸߵÄÖ´ÐÐЧÂÊ¡£µ«ÊǶÔÓÚǶÈëʽ ¶øÑÔ£¬Æä´æ´¢¿Õ¼ä¼«ÆäÓÐÏÞ£¬ÓÉÓÚÿÌõARMÖ¸Áî¶¼ÒªÕ¼ÓÃ4¸ö×Ö½Ú£¬¶Ô´æ´¢¿Õ¼äµÄÒªÇó½Ï¸ß¡£ÎªÁËѹËõ´úÂëµÄ´æ´¢£¬Ôö¼Ó´úÂë´æ´¢Ãܶȣ¬ARM¹«Ë¾Éè¼ÆÁË16λµÄThumbÖ¸Áî¡£Thumb´úÂëËùÐèµÄ´æ´¢¿Õ¼äԼΪARM´úÂëµÄ60%~70%¡£

2.ThumbÖ¸Áî¿É·ÖΪÄļ¸ÀࣿThumbÖ¸ÁîÓÐÌõ¼þÖ´ÐÐÖ¸ÁîÂð£¬Èç¹ûÓÐÇë˵Ã÷ÄÄЩָÁîÊÇÌõ¼þÖ´Ðеġ£

´ð£ºThumbÖ¸Áî¿É·ÖΪÊý¾Ý´¦ÀíÖ¸Á´æ´¢Æ÷²Ù×÷Ö¸Á·ÖÖ§Ö¸ÁÈíÖжÏÖ¸Áî¡£ ThumbÖ¸ÁֻÓÐÒ»Ìõ·ÖÖ§Ö¸ÁîÊÇÓÐÌõ¼þµÄ£¬ÆäÓàËùÓÐÖ¸Áî¶¼ÊÇÎÞÌõ¼þµÄ£» B{cond} label

3.·ÖÎöÏÂÃæµÄThumbÖ¸Áî³ÌÐò´úÂ룬ָ³ö³ÌÐòËùÍê³ÉµÄ¹¦ÄÜ¡£ .global _start .text

.equ num 20 _start: MOV SP,#0x400 ADR R0,Thumb_start+1 BX R0 .thumb

Thumb_start: ASR R2,R0,#31 EOR R0,R2 SUB R3,R0,R2 stop:

B stop .end

´ð£ºÉÏÊö´úÂëÊ×ÏȽ«´¦ÀíÆ÷״̬Çл»µ½Thumb״̬£¬

ASR R2,R0,#31 ; ÓÃR0µÄ·ûºÅλÌî³äR2 EOR R0,R2 £»Èç¹ûR0ΪÕýÊý£¬ÔòR0²»±ä£»Èç¹ûR0Ϊ¸ºÊý£¬ÔòR0È¡·´ SUB R3,R0,R2 £»R0-R2->R3 (R2ΪȫÁã»òÈ«1)

4.ÔÚThumb״̬ÖУ¬ÓöàÖÖ·½·¨ÊµÏÖ½«¼Ä´æÆ÷R0ÖеÄÊý¾Ý³ËÒÔ10 ´ð£º1£©MOV R1£¬#10 MUL R0,R1

2) LSL R1£¬R0,#3

LSL R2£¬R0,#1 ADD R0,R1,R2

5.´øÁ´½ÓµÄ·ÖÖ§Ö¸ÁîBLÌṩÁËÒ»ÖÖÔÚThumb״̬ϳÌÐò¼äÏ໥µ÷Óõķ½·¨£¬µ±´Ó×Ó³ÌÐò·µ»ØÊ±£¬¿ÉÒÔ²ÉÓÃÄÄÖÖ·µ»Ø·½Ê½£¿ ´ð£ºÍ¨³£Ê¹ÓÃÏÂÃæµÄ·½Ê½Ö®Ò»£º

MOV PC, LR BX LR

POP {PC} ;ÐèÒªÔÚ×Ó³ÌÐòÖÐʹÓÃPUSH {LR}

6.Ö¸³öÏÂÁеÄThumb³ÌÐò´úÂëËùÍê³ÉµÄ¹¦ÄÜ£º ASR R0,R1,#31 EOR R1,R0 SUB R1,R0 ´ð£ºASR R0,R1,#31 £»ÓÃR1µÄ·ûºÅλÌî³äR0

EOR R1,R0 £»Èç¹ûR1ΪÕýÊý£¬ÔòR1²»±ä£»Èç¹ûR1Ϊ¸ºÊý£¬ÔòR1È¡·´ SUB R1,R0 £»R1-R0->R1 (R0ΪȫÁã»òÈ«1)

µÚ6Õ ARM»ã±àαָÁîÓëα²Ù×÷

1.ÔÚARM»ã±àÓïÑÔ³ÌÐòÉè¼ÆÖУ¬Î±²Ù×÷ÓëαָÁîµÄÇø±ðÊÇʲô£¿

´ð£ºÎ±Ö¸ÁîÊÇARM´¦ÀíÆ÷Ö§³ÖµÄ»ã±àÓïÑÔ³ÌÐòÀïµÄÌØÊâÖú¼Ç·û£¬Ëü²»ÔÙ´¦ÀíÆ÷ÔËÐÐÆÚ¼äÓÉ»úÆ÷Ö´ÐУ¬Ö»ÊÇÔÚ»ã±àʱ±»ºÏÊʵĻúÆ÷Ö¸Áî´úÌæ³ÉARM»òThumbÖ¸Á´Ó¶øÊµÏÖÕæÕýµÄÖ¸Áî²Ù×÷¡£

α²Ù×÷ÊÇARM»ã±àÓïÑÔ³ÌÐòÀïµÄÒ»Ð©ÌØÊâµÄÖ¸ÁîÖú¼Ç·û£¬Æä×÷ÓÃÖ÷ÒªÊÇΪÁËÍê³É»ã±à³ÌÐò×ö¸÷ÖÖ×¼±¸¹¤×÷£¬¶ÔÔ´³ÌÐòÔËÐлã±à³ÌÐò´¦Àí£¬¶ø²»ÊÇÔÚ¼ÆËã»úÔËÐÐÆÚ¼äÓÉ´¦ÀíÆ÷Ö´ÐС£Ò²¾ÍÊÇ˵£¬ÕâЩα²Ù×÷Ö»ÊÇÔÚ»ã±à¹ý³ÌÖÐÆð×÷Óã¬Ò»µ©»ã±à½áÊø£¬Î±²Ù×÷Ò²¾ÍËæÖ®Ïûʧ¡£

2.·ÖÎöARM»ã±àÓïÑÔαָÁîLDR£¬ADRL£¬ADRµÄ»ã±à½á¹û£¬ËµÃ÷ËüÃÇÖ®¼äµÄÇø±ð¡£ ´ð£º LDRαָÁһ¸ö32λµÄ³£Êý»òÕßÒ»¸öµØÖ·Öµ¶ÁÈ¡µ½¼Ä´æÆ÷ÖУ¬¿ÉÒÔ¿´×÷ÊǼÓÔØ¼Ä´æÆ÷µÄÄÚÈÝ¡£Èç¹û¼ÓÔØµÄ³£Êý·ûºÏMOV»òMVNÖ¸ÁîÁ¢¼´ÊýµÄÒªÇó£¬ÔòÓÃMOV»òMVNÖ¸ÁîÌæ´úLDRαָÁî¡£Èç¹û¼ÓÔØµÄ³£Êý²»·ûºÏMOV»òMVNÖ¸ÁîÁ¢¼´ÊýµÄÒªÇ󣬻ã±àÆ÷½«³£Á¿·ÅÈëÄÚ´æÎÄ×ֳأ¬²¢Ê¹ÓÃÒ»Ìõ³ÌÐòÏà¶ÔÆ«ÒÆµÄLDRÖ¸Áî´ÓÄÚ´æÎÄ×ֳضÁ³ö³£Á¿¡£

ADRLαָÁ»ùÓÚPCÏà¶ÔÆ«ÒÆµÄµØÖ·Öµ»ò»ùÓڼĴæÆ÷Ïà¶ÔÆ«ÒÆµÄµØÖ·Öµ¶ÁÈ¡µ½

¼Ä´æÆ÷ÖУ¬±ÈADRαָÁî¿ÉÒÔ¶ÁÈ¡¸ü´ó·¶Î§µÄµØÖ· ¡£ÔÚ»ã±à±àÒëÆ÷±àÒëÔ´³ÌÐòʱ£¬ADRLαָÁî±»±àÒëÆ÷Ìæ»»³ÉÁ½ÌõºÏÊʵÄÖ¸Áî¡£Èô²»ÄÜÓÃÁ½ÌõÖ¸ÁîʵÏÖ£¬Ôò²úÉú´íÎ󣬱àÒëʧ°Ü¡£

ADRαָÁ»ùÓÚPCÏà¶ÔÆ«ÒÆµÄµØÖ·Öµ»ò»ùÓڼĴæÆ÷Ïà¶ÔÆ«ÒÆµÄµØÖ·Öµ¶ÁÈ¡µ½¼Ä

´æÆ÷ÖС£ÔÚ»ã±à±àÒëÆ÷±àÒëÔ´³ÌÐòʱ£¬ADRαָÁî±»±àÒëÆ÷Ìæ»»³ÉÒ»ÌõºÏÊʵÄÖ¸Áͨ³££¬±àÒëÆ÷ÓÃÒ»ÌõADDÖ¸Áî»òSUBÖ¸ÁîÀ´ÊµÏÖ¸ÃADRαָÁîµÄ¹¦ÄÜ£¬Èô²»ÄÜÓÃÒ»ÌõÖ¸ÁîʵÏÖ£¬Ôò²úÉú´íÎ󣬱àÒëʧ°Ü¡£

3.ÔÚADS±àÒë»·¾³Ï£¬Ð´³öÏÂÁвÙ×÷µÄα²Ù×÷£º

£¨1£©ÉùÃ÷Ò»¸ö¾Ö²¿µÄËãÊõ±äÁ¿La_var ²¢½«Æä³õʼ»¯ 0£»

£¨2£©ÉùÃ÷Ò»¸ö¾Ö²¿µÄÂß¼­±äÁ¿Ll_var ²¢½«Æä³õʼ»¯ FALSE£» £¨3£©ÉùÃ÷Ò»¸ö¾Ö²¿µÄ×Ö·û´®±äÁ¿Ls_var ²¢½«Æä³õʼ»¯ ¿Õ´®£» £¨4£©ÉùÃ÷Ò»¸öÈ«¾ÖµÄÂß¼­±äÁ¿Gl_var ²¢½«Æä³õʼ»¯ FALSE£» £¨5£©ÉùÃ÷Ò»¸öÈ«¾ÖµÄ×Ö·û´®±äÁ¿Gs_var ²¢½«Æä³õʼ»¯ ¿Õ´®£» £¨6£©ÉùÃ÷Ò»¸öÈ«¾ÖµÄËãÊõ±äÁ¿Ga_var ²¢½«Æä³õʼ»¯ 0xAA£» £¨7£©ÉùÃ÷Ò»¸öÈ«¾ÖµÄÂß¼­±äÁ¿Gl_var ²¢½«Æä³õʼ»¯ TRUE£»

£¨8£©ÉùÃ÷Ò»¸öÈ«¾ÖµÄ×Ö·û´®±äÁ¿Gs_var ²¢½«Æä³õʼ»¯ ¡°CHINA¡±£» ´ð£º

£¨1£©ÉùÃ÷Ò»¸ö¾Ö²¿µÄËãÊõ±äÁ¿La_var ²¢½«Æä³õʼ»¯ 0£»

LCLA La_var

£¨2£©ÉùÃ÷Ò»¸ö¾Ö²¿µÄÂß¼­±äÁ¿Ll_var ²¢½«Æä³õʼ»¯ FALSE£» LCLL Ll_var

£¨3£©ÉùÃ÷Ò»¸ö¾Ö²¿µÄ×Ö·û´®±äÁ¿Ls_var ²¢½«Æä³õʼ»¯ ¿Õ´®£» LCLS Ls_var

£¨4£©ÉùÃ÷Ò»¸öÈ«¾ÖµÄÂß¼­±äÁ¿Gl_var ²¢½«Æä³õʼ»¯ FALSE£» GCLL Gl_var

£¨5£©ÉùÃ÷Ò»¸öÈ«¾ÖµÄ×Ö·û´®±äÁ¿Gs_var ²¢½«Æä³õʼ»¯ ¿Õ´®£» GCLS Gs_var

£¨6£©ÉùÃ÷Ò»¸öÈ«¾ÖµÄËãÊõ±äÁ¿Ga_var ²¢½«Æä³õʼ»¯ 0xAA£» GCLA Ga_var

Ga_ var SETA 0xAA

£¨7£©ÉùÃ÷Ò»¸öÈ«¾ÖµÄÂß¼­±äÁ¿Gl_var ²¢½«Æä³õʼ»¯ TRUE£» GCLL Gl_var

Gl_ var SETL TRUE

£¨8£©ÉùÃ÷Ò»¸öÈ«¾ÖµÄ×Ö·û´®±äÁ¿Gs_var ²¢½«Æä³õʼ»¯ ¡°CHINA¡±£» GCLS Gs_var

Gs_ var SETS \

4.ÓÃARM¿ª·¢¹¤¾ßα²Ù×÷½«¼Ä´æÆ÷ÁбíR0-R5£¬R7£¬R8µÄÃû³Æ¶¨ÒåΪReglist¡£ ´ð£ºReglist RLST {R0-R5£¬R7£¬R8}

5.Íê³ÉÏÂÁÐÊý¾Ý¶¨Òåα²Ù×÷£º

£¨1£©ÉêÇëÒÔdata_buffer1ΪÆðʼµØÖ·µÄÁ¬ÐøµÄÄÚ´æµ¥Ôª£¬²¢ÒÀ´ÎÓðë×ÖÊý¾Ý0x11,0x22,0x33,0x44,0x55½øÐгõʼ»¯£»

£¨2£©ÉêÇëÒÔStr_bufferΪÆðʼµØÖ·µÄÁ¬ÐøµÄÄÚ´æµ¥Ôª£¬²¢ÓÃ×Ö·û´®¡°ARM7 and ARM9¡±½øÐгõʼ»¯£»

´ð£º(1) data_buffer1 DCW 0x11,0x22,0x33,0x44,0x55 (2) Str_buffer DCB ¡°ARM7 and ARM9¡±

6.¶¨ÒåÒ»¸ö½á¹¹»¯µÄÄÚ´æ±í£¬ÆäÊ×µØÖ·¹Ì¶¨Îª0x900£¬¸Ã½á¹¹»¯ÄÚ´æ±í°üº¬2¸öÓò£¬Fdatal³¤¶ÈΪ8¸ö×Ö½Ú£¬Fdata2³¤¶ÈΪ160¸ö×Ö½Ú¡£ ´ð£ºMAP 0x900

Fdata1 FIELD 8 Fdata2 FIELD 160

7.ÔÚGNU-ARM±àÒë»·¾³Ï£¬Ð´³öʵÏÖÏÂÁвÙ×÷µÄα²Ù×÷£º

£¨1£©·ÖÅäÒ»¶Î×Ö½ÚÄÚ´æµ¥Ôª£¬²¢ÓÃ57,0x11,031£¬'Z'£¬0x76½øÐгõʼ»¯£» £¨2£©·ÖÅäÒ»¶Î°ë×ÖÄÚ´æµ¥Ôª£¬²¢ÓÃ0xFFE0,0xAABB£¬0x12½øÐгõʼ»¯£» £¨3£©·ÖÅäÒ»¶Î×ÖÄÚ´æµ¥Ôª£¬ ²¢ÓÃ0x12345678,0xAABBCCDD½øÐгõʼ»¯£» £¨4£©·ÖÅäÒ»¶ÎÄÚ´æµ¥Ôª£¬²¢Óó¤Îª8×Ö½ÚµÄÊýÖµ0x11Ìî³ä100´Î£» ´ð£º

£¨1£©·ÖÅäÒ»¶Î×Ö½ÚÄÚ´æµ¥Ôª£¬²¢ÓÃ57,0x11,031£¬'Z'£¬0x76½øÐгõʼ»¯£» .byte 57,0x11,031£¬'Z'£¬0x76

£¨2£©·ÖÅäÒ»¶Î°ë×ÖÄÚ´æµ¥Ôª£¬²¢ÓÃ0xFFE0,0xAABB£¬0x12½øÐгõʼ»¯£» .hword 0xFFE0,0xAABB£¬0x12

£¨3£©·ÖÅäÒ»¶Î×ÖÄÚ´æµ¥Ôª£¬ ²¢ÓÃ0x12345678,0xAABBCCDD½øÐгõʼ»¯£» .word 0x12345678,0xAABBCCDD

£¨4£©·ÖÅäÒ»¶ÎÄÚ´æµ¥Ôª£¬²¢Óó¤Îª8×Ö½ÚµÄÊýÖµ0x11Ìî³ä100´Î£» .fill 100 , 8, 0x11

8.д³öÓëGNU-ARM±àÒë»·¾³ÏÂα²Ù×÷.arm , .thumb ¹¦ÄÜÏàͬµÄARM±ê×¼¿ª·¢¹¤¾ß±àÒë»·¾³ÏµÄα²Ù×÷¡£

´ð£º.arm ¶ÔÓ¦ ARM »ò CODE32 .thumb ¶ÔÓ¦ THUMB »ò CODE16

µÚ7Õ »ã±àÓïÑÔ³ÌÐòÉè¼Æ

1.·Ö±ðд³öARM¼¯³É¿ª·¢»·¾³ÏÂARM»ã±àÓï¾ä¸ñʽÓëGNU ARM»·¾³ÏÂARM»ã±àÓï¾äͨÓøñʽ£¬²¢·ÖÎöËüÃǵÄÇø±ð¡£

´ð£ºADS»·¾³ÏÂARM»ã±àÓï¾ä¸ñʽÈçÏ£º

? {symbol} {instruction} {;comment} ? {symbol} {directive} {;comment} ? {symbol} { pseudo-instruction} {;comment}

? Symbol £º±êºÅ£¨µØÖ·£©

? Instruction £ºÖ¸ÁARM/Thumb£© ? Directive £ºÎ±²Ù×÷ ? pseudo-instruction£ºÎ±Ö¸Áî

GNU»·¾³ÏÂARM»ã±àÓïÑÔÓï¾ä¸ñʽÈçÏ£º

? {label :} {instruction} ? {label :} {directive} ? {label :} { pseudo-instruction} {@comment} {@comment} {@comment}

2.¾Ö²¿±êºÅÌṩ·ÖÖ§Ö¸ÁîÔÚ»ã±à³ÌÐòµÄ¾Ö²¿·¶Î§ÄÚÌø×ª£¬ËüµÄÖ÷ÒªÓÃ;ÊÇʲô£¬²¢¾ÙһʵÀý¼ÓÒÔ˵Ã÷¡£ ´ð£º¾Ö²¿±êºÅ

? ¾Ö²¿±êºÅµÄÓï·¨¸ñʽÈçÏ£º

? n {routname} £¨0~99£© ? ±»ÒýÓõľֲ¿±êºÅÓï·¨¹æÔòÊÇ£º ? % {F¨OB} {A¨OT} n {routname} ? ÆäÖУº

? nÊǾֲ¿±êºÅµÄÊý×ֺ𣣍0~99£© ? routnameÊǵ±Ç°¾Ö²¿·¶Î§µÄÃû³Æ¡£ ? %±íʾÒýÓòÙ×÷¡£

? Fָʾ»ã±àÆ÷Ö»ÏòǰËÑË÷¡£ ? Bָʾ»ã±àÆ÷Ö»ÏòºóËÑË÷¡£

? Aָʾ»ã±àÆ÷ËÑË÷ºêµÄËùÓÐǶÌײã´Î¡£ ? Tָʾ»ã±àÆ÷ËÑË÷ºêµÄµ±Ç°²ã´Î¡£

? ¾Ö²¿±êºÅÌṩ·ÖÖ§Ö¸ÁîÔÚ»ã±à³ÌÐòÔÚ¾Ö²¿·¶Î§ÄÚµÄÌø×ª

3.ÏȶÔÄÚ´æµØÖ·0xB000¿ªÊ¼µÄ100¸ö×ÖÄÚ´æµ¥ÔªÌîÈë0x10000001~0x10000064×ÖÊý¾Ý£¬È»ºó½«Ã¿¸ö×Öµ¥Ôª½øÐÐ64λÀÛ¼Ó£¬½á¹û±£´æÓÚ¡¾R9£ºR8¡¿£¨R9Öдæ·Å¸ß32룩¡£

´ð£º½â£ºÏȶÔÄÚ´æµØÖ·0xB000¿ªÊ¼µÄ100¸ö×ÖÄÚ´æµ¥ÔªÌîÈë0x10000001~0x10000064×ÖÊý¾Ý£¬È»ºó½«Ã¿¸ö×Öµ¥Ôª½øÐÐ64λÀÛ¼Ó£¬½á¹û±£´æÓÚ¡¾R9£ºR8¡¿£¨R9Öдæ·Å¸ß32룩¡£

ÔÚARM¼¯³É¿ª·¢»·¾³Ï±à³Ì£º

/*---------------------------------------------------------------------------------------- ********¼Ä´æÆ÷ʹÓÃ˵Ã÷************************ ***R0:´æ·ÅµØÖ·Öµ ***R2:µÝ¼õ¼ÆÊýÆ÷

***R9:64λµÝ¼Ó½á¹ûµÄ¸ß32λ ***R8:64λµÝ¼Ó½á¹ûµÄµÍ32λ

*---------------------------------------------------------------------------------------------*/ AREA Fctrl,CODE,READONLY ;ÉùÃ÷´úÂë¶ÎFctrl ENTRY ;±êʶ³ÌÐòÈë¿Ú CODE32 ;ÉùÃ÷32λARMÖ¸Áî START MOV R0,#0xB000 £»³õʼ»¯¼Ä´æÆ÷ MOV R1,#0x10000001 MOV R2,#100 loop_1 £»µÚÒ»´ÎÑ­»·¸³Öµ STR R1,[R0],#4 ADD R1,R1,#1

SUBS R2,R2,#1 BNE loop_1 MOV R0,#0xB000 MOV R2,#100 MOV R9,#0 MOV R8,#0 loop_2 £»µÚ¶þ´ÎÑ­»·ÀÛ¼Ó LDR R1,[R0],#4 ADDS R8,R1,R8 £»R8=R8+R1£¬½øÎ»Ó°Ïì±ê־λ ADDC R9,R9,#0 £»R9=R9+C£¬CΪ½øÎ»Î» SUBS R2,R2,#1 BNE loop_2 Stop B Stop £»Îļþ½áÊø END

4.ÔÚGNU»·¾³ÏÂÓÃARM»ã±àÓïÑÔ±àд³ÌÐò£¬³õʼ»¯ARM´¦ÀíÆ÷¸÷ģʽϵĶÑÕ»Ö¸ÕëSP_mode (R13)£¬¸÷ģʽµÄ¶ÑÕ»Ö¸ÕëµØÖ·ÈçÏ£º

.equ _ISR_STARTADDRESS, 0xCFFF000 @ÉèÖÃÕ»µÄÄÚ´æ»ùµØÖ· .equ UserStack, _ISR_STARTADDRESS @Óû§Ä£Ê½¶ÑÕ»µØÖ· .equ SVCStack, _ISR_STARTADDRESS+64 @¹ÜÀíģʽ¶ÑÕ»µØÖ· .equ UndefStack, _ISR_STARTADDRESS+64*2 @䶨Òåģʽ¶ÑÕ»µØÖ· .equ AbortStack, _ISR_STARTADDRESS+64*3 @ÖÐֹģʽ¶ÑÕ»µØÖ· .equ IRQStack, _ISR_STARTADDRESS+64*4 @IRQģʽ¶ÑÕ»µØÖ· .equ FIQStack, _ISR_STARTADDRESS+64*5 @FIQģʽ¶ÑÕ»µØÖ· ´ð£º

ÔÚGNU ARM¿ª·¢»·¾³Ï±à³Ì£º

.equ _ISR_STARTADDRESS, 0xCFFF000 @ÉèÖÃÕ»µÄÄÚ´æ»ùµØÖ· .equ UserStack, _ISR_STARTADDRESS @Óû§Ä£Ê½¶ÑÕ»µØÖ· .equ SVCStack, _ISR_STARTADDRESS+64 @¹ÜÀíģʽ¶ÑÕ»µØÖ· .equ UndefStack, _ISR_STARTADDRESS+64*2 @䶨Òåģʽ¶ÑÕ»µØÖ· .equ AbortStack, _ISR_STARTADDRESS+64*3 @ÖÐֹģʽ¶ÑÕ»µØÖ· .equ IRQStack, _ISR_STARTADDRESS+64*4 @IRQģʽ¶ÑÕ»µØÖ· .equ FIQStack, _ISR_STARTADDRESS+64*5 @FIQģʽ¶ÑÕ»µØÖ· .equ USERMODE 0x10 @Óû§Ä£Ê½ .equ FIQMODE 0x11 @FIQģʽ .equ IRQMODE 0x12 @IRQģʽ .equ SVCMODE 0x13 @¹ÜÀíģʽ .equ ABORTMODE 0x17 @ÖÐֹģʽ .equ UNDEFMODE 0x1B @䶨Òåģʽ .equ SYSMODE 0x1F @ϵͳģʽ .equ MODEMASK 0x1F @ģʽλÑÚÂë¿ØÖÆ×Ö

.global _start .text .arm _start: MRS R0,CPSR @¶ÁÈ¡µ±Ç°CPSR BIC R0,R0,#MODEMASK @Çå³ýģʽλ @ÉèÖÃϵͳģʽϵÄSP ORR R1,R0,#SYSMODE MSR CPSR_c,R1 LDR SP,=UserStack @ÉèÖÃÖÐֹģʽϵÄSP ORR R1,R0,#ABORTMODE MSR CPSR_c,R1 LDR SP,=AbortStack @ÉèÖùÜÀíģʽϵÄSP ORR R1,R0,#SVCMODE MSR CPSR_c,R1 LDR SP,=SVCStack @ÉèÖÃIRQģʽϵÄSP ORR R1,R0,#IRQMODE MSR CPSR_c,R1 LDR SP,=IRQStack @ÉèÖÃFIQģʽϵÄSP ORR R1,R0,#FIQMODE MSR CPSR_c,R1 LDR SP,=FIQStack

Stop : B Stop .end @Îļþ½áÊø

5.ÄÚ´æÊý¾ÝÇø¶¨ÒåÈçÏ£º Src:

.long 1,2,3,4,5,6,7,8,9,0xA,0xB,0xC,0xD,0xE,0xF,0x10 .long 1,2,3,4,5,6,7,8,9,0xA,0xB,0xC,0xD,0xE,0xF,0x10

Src_Num: .long 32 Dst:

.long 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0

.long 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0

ÇëÓÃARMÖ¸Áî±àд³ÌÐò£¬ÊµÏÖ½«Êý¾Ý´ÓÔ´Êý¾ÝÇøSrc¿½±´µ½Ä¿±êÊý¾ÝÇøDst£¬ÒªÇóÒÔ6¸ö×ÖΪµ¥Î»½øÐп鿽±´£¬Èç¹û²»×ã6¸ö×Öʱ£¬ÔòÒÔ×ÖΪµ¥Î»½øÐп½±´£¨ÆäÖÐÊý¾ÝÇøSrc_Num´¦´æ·ÅÔ´Êý¾ÝµÄ¸öÊý£©¡£

´ð£º½â£º³ÌÐòÉè¼ÆË¼Â·£ºÃ¿½øÐÐ6¸ö×ÖµÄÅúÁ¿¿½±´Ç°£¬ÏÈÅжÏSRC_NUMÊÇ·ñ´óÓÚ6£¬ÊÇÔò½øÐÐ6×ÖµÄÅúÁ¿¿½±´²¢½«SRC_NUM¼õÈ¥6£¬·ñÔòÔò½øÐе¥×ֵĿ½±´£¬ÔÚʹÓüĴæÆ÷×éʱ»¹Òª×¢Òâ±£´æÏÖ³¡¡£

ÔÚARM¼¯³É¿ª·¢»·¾³Ï±à³Ì£º

/*---------------------------------------------------------------------------------------- ********¼Ä´æÆ÷ʹÓÃ˵Ã÷************************ ***R0:Ô´Êý¾ÝÇøÖ¸Õë ***R1:Ä¿±êÊý¾ÝÇøÖ¸Õë ***R2:µ¥×Ö¿½±´×ÖÊý ***R3:¿é¿½±´×ÖÊý

***R5~~R10:ÅúÁ¿¿½±´Ê¹ÓõļĴæÆ÷×é ***SP:Õ»Ö¸Õë

*---------------------------------------------------------------------------------------------*/ SRC_NUM EQU 32 £»ÉèÖÃÒª¿½±´µÄ×ÖÊý AREA Copy_Data,CODE,READONLY ;ÉùÃ÷´úÂë¶ÎCopy_Data ENTRY ;±êʶ³ÌÐòÈë¿Ú CODE32 ;ÉùÃ÷32λARMÖ¸Áî START LDR R0,=Src ;R0=Ô´Êý¾ÝÇøÖ¸Õë LDR R1£¬=Dst £»R1=Ä¿±êÊý¾ÝÇøÖ¸Õë MOV R2,#SRC_NUM £»R2=µ¥×Ö¿½±´×ÖÊý MOV SP,#0x9000

CMP R2,#6

BLS Copy_Words £»R2<=6£¬Ôò¿½±´µ¥×Ö STMFD SP!,{R5-R10} £»±£´æ½«ÒªÊ¹ÓõļĴæÆ÷×éR5-R10 ;½øÐп鿽±´£¬Ã¿´Î¿½±´6¸ö×Ö Copy_6Word LDMIA R0!,{R5-R10} STMIA R1!,{R5-R10} SUBS R2,R2,#6 BHI Copy_6Word ;R2>6 LDMFD SP!,{R5-R10} £»»Ö¸´¼Ä´æÆ÷×éR5-R10

;½«Ê£ÓàµÄÊý¾ÝÇøÒÔ×ÖΪµ¥Î»¿½±´ Copy_Words ;¿½±´Ê£Óà×Ö½Ú LDR R3,[R0],#4 STR R3,[R1],#4 SUBS R2,R2,#1 BNE Copy_Word

Stop B Stop LTORG Src DCD 1,2,3,4,5,6,7,8,9,0xA,0xB,0xC,0xD,0xE,0xF,0x10

DCD 1,2,3,4,5,6,7,8,9,0xA,0xB,0xC,0xD,0xE,0xF,0x10 Dst DCD 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 DCD 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 END

6.½«Ò»¸ö´æ·ÅÔÚ¡¾R1:R0¡¿ÖеÄ64λÊý¾Ý£¨ÆäÖÐR1Öдæ·Å¸ß32룩µÄ¸ßλºÍµÍλ¶Ô³Æ»»Î»£¬ÈçµÚ0λÓëµÚ63λµ÷»»£¬µÚ1λÓëµÚ62λµ÷»»£¬µÚ2λÓëµÚ61λµ÷»»£¬¡£¡£¡£¡£µÚ31λÓëµÚ32λµ÷»»¡£

´ð£º½â£º³ÌÐòÉè¼ÆË¼Â·£º¶ÔÓÚµ¥¸ö32λ¼Ä´æÆ÷µÄ¶Ô³Æ»»Î»²Ù×÷£¬ÎÒÃÇ¿ÉÒÔ²ÉÓÃÒÆÎ»²Ù×÷µÄ·½·¨£¬Í¨¹ýÒÀ´Î´ÓµÍλȡ³öÄ¿±ê¼Ä´æÆ÷µÄ¸÷¸ö룬ÔÙ½«Æä·ÅÖõ½Ä¿±ê¼Ä´æÆ÷µÄ×îµÍλ£¬È»ºóͨ¹ýÒÆÎ»²Ù×÷£¬ËÍÈëÏàӦλ¡£¶ÔÓÚ¡¾R1:R0¡¿µ½¡¾R3:R2¡¿µÄ64λ¶Ô³Æ»»Î»²Ù×÷£¬ÎÒÃÇ¿ÉÒÔ²ÉÓÃR1-¡·R2ºÍR0-¡·R3µÄÁ½¸ö32λµÄ»»Î»²Ù×÷À´Íê³É¡£

ÔÚARM¼¯³É¿ª·¢»·¾³Ï±à³Ì£º

/*---------------------------------------------------------------------------------------- ********¼Ä´æÆ÷ʹÓÃ˵Ã÷************************ ***R1£¬R0:Ô´Êý¾Ý ***R3£¬R2:Ä¿±êÊý¾Ý

***R4:¼ÆÊýÆ÷£¬³õֵΪ32£¬µÝ¼õÖÁ0

*---------------------------------------------------------------------------------------------*/ AREA Bit_Exch,CODE,READONLY ;ÉùÃ÷´úÂë¶ÎBit_Exch ENTRY ;±êʶ³ÌÐòÈë¿Ú

CODE32 ;ÉùÃ÷32λARMÖ¸Áî

START LDR R0,=0x55555555 ;ÊäÈëÔ´Êý¾Ý

MOV R3,#0 £»Ä¿±êÊý¾Ý MOV R5,#0 £»Êý¾ÝÁÙʱ»º³åÇø

MOV R4,#32 £»¼ÆÊýÆ÷ Bitex_H32 AND R5,R0,#1 £»È¡³öÔ´Êý¾ÝµÄ×îµÍλËÍR5

ORR R3,R5,R3,LSL #1 £»½«Ä¿±êÊý¾Ý×óÒÆÒ»Î»£¬²¢½«È¡³öµÄÊý¾Ý

;ËÍÈëÆä×îµÍλ

MOV R0,R0,LSR #1 ;Ô´Êý¾ÝÓÒÒÆÒ»Î» SUBS R4,R4,#1 £»µÝ¼õ¼ÆÊý BNE Bitex_L

LDR R1,=0x55555555 ;ÊäÈëÔ´Êý¾Ý

MOV MOV MOV

Bitex_L32 AND

ORR

R2,#0 R5,#0 R4,#32 £»Ä¿±êÊý¾Ý

£»Êý¾ÝÁÙʱ»º³åÇø £»¼ÆÊýÆ÷

£»È¡³öÔ´Êý¾ÝµÄ×îµÍλËÍR5

£»½«Ä¿±êÊý¾Ý×óÒÆÒ»Î»£¬²¢½«È¡³öµÄÊý¾Ý ;ËÍÈëÆä×îµÍλ ;Ô´Êý¾ÝÓÒÒÆÒ»Î» £»µÝ¼õ¼ÆÊý

R5,R1,#1 R2,R5,R2,LSL #1

MOV R1,R1,LSR #1 SUBS R4,R4,#1 BNE Bitex_L Stop B Stop END

7.ÄÚ´æÊý¾ÝÇø¶¨ÒåÈçÏ£º DataZone

DCD 0x12345678, 0x87654321, 0xABCDEF12, 0xCDEFAB45 DCD 0x12345678, 0x87654321, 0xABCDEF12, 0xCDEFAB45 DCD 0x12345678, 0x87654321, 0xABCDEF12, 0xCDEFAB45 DCD 0x12345678, 0x87654321, 0xABCDEF12, 0xCDEFAB45 DCD 0x12345678, 0x87654321, 0xABCDEF12, 0xCDEFAB45 DCD 0x12345678, 0x87654321, 0xABCDEF12, 0xCDEFAB45 DCD 0x12345678, 0x87654321, 0xABCDEF12, 0xCDEFAB45 DCD 0x12345678, 0x87654321, 0xABCDEF12, 0xCDEFAB45

ÒÔÉÏ¿ÉÒÔ¿´×öÒ»¸ö8*4¾ØÕó£¬ÇëÓÃARM»ã±àÓïÑÔÔÚARM¼¯³É¿ª·¢»·¾³ÏÂÉè¼Æ³ÌÐò£¬ÊµÏÖ¶Ô¾ØÕóµÄתÖòÙ×÷¡£

Èç¹û¸ÄΪÔÚGNU ARM»·¾³Ï±à³Ì£¬³ÌÐòÓ¦ÈçºÎÐ޸ġ£

´ð£º½â£ºÊ¹ÓÃR0Ö¸ÏòÔ´Êý¾ÝÇø£¬R1Ö¸ÏòÄ¿±êÊý¾ÝÇø¡£´ÓÔ´Êý¾ÝÇøÖа´ÁÐÈ¡Êý¾Ý£¨Ã¿´ÎÈ¡8¸ö£©£¬È»ºó˳Ðò´æÈëÄ¿±êÊý¾ÝÇø¡£ ÔÚARM¼¯³É¿ª·¢»·¾³Ï±à³Ì£º

/*---------------------------------------------------------------------------------------- ********¼Ä´æÆ÷ʹÓÃ˵Ã÷************************ ***R0:Ô´Êý¾Ý ***R1:Ä¿±êÊý¾Ý

***R2:ÐмÆÊýÆ÷£¬³õֵΪ8£¬µÝ¼õÖÁ0 ***R3:ÁмÆÊýÆ÷£¬³õֵΪ4£¬µÝ¼õÖÁ0

*---------------------------------------------------------------------------------------------*/ AREA Bit_Exch,CODE,READONLY ;ÉùÃ÷´úÂë¶ÎBit_Exch ENTRY ;±êʶ³ÌÐòÈë¿Ú

CODE32 ;ÉùÃ÷32λARMÖ¸Áî

START LDR R0,=Src

COL ROW

LDR

MOV MOV LDR STR SUBS BNE

SUBS BNE

R1,=Dst R3,#4 R2,#8 R4,[R0],#16 R4,[R1],#4 R2,R2,#1 ROW R3,R3,#1 COL

£»°´ÁÐÈ¡Êý¾Ý £»°´ÐдæÊý¾Ý £»ÐмÆÊýµÝ¼õ

£»ÁмÆÊýµÝ¼õ

Stop

B END

Stop

µÚ8Õ ARM»ã±àÓïÑÔÓëǶÈëʽC»ìºÏ±à³Ì

1.Ñϸñ°´ÕÕǶÈëʽCÓïÑԵıà³Ì¹æ·¶£¬Ð´Ò»¸öCÓïÑÔ³ÌÐò£¬ÊµÏÖ½«Ò»¸ö¶þάÊý×éÄÚµÄÊý¾ÝÐкÍÁнøÐÐÅÅÐò¡£ ´ð£ºÂÔ

2.ǶÈëʽC³ÌÐòÉè¼ÆÖг£ÓõÄÒÆÎ»²Ù×÷ÓÐÄļ¸ÖÖ£¬Çë˵Ã÷ÿÖÖÔËËãËù¶ÔÓ¦µÄARMÖ¸ÁîʵÏÖ¡£ ´ð£ºÒÆÎ»²Ù×÷·ÖΪ×óÒÆ²Ù×÷ÓëÓÒÒÆ²Ù×÷

×óÒÆÔËËã·û¨D<<¡¬ÊµÏÖ½«¨D<<¡¬×ó±ßµÄ²Ù×÷ÊýµÄ¸÷¸ö¶þ½øÖÆÎ»Ïò×óÒÆ¶¯¨D<<¡¬Óұ߲Ù×÷ÊýËùÖ¸¶¨µÄλÊý£¬¸ß붪Æú£¬µÍλ²¹0¡£ÆäÖµÏ൱ÓÚ³ËÒÔ£º2¨D×óÒÆÎ»Êý¡¬´Î·½¡£

ÓÒÒÆÔËËã·û¨D>>¡¬ÊµÏÖ½«¨D>>¡¬×ó±ßµÄ²Ù×÷ÊýµÄ¸÷¸ö¶þ½øÖÆÎ»ÏòÓÒÒÆ¶¯¨D<<¡¬Óұ߲Ù×÷ÊýËùÖ¸¶¨µÄλÊý¡£

? ¶ÔÓÚ¿ÕλµÄ²¹Æë·½Ê½£¬ÎÞ·ûºÅÊýÓëÓзûºÅÊýÊÇÓÐÇø±ðµÄ¡£

? ¶ÔÎÞ·ûºÅÊý½øÐÐÓÒÒÆÊ±£¬µÍ붪Æú£¬¸ßλÓÃ0²¹Æë£¬ÆäÖµÏ൱ÓÚ³ýÒÔ£º2¨DÓÒÒÆÎ»Êý¡¬

´Î·½

? ¶ÔÓзûºÅÊý½øÐÐÓÒÒÆÊ±£¬¸ù¾Ý´¦ÀíÆ÷µÄ²»Í¬Ñ¡ÔñÂß¼­ÓÒÒÆ»òËãÊõÓÒÒÆ

3.volatileÏÞÖÆ·ûÔÚ³ÌÐòÖÐÆðµ½Ê²Ã´×÷Óá£Çë¾ÙÀý˵Ã÷¡£

´ð£ºvolatileµÄ±¾ÒâΪ ¨DÔÝ̬µÄ¡¬»ò.¨DÒ×±äµÄ¡¬£¬¸Ã˵Ã÷·ûÆðµ½ÒÖÖÆ±àÒëÆ÷ÓÅ»¯µÄ×÷Óá£

Èç¹ûÔÚÉùÃ÷ʱÓèDvolatile¡¬¹Ø¼ü½øÐÐÐÞÊΣ¬Óöµ½Õâ¸ö¹Ø¼ü×ÖÉùÃ÷µÄ±äÁ¿£¬±àÒëÆ÷¶Ô·ÃÎʸñäÁ¿µÄ´úÂë¾Í²»ÔÙ½øÐÐÓÅ»¯£¬´Ó¶ø¿ÉÒÔÌá¹©ÌØÊâµØÖ·µÄÎȶ¨·ÃÎÊ¡£ ? Àý:Ó²¼þ¶Ë¿Ú¼Ä´æÆ÷¶ÁÈ¡ ? Char x=0,y=0,z=0;

? x=ReadChar(0x54000000);//¶Á¶Ë¿Ú ? y=x;

? x=ReadChar(0x54000000);//ÔÙ¶Á¶Ë¿Ú ? z=x;

???????? ÒÔÉÏ´úÂë¿ÉÄܱ»±àÒëÆ÷ÓÅ»¯Îª Char x=0,y=0,z=0;

x=ReadChar(0x54000000);//¶Á¶Ë¿Ú y=x; z=x;

ΪÁËÈ·±£xµÄÖµ´ÓÕæÊµ¶Ë¿Ú»ñÈ¡£¬ÉùÃ÷ʱӦ¸ÃΪ Volatile char x; Char y,z;

4.Çë·ÖÎöÏÂÁгÌÐò´úÂëµÄÖ´Ðнá¹û¡£ #include main(){ int value=0xFF1; int *p1,**p2,***p3,****p4; p1=&value; p2=&p1; p3=&p2; p4=&p3; printf(\}

´ð£º³ÌÐòÊä³ö½á¹ûΪ£º****p4=4081

5.·ÖÎöºê¶¨Òå#define POWER(x) x*x ÊÇ·ñºÏÀí£¬¾ÙÀý˵Ã÷¡£Èç¹û²»ºÏÀí£¬Ó¦ÈçºÎ¸ü¸Ä£¿ ´ð£º#define POWER(x) x*x ²»ºÏÀí£»¶ÔÓÚ´ø²ÎÊýµÄºê£¬Æä²ÎÊýÓ¦¸ÃÓÃÀ¨ºÅÀ¨ÆðÀ´¡£ Àý£ºÈç¹û°´ÕÕϱ߷½Ê½Ê¹Óøúê

POWER(2+3) ÔòºêÕ¹¿ªºóΪ 2+3*2+3

¸ÃºêÓ¦ÐÞ¸ÄΪ£º#define POWER(x) £¨x£©*£¨x£©

6.Ìõ¼þ±àÒëÔÚ³ÌÐòÉè¼ÆÖÐÓÐÄÄЩÓÃ;£¿

´ð£ºÌõ¼þ±àÒë°üÀ¨ÁË6ÌõÔ¤´¦ÀíÖ¸Áî#ifdef, #ifndef. ##if, #elif, #else, #endif.¡£Ìõ¼þ±àÒëµÄ¹¦ÄÜÔÚÓÚ¶ÔÔ´³ÌÐòÖеÄÒ»²¿·ÖÄÚÈÝÖ»ÓÐÂú×ãijÖÖÌõ¼þµÄÇé¿öÏ²ŽøÐбàÒë¡£

7.ºÎΪ¿ÉÖØÈ뺯Êý£¿Èç¹ûʹ³ÌÐò¾ßÓпÉÖØÈëÐÔ£¬ÔÚ³ÌÐòÉè¼ÆÖÐÓ¦¸Ã×¢ÒâÄÄЩÎÊÌ⣿

´ð£ºÈç¹ûij¸öº¯Êý¿ÉÒÔ±»¶à¸öÈÎÎñ²¢·¢Ê¹Ó㬶ø²»»áÔì³ÉÊý¾Ý´íÎó£¬ÎÒÃǾÍ˵Õâ¸öº¯Êý¾ßÓпÉÖØÈëÐÔ£¨reentrant£© ¡£

¿ÉÖØÈ뺯Êý¿ÉÒÔʹÓþֲ¿±äÁ¿£¬Ò²¿ÉÒÔʹÓÃÈ«¾Ö±äÁ¿¡£

Èç¹ûʹÓÃÈ«¾Ö±äÁ¿£¬ÔòӦͨ¹ý¹ØÖжϡ¢ÐźÅÁ¿£¨¼´P¡¢V²Ù×÷£©µÈÊÖ¶Î¶ÔÆä¼ÓÒÔ±£»¤£¬Èô²»¼ÓÒÔ±£»¤£¬Ôò´Ëº¯Êý¾Í²»¾ßÓпÉÖØÈëÐÔ£¬¼´µ±¶à¸ö½ø³Ìµ÷Óô˺¯Êýʱ£¬ºÜÓпÉÄÜʹµÃ´ËÈ«¾Ö±äÁ¿±äΪ²»¿É֪״̬¡£

8.ÏÖÓÐÄ£¿émodule_1, module_2, module_3, ÒªÇóÔÚÄ£¿émodule_1ÖÐÌṩ¿É¹©Ä£¿émodule_2, module_3ʹÓõÄintÐͱäÁ¿xx£¬Çëд³öÄ£¿é»¯³ÌÐòÉè¼Æ¿ò¼Ü¡£ ´ð£ºÊ×ÏÈÔÚmodule_1µÄ.cÎļþÖж¨Òå int xx£» /*module_1.c*/

int xx=0;

È»ºóÔÚmodule_1µÄ.h ÎļþÖÐÉùÃ÷xxΪÍⲿ±äÁ¿ /*module_1.h*/ extern int xx;

½ÓÏÂÀ´ÔÚmodule_2Ô´ÎļþÖаüÀ¨module_1µÄ .h Îļþ /*module_2.c*/

#include \

ÔÚmodule_3Ô´ÎļþÖаüÀ¨module_1µÄ .h Îļþ /*module_3.c*/

#include \

ÕâÑùÔÚmodule_2, module_3ÖоͿÉÒÔʹÓÃmodule_1ÖÐÌṩµÄintÐͱäÁ¿xxÁË¡£

9.ATPCS Óë AAPCSµÄÈ«³ÆÊÇÊÇʲô£¬ËüÃÇÓÐʲô²î±ð£¿ÕÆÎÕ×Ó³ÌÐòµ÷Óùý³ÌÖмĴæÆ÷µÄʹÓùæÔò£¬Êý¾ÝÕ»µÄʹÓùæÔò¼°²ÎÊýµÄ´«µÝ¹æÔò£¬ÔÚ¾ßÌåµÄº¯ÊýÖÐÄܹ»ÊìÁ·Ó¦Óá£

´ð£º¹ý³Ìµ÷Óñê×¼ATPCS£¨ARM-Thumb Produce Call Standard£©¹æ¶¨ÁË×Ó³ÌÐò¼äÏ໥µ÷ÓõĻù±¾¹æÔò£¬ ATPCS¹æ¶¨×Ó³ÌÐòµ÷Óùý³ÌÖмĴæÆ÷µÄʹÓùæÔò¡¢Êý¾ÝÕ»µÄʹÓùæÔò¼°²ÎÊýµÄ´«µÝ¹æÔò¡£

2007Ä꣬ARM¹«Ë¾ÍƳöÁËеĹý³Ìµ÷Óñê×¼AAPCS£¨ARM Architecture Produce Call Standard£©,ËüÖ»ÊǸĽøÁËÔ­ÓеÄATPCSµÄ¶þ½øÖÆ´úÂëµÄ¼æÈÝÐÔ¡£

10.ÄÚǶʽ»ã±àÓÐÄÄЩ¾ÖÏÞÐÔ£¿±àдһ¶Î´úÂë²ÉÓÃCÓïÑÔǶÈëʽ»ã±à³ÌÐò£¬ÔÚ»ã±à³ÌÐòÖÐʵÏÖ×Ö·û´®µÄ¿½±´²Ù×÷¡£ ´ð£ºÄÚǶ»ã±àµÄ¾ÖÏÞÐÔ

£¨1£©²Ù×÷Êý

? ARM¿ª·¢¹¤¾ß±àÒë»·¾³ÏÂÄÚǶ»ã±àÓïÑÔ£¬Ö¸Áî²Ù×÷Êý¿ÉÒÔÊǼĴæÆ÷¡¢³£Á¿»òCÓï

ÑÔ±í´ïʽ¡£¿ÉÒÔÊÇchar¡¢short»òintÀàÐÍ£¬¶øÇÒÊÇ×÷ΪÎÞ·ûºÅÊý½øÐвÙ×÷¡£ ? µ±±í´ïʽ¹ýÓÚ¸´ÔÓʱÐèҪʹÓý϶àµÄÎïÀí¼Ä´æÆ÷£¬ÓпÉÄܲúÉú³åÍ»¡£

? GNU ARM±àÒë»·¾³ÏÂÄÚǶ»ã±àÓïÑÔARM¿ª·¢¹¤¾ßÉÔÓвî±ð£¬²»ÄÜÖ±½ÓÒýÓÃCÓï

ÑÔÖеıäÁ¿¡£ £¨2£©ÎïÀí¼Ä´æÆ÷

²»ÒªÖ±½ÓÏò³ÌÐò¼ÆÊýÆ÷PC¸³Öµ£¬³ÌÐòµÄÌø×ªÖ»ÄÜͨ¹ýB»òBLÖ¸ÁîʵÏÖ¡£

Ò»°ã½«¼Ä´æÆ÷R0¡«R3¡¢R12¼°R14ÓÃÓÚ×Ó³ÌÐòµ÷Óôæ·ÅÖмä½á¹û£¬Òò´ËÔÚÄÚǶ»ã±àÖ¸ÁîÖУ¬Ò»°ã²»Òª½«ÕâЩ¼Ä´æÆ÷ͬʱָ¶¨ÎªÖ¸ÁîÖеÄÎïÀí¼Ä´æÆ÷¡£

ÔÚÄÚǶµÄ»ã±àÖ¸ÁîÖÐʹÓÃÎïÀí¼Ä´æÆ÷ʱ£¬Èç¹ûÓÐCÓïÑÔ±äÁ¿Ê¹ÓÃÁ˸ÃÎïÀí¼Ä´æÆ÷£¬Ôò±àÒëÆ÷½«ÔÚºÏÊʵÄʱºò±£´æ²¢»Ö¸´¸Ã±äÁ¿µÄÖµ¡£ÐèҪעÒâµÄÊÇ£¬µ±¼Ä´æÆ÷SP¡¢SL¡¢FPÒÔ¼°SBÓÃ×÷ÌØ¶¨µÄÓÃ;ʱ£¬±àÒëÆ÷²»Äָܻ´ÕâЩ¼Ä´æÆ÷µÄÖµ¡£

ͨ³£ÔÚÄÚǶ»ã±àÖ¸ÁîÖв»ÒªÖ¸¶¨ÎïÀí¼Ä´æÆ÷£¬ÒòΪÓпÉÄÜ»áÓ°Ïì±àÒëÆ÷·ÖÅä¼Ä´æÆ÷£¬½ø¶ø¿ÉÄÜÓ°Ïì´úÂëµÄЧÂÊ¡£ £¨3£©±êºÅ¡¢³£Á¿¼°Ö¸ÁîÕ¹¿ª

? CÓïÑÔ³ÌÐòÖеıêºÅ¿ÉÒÔ±»ÄÚǶµÄ»ã±àÖ¸ÁîËùʹÓᣵ«ÊÇÖ»ÓÐBÖ¸Áî¿ÉÒÔʹÓÃCÓï

ÑÔ³ÌÐòÖеıêºÅ£¬BLÖ¸Áî²»ÄÜʹÓÃCÓïÑÔ³ÌÐòÖеıêºÅ¡£ £¨4£©ÄÚ´æµ¥ÔªµÄ·ÖÅä

? ÄÚǶ»ã±àÆ÷²»Ö§³Ö»ã±àÓïÑÔÖÐÓÃÓÚÄÚ´æ·ÖÅäµÄα²Ù×÷¡£ËùÓõÄÄÚ´æµ¥ÔªµÄ·ÖÅä¶¼ÊÇ

ͨ¹ýCÓïÑÔ³ÌÐòÍê³ÉµÄ£¬·ÖÅäµÄÄڴ浥Ԫͨ¹ý±äÁ¿ÒÔ¹©ÄÚǶµÄ»ã±àÆ÷ʹÓá£

? £¨5£©SWIºÍBLÖ¸Áî

? SWIºÍBLÖ¸ÁîÓÃÓÚÄÚǶ»ã±àʱ£¬³ýÁËÕý³£µÄ²Ù×÷ÊýÓòÍ⣬»¹±ØÐëÔö¼ÓÈçÏÂ3¸ö¿É

Ñ¡µÄ¼Ä´æÆ÷ÁÐ±í£º

? ÓÃÓÚ´æ·ÅÊäÈëµÄ²ÎÊýµÄ¼Ä´æÆ÷ÁÐ±í¡£ ? ÓÃÓÚ´æ·Å·µ»Ø½á¹ûµÄ¼Ä´æÆ÷ÁÐ±í¡£

? ÓÃÓÚ±£´æ±»µ÷ÓõÄ×Ó³ÌÐò¹¤×÷¼Ä´æÆ÷µÄ¼Ä´æÆ÷ÁÐ±í¡£

ÁªÏµ¿Í·þ£º779662525#qq.com(#Ìæ»»Îª@)