ϵͳѧϰARMÖ®ËÄ --GNUµÄαָÁ -
[µ¼¶Á]
×ªÔØ×Ôhttp://blog.csdn.net/qqliyunpeng/article/details/48791487Ò»¡¢Î±Ö¸Áî µÄº¬Ò壺 αָÁîÊDZàÒëÆ÷Ö§³ÖµÄÖ¸Á²»ÊÇÓ²¼þоƬ֧³ÖµÄÖ¸Áî¡£ ±àÒëÆ÷ÔÚ±àÒëʱ£¬»á°ÑαָÁîת»¯¶ÔÓ¦µÄоƬ֧³ÖµÄÖ¸Áî¡£
×ªÔØ×Ôhttp://blog.csdn.net/qqliyunpeng/article/details/48791487
±¾ÎÄÒýÓõØÖ·: http://www.21ic.com/app/mcu/201806/764474.htm
αָÁîÊDZàÒëÆ÷Ö§³ÖµÄÖ¸Á²»ÊÇÓ²¼þоƬ֧³ÖµÄÖ¸Áî¡£
±àÒëÆ÷ÔÚ±àÒëʱ£¬»á°ÑαָÁîת»¯¶ÔÓ¦µÄоƬ֧³ÖµÄÖ¸Áî¡£
αָÁ°üÀ¨£ºÎ±²Ù×÷ºÍαָÁî
¶þ¡¢Î±²Ù×÷£º1. Êý¾Ý¶¨Ò壨Data Definition£©Î±²Ù×÷£ºÊý¾Ý¶¨Òåα²Ù×÷Ò»°ãÓÃÓÚÎªÌØ¶¨µÄÊý¾Ý·ÖÅä´æ´¢µ¥Ôª£¬Í¬Ê±¿ÉÍê³ÉÒÑ·ÖÅä´æ´¢µ¥ÔªµÄ³õʼ»¯¡£
³£¼ûµÄÊý¾Ý¶¨Òåα²Ù×÷ÓÐÈçϼ¸ÖÖ£º
.byte µ¥×Ö½Ú¶¨Òå .byte 0x12,¡¯a¡¯,23
.short ¶¨Òå2×Ö½ÚÊý¾Ý .short 0x1234,65535
.long /.word ¶¨Òå4×Ö½ÚÊý¾Ý .word 0x12345678
.quad ¶¨Òå8×Ö½Ú .quad 0x1234567812345678
.float ¶¨Ò帡µãÊý .float 0f3.2
.string/.asciz/.ascii ¶¨Òå×Ö·û´® .ascii ¡°abcd\0¡±,
×¢Ò⣺.asciiα²Ù×÷¶¨ÒåµÄ×Ö·û´®ÐèҪÿÐÐÌí¼Ó½áβ×Ö·û '\0'£¬ÆäËû²»ÐèÒª
Àý×Ó£º
int val = 0x11223344;
val:
.word 0x11223344
×¢Ò⣺
1--±äÁ¿µÄ¶¨Òå·ÅÔÚ£¬stopºó£¬.endǰ
2--±êºÅÊǵØÖ·µÄÖú¼Ç·û£¬±êºÅ²»Õ¼´æ´¢¿Õ¼ä¡£
2. »ã±à¿ØÖÆÎ±²Ù×÷£º£¨1£©.if .else .endif ---- ÀàËÆcÓïÑÔÀïµÄÌõ¼þ±àÒë
»ã±à¿ØÖÆÎ±²Ù×÷ÓÃÓÚ¿ØÖÆ»ã±à³ÌÐòµÄÖ´ÐÐÁ÷³Ì
.if¡¢.else .endifα²Ù×÷Äܸù¾ÝÌõ¼þµÄ³ÉÁ¢Óë·ñ¾ö¶¨ÊÇ·ñÖ´ÐÐij¸öÖ¸ÁîÐòÁС£
µ±.ifºóÃæµÄÂß¼±í´ïÊ½ÎªÕæ£¬ÔòÖ´ÐÐ.ifºóµÄÖ¸ÁîÐòÁУ¬·ñÔòÖ´ÐÐ.elseºóµÄÖ¸ÁîÐòÁУ»
.if¡¢.else¡¢.endifαָÁî¿ÉÒÔǶÌ×ʹÓá£
.if logical-expressing
¡
.else
¡
.endif
£¨2£©.macro£¬.endm --- ÀàËÆcÓïÑÔÀïµÄºêº¯Êý
macroα²Ù×÷¿ÉÒÔ½«Ò»¶Î´úÂ붨ÒåΪһ¸öÕûÌ壬³ÆÎªºêÖ¸Áî¡£
È»ºó¾Í¿ÉÒÔÔÚ³ÌÐòÖÐͨ¹ýºêÖ¸Áî¶à´Îµ÷ÓøöδúÂë¡£
ÆäÖУ¬$±êºÅÔÚºêÖ¸Áî±»Õ¹¿ªÊ±£¬±êºÅ»á±»Ì滻ΪÓû§¶¨ÒåµÄ·ûºÅ¡£
ºê²Ù×÷¿ÉÒÔʹÓÃÒ»¸ö»ò¶à¸ö²ÎÊý£¬µ±ºê²Ù×÷±»Õ¹¿ªÊ±£¬ÕâЩ²ÎÊý±»ÏàÓ¦µÄÖµÌæ»»¡£
Óï·¨¸ñʽ£º
.macro {$label} Ãû×Ö{$parameter{,$parameter}¡}
¡¡..code
.endm
×¢Ò⣺Ïȶ¨ÒåºóʹÓÃ
.macro func1
mov r1,#1
mov r2,#2
mov r3,#3
.endm
func1
func1
func1
3.ÔÓÏîα²Ù×÷£º.arm .arm ¶¨ÒåһϴúÂëʹÓÃARMÖ¸Á±àÒë
.thumb .thumb ¶¨ÒåһϴúÂëʹÓÃThumbÖ¸Á±àÒë
.section .section expr ¶¨ÒåÒ»¸ö¶Î¡£expr¿ÉÒÔʹ.text .data. .bss
.text .text {subsection} ½«¶¨Òå·û¿ªÊ¼µÄ´úÂë±àÒëµ½´úÂë¶Î
.data .data {subsection} ½«¶¨Òå·û¿ªÊ¼µÄ´úÂë±àÒëµ½Êý¾Ý¶Î,³õʼ»¯Êý¾Ý¶Î
.bss .bss {subsection} ½«±äÁ¿´æ·Åµ½.bss¶Î,δ³õʼ»¯Êý¾Ý¶Î
.align .align{alignment}{,fill}{,max} ͨ¹ýÓÃÁã»òÖ¸¶¨µÄÊý¾Ý½øÐÐÌî³äÀ´Ê¹µ±Ç°Î»ÖÃÓëÖ¸¶¨±ß½ç¶ÔÆë
.align 4 --- 16×Ö½Ú 2µÄ4´Î
.align (4) --- 4×Ö½Ú
.org .org offset{,expr} Ö¸¶¨´Óµ±Ç°µØÖ·¼ÓÉÏoffset¿ªÊ¼´æ·Å´úÂ룬
²¢ÇÒ´Óµ±Ç°µØÖ·µ½µ±Ç°µØÖ·¼ÓÉÏoffsetÖ®¼äµÄÄÚ´æµ¥Ôª£¬ÓÃÁã»òÖ¸¶¨µÄÊý¾Ý½øÐÐÌî³ä
_start »ã±à³ÌÐòµÄȱʡÈë¿ÚÊÇ_ start±êºÅ,Óû§Ò²¿ÉÒÔÔÚÁ¬½Ó½Å±¾ÎļþÖÐÓÃENTRY±êÖ¾Ö¸Ã÷ÆäËüÈë¿Úµã.
.global/ .globl £ºÓÃÀ´ÉùÃ÷Ò»¸öÈ«¾ÖµÄ·ûºÅ
.end Îļþ½áÊø
.include ¸ñʽ£º.include ¡°filename¡±
°üº¬Ö¸¶¨µÄÍ·Îļþ, ¿ÉÒÔ°ÑÒ»¸ö»ã±à³£Á¿¶¨Òå·ÅÔÚÍ·ÎļþÖÐ
.equ ¸ñʽ£º.equ symbol, expression
°Ñijһ¸ö·ûºÅ(symbol)¶¨Òå³Éijһ¸öÖµ(expression).¸ÃÖ¸Áî²¢²»·ÖÅä¿Õ¼ä.(cÓïÑ﵀ #define)
#define PI 3.1415 == .equ PI, 3.1415
¹Ø¼üµã£ºÎ±Ö¸ÁîÔÚ±àÒëʱ»áת»¯Îª¶ÔÓ¦µÄARMÖ¸Áî
1.ADRαָÁ --°Ñ±êÇ©ËùÔڵĵØÖ·¼ÓÔØµ½¼Ä´æÆ÷ÖÐADRαָÁîΪС·¶Î§µØÖ·¶ÁȡαָÁʹÓõÄÏà¶ÔÆ«ÒÆ
·¶Î§£ºµ±µØÖ·ÖµÊÇ×Ö½Ú¶ÔÆë (8λ)ʱ£¬È¡Öµ·¶Î§Îª-255¡«255£¬
µ±µØÖ·ÖµÊÇ×Ö¶ÔÆë(32λ)ʱ£¬È¡Öµ·¶Î§Îª-1020¡«1020¡£
Óï·¨¸ñʽ:
ADR{cond} register,label
ADR R0, lable
2. ADRLαָÁ --½«Öеȷ¶Î§µØÖ·¶ÁÈ¡µ½¼Ä´æÆ÷ÖÐADRLαָÁîΪÖеȷ¶Î§µØÖ·¶ÁȡαָÁʹÓÃÏà¶ÔÆ«ÒÆ
·¶Î§£ºµ±µØÖ·ÖµÊÇ×Ö½Ú¶ÔÆëʱ£¬È¡Öµ·¶Î§Îª-64¡«64KB£»
µ±µØÖ·ÖµÊÇ×Ö¶ÔÆëʱ£¬È¡Öµ·¶Î§Îª-256¡«256KB
Óï·¨¸ñʽ£º
ADRL{cond} register,label
ADRL R0£¬lable
3. LDRαָÁî: LDRαָÁî×°ÔØÒ»¸ö32λµÄ³£ÊýºÍÒ»¸öµØÖ·µ½¼Ä´æÆ÷¡£Óï·¨¸ñʽ£º
LDR{cond} register,=[expr|label-expr]
LDR R0£¬=0XFFFF0000
×¢Ò⣺
£¨1£©ldrαָÁîºÍldrÖ¸ÁîÇø·Ö
ldr r1,=val @ r1 = val ÊÇαָÁî
ldr r2,val @ r1 = *val ÊÇ armÖ¸Áî
.val
.word 0x11223344
£¨2£©ÔõôȡÓÃldrαָÁîʵÏÖ³¤Ìø×ª
ldr pc£¬=32λµØÖ·
£¨3£©±àÂëÖнâ¾öÁ¢¼´ÊýµÄÎÊÌâ
ÓÃarmαָÁîldr
0x999 ²»ÊÇÁ¢¼´Êý£¬
ldr r0,=0x999
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ ²é¿´ÆÀÂÛ »Ø¸´
"ϵͳѧϰARMÖ®ËÄ --GNUµÄαָÁ -"µÄÏà¹ØÎÄÕÂ
ÈÈÃÅÎÄÕÂ
- µ¥Æ¬»úÊÖ»úµç°å³äµçÆ÷³ÌÐò(PWM×Ô¶¯µ÷ѹ) -
- S3C2440 ²âÊÔ³ÌÐò(ËÄ) ÍⲿÖжÏʵÑé -
- PICÖжϵÄÓ¦ÓÃ(¶þ£© -
- ARM ϵÁÐ -- Ϊ ARM Linux ÖÆ×÷¸ùÎļþϵͳ -
- STM32ÖÐÓ³Éä C¿âº¯Êýprintf -
- ds1302µÄ51×Ó³ÌÐò -
- LM3S1138ÈëÃÅ3£¬ÖÐ¶Ï -
- ¶¨Ê±Æ÷µÄÓ¦ÓÃ---ÖжϷ½Ê½---ÈÃ8¸öLEDµÆ£¬×óÓÒ¸÷4¸öÀ´
- ×ÔÖÆµ¥Æ¬»ú֮ʮ¡¡AT89S51µÄÉÏÀµç×èÎÊÌâ -
- stm32 ÔÚÏßÉý¼¶Ö®Ìø×ªº¯Êý -