ARMϰÌâ´ð°¸ ÏÂÔØ±¾ÎÄ

¿ÕµÝ¼õ¶ÑÕ»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