ARM标准汇编与GNU汇编
进位标志修改指令:
循环:
loop
loope/loopz
loopne/loopnz
指令格式为: loopxx address
另有一个比较篇的如下:
ARM汇编和Gnu汇编的转换
将ARM ADS下的汇编码移植到GCC for ARM编译器时,有如下规则:
1, 注释行以"@"或""代替";"
2, GET或INCLUDE => .INCLUDE
如:get option.a =>
3, EQU => .equ
TCLK2
BUSWIDTH SETA 16
4, EXPORT => .global
5, DCD => .long
6, IF :DEF: => .IFDEF
7,
NOTE:在被include的头文件中,如"option.a"中,不再需要.end,否则会导致主汇编程序结束。
8,
Entry =>
AREA Word, CODE, READONLY ==> .text
AREA Block, DATA, READWRITE ==> .data
CODE32
CODE16
9,
开始看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寄存器中去。
这些是在分析代码时候遇到的不明白的地方,经过查找资料的出来的。
ARM标准汇编GNU汇 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)
