原创 Gun汇编的保留字

2006-10-23 15:09 4643 6 8 分类: MCU/ 嵌入式

Gun汇编的保留字不是很多书会提到的, 查找起来很不方便, 我自己整理了一下. 希望对以后有用. 


.ascii  “<string>”<?xml:namespace prefix = o />


string当成数据插入汇编中,armasmDCB类似.


.ascix  “<string>”


类似 .ascii , 但在每个字符串后面跟一个零字节.


.balign <power_of_2> {, <fill_value> {, <max_padding> } }


对齐地址到<power_of_2>字节. 汇编器通过添加<fill_value>字节或者默认值来对齐, 如果需要填充的字节数大于<max_padding>, 则对齐不会发生.


.byte  <bytr1> {, <byte2>} ….


把一系列的字节当成数据插入汇编, armasmDCB类似.


.code  <number_of_bits>


bit 位役置指令的长度. 16位是Thumb, 32位是ARM, 这和armasmCODE16CODE32类似.


.else


使用在.if .endif 之间. armasmr ELSE类似.


.end


标记一个汇编文件的结束. 这个通常被省略.


.endif


标志着条件汇编代码块的结束, armasmENDIF类似


.endm


结束一上宏定义. armasmMEND类似


.endr


结束一个循环, armasmWEND类似


.equ <symbol name>, <value>


设置一个标号(symbol)的值, armasmEQU类似


.err


以一个错误导致汇编的结束.


.exitm


从当前宠定义体中提前退出. armasmMEXIT类似


.global <symbol>


给标号<symbol>一个外部连接. armasmr EXPORT类似


.hword <short1> {, <short2>} …


把一系列的16位数当成数据插入汇编, armasm DCW类似


.if < logical_expression>


定义一个条件块, .endif 结束. armasmr IF类似


.ifdef <symbol>


    如果<symbol> 是定义了的,则包含(include)下面的一段代码块, 这个代码块以 .endif来结束.


.ifndef <symbol>


   如果<symbol> 是没有定义了的,则包含(include)下面的一段代码块, 这个代码块以 .endif来结束.


.include  “<filename>”


包含指定的源文件. armasmr INCLUDE或者和C#INCLUDE类似


.irp <param> {, <val_1>} {, <val_2>}….


    开启一个循环的代码块,块中每个value列表的value 执行一次, 块以一个 .endr 来标记结束. 在循环的代码块中, 使用 \<param>来替代value列表中的value.


.macro <name> { <arg_1>} {,<arg_2>} …{, <arg_k>}


    定义一个含有k个参数的名为<name>的宏. 宏定义必须以 .endm 来标记结束. 如果想提前跳出宏, 则可使用 .exitm . 这些和armasm中的MACRO, MEND和平MEXIT类似, 必须在宏参数前加一个”\”


.macro SHIFTLEFT a, b


      .if  \b<0


          MOV \a, \a, ASR #-\b


          .exitm


      .endif


      MOV  \a, \a, LSL #\b


.endm


.rept <number_of_times>


按照指定的次数重复执行一个代码块, 这个块以 .endr 来标记结束


<register_name> .req <register_name>


     为一个寄存器取个名字, tkg armasmRN类似, 但这里右边的寄存器不能只给出寄存器号, 必须给出具体的寄存器, acc  .req  r0.


.section <section_name> {, “<flags>”}


开始一个新的代码段或者数据段, 通常, 代码段称为 .text, 一个经过初始化的数据段称为 .data,  一个没有初始化的数据段称为 .bss . 它们都有默认的标记(flag), 连接器识别它们的默认名字, armasmAREA类似,


ELF格式文件的<flag>


     标记                      含义


       a                      可分配段


       w                      可写段


       x                       可执行段


.set <variable_name> , <variable_value>


设置一个变量的值, armasmSETA类似


.space <number_of_byte> {,<fill_byte>}


生成给定数量的字节, 如果指定了<fill_byte>, 则以指定的值填充每个字节, 如果没指定, 则以0 填充每个字节. armasmSPACE类似


.word <word1> {,<word2>}…


        把一系列的32位字当成数据插入汇编, armasmDCD类似

PARTNER CONTENT

文章评论2条评论)

登录后参与讨论

用户1012427 2008-3-18 16:47

单片机开发

用户1360030 2007-5-5 19:09

请问    MACRO
$HandlerLabel HANDLER $HandleLabel

$HandlerLabel
    sub     sp,sp,#4     ;decrement sp(to store jump address)
    stmfd   sp!,{r0}     ;PUSH the work register to stack(lr does't push because it return to original address)
    ldr     r0,=$HandleLabel;load the address of HandleXXX to r0
    ldr     r0,[r0]     ;load the contents(service routine start address) of HandleXXX
    str     r0,[sp,#4]     ;store the contents(ISR) of HandleXXX to stack
    ldmfd   sp!,{r0,pc}     ;POP the work register and pc(jump to ISR)
    MEND

 

这一段中的SUB   SP,SP,#4怎么保存的PC啊,好象单独这一句不能保存跳转地址吧,看不懂,请大虾指教,学习了,谢谢

用户42895 2006-10-23 16:55

是这个?
http://blog.21ic.com/more.asp?name=verver&id=30725
相关推荐阅读
用户58572 2006-10-14 21:18
ARM学习笔记
1.寄存器R16用作CPSR(Current Program Status Register,当前程序状态寄存器),CPSR可在任何运行模式下被访问,它包括条件标志位、中断禁止位、当前处理器模式标志位...
用户58572 2006-10-14 21:12
画中画的硬件原理
要实现画中画功能,首先得有两个前提,背景图片,动画或视频,在图片中嵌入视频信息。    先用ARM产生图片信息,用视频解码芯片解调视频信息,再用FPGA把这两路信号合成,输出到FTF LCD上显示,难...
用户58572 2006-10-14 21:03
44B0的初始化程序的理解
 44B0的初始化程序就是初始化各个关键的寄存器,建立中断向量,然后转移到主函数去执行程序。      不过44B0不支持地址映射,所以程序不COPY到RAM种执行。44B0初始化对我们广大初学者来说...
用户58572 2006-10-14 21:02
通过网络烧写39VF160步骤
通过FTP烧写FLASH是一个编程工具,提供对39VF160的编程,这个程序出售时已经烧写到ARM anywhereII的29F040中,用户拿到开发板后可以直接使用。具体内容1.电路连接:     ...
用户58572 2006-10-13 20:39
砌墙工人的命运
三个工人砌一堵墙   有人过来说:“你们在干什么?”   第一个没好气的地说:“没看见吗?砌墙。”   第二个抬头笑了笑,说:“我们在盖一幢高楼。”   第三个边干边哼着歌曲,他的笑容很灿烂开心:我们...
我要评论
2
6
关闭 站长推荐上一条 /3 下一条