微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > ARM标准汇编与GNU汇编

ARM标准汇编与GNU汇编

时间:11-21 来源:互联网 点击:

进位标志修改指令:
CLC 清空进位标志(设置为0)
CMC 对进位标志求反(把它改变为相反的值)
STC 设置进位标志(设置为1)


循环:
loop 循环直到ECX寄存器为0
loope/loopz 循环直到ecx寄存器为0 或者没有设置ZF标志
loopne/loopnz 循环直到ecx为0或者设置了ZF标志

指令格式为: loopxx address 注意循环指令只支持8位偏移地址

另有一个比较篇的如下:

ARM汇编和Gnu汇编的转换

将ARM ADS下的汇编码移植到GCC for ARM编译器时,有如下规则:
1, 注释行以"@"或""代替";"

2, GET或INCLUDE => .INCLUDE
如:get option.a => .include "option.a"

3, EQU => .equ
TCLK2 EQU PB25 => .equ TCLK2, PB25
SETA ==> .equ
SETL ==> .equ
BUSWIDTH SETA 16 => .equ BUSWIDTH, 16

4, EXPORT => .global
IMPORT => .extern
GBLL => .global
GBLA => .global

5, DCD => .long

6, IF :DEF: => .IFDEF
ELSE => .ELSE
ENDIF => .ENDIF
:OR: => |
:SHL: =>

7, END =>.end
NOTE:在被include的头文件中,如"option.a"中,不再需要.end,否则会导致主汇编程序结束。

8, 符号定义加":"号
Entry => Entry:
AREA Word, CODE, READONLY ==> .text
AREA Block, DATA, READWRITE ==> .data
CODE32 ==> .arm
CODE16 ==> .thumb

9, MACRO ==> .macro
MEND ==> .endm

开始看start.s中的代码,又一句.balignl 16,0xdeadbeef,不知什么意思,网上搜了一下了解到这条

命令的作用如下:



.balign[wl] abs-expr, abs-expr, abs-expr



增加位置计数器(在当前子段)使它指向规定的存储边界。第一个表达式参数(结果必须是纯粹的数字)是必需参数:边界基准,单位为字节。例如,‘.balign 8’向后移动位置计数器直至计数器的值等于8的倍数。如果位置计数器已经是8的倍数,则无需移动。第2个表达式参数(结果必须是纯粹的数字)给出填充字节的值,用这个值填充位置计数器越过的地方。第2个参数(和逗点)可以省略。如果省略它,填充字节的值通常是0。但在某些系统上,如果本段标识为包含代码,而填充值被省略,则使用no-op指令填充空白区。第3个参数的结果也必须是纯粹的数字,这个参数是可选的。如果存在第3个参数,它代表本对齐命令允许跳过字节数的最大值。如果完成这个对齐需要跳过的字节数比规定的最大值还多,则根本无法完成对齐。您可以在边界基准参数后简单地使用两个逗号,以省略填充值参数(第二参数);如果您在想在适当的时候,对齐操作自动使用no-op指令填充,本方法将非常奏效。.balignw和.balignl是.balign命令的变化形式。.balignw使用2个字节来填充空白区。.balignl使用4字节来填充。例如,.balignw 4,0x368d将地址对齐到4的倍数,如果它跳过2个字节,GAS将使用0x368d填充这2个字节(字节的确切存放位置视处理器的存储方式而定)。

如果它跳过1或3个字节,则填充值不明确。

GNU中的.word的另一种作用
标签: word 2011-04-13 18:13

不管是ARM的汇编还是GNU的汇编,都有DCD或者.word命令,它是用来开辟一个字空间。

如:标识1 .word 标识2 它表示将标识2的数据存放在以标识1的地址上去。这个.word和DCD等指令,相当于C语言的指针(如 char * p)。那么在汇编中用以上的代码声明的标识1不需要在该文件中用extern的字段来表明是可以在外部引用的,它是内存空间,可以在每个文件中使用这个标识1.而ldr pc,内存地址 它表示将内存地址中的数据送入pc寄存器中去,而ldr pc,=内存地址它表示将内存地址放入pc寄存器中去。

这些是在分析代码时候遇到的不明白的地方,经过查找资料的出来的。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top