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

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