嵌入式学习笔记-汇编常用符号与伪指令

  1. " @ "汇编指令中的注释符号
    " # " 表示后面附带的是立即数
    " : "以冒号结尾的指令是标号,标记指令的被分配的地址,类似与c中定义的变量,通过变量代替地址
    " . "表示当前指令地址 例如,汇编中死循环的实现 b .

  2. 伪指令前面通常都带一个点,以显示出于指令的不同
    .globe _start给start外部链接属性
    .section .text 指定当前代码段
    .ascii/.byte/.short/.long/.word
    .quad/.float/ 在存储器中分配对应类型大小的字节,初始化制定的变量
    .align 对齐平方后方为对齐位数
    如.align 4 16字节对齐
    .balignl 对齐并填充,填充的为后面的数
    如.blaignl 16 0xFF 16字节对齐 b表示按位填充,l表示按4字节填充
    .equ 类比于c语言宏定义,起相等替换作用

    .end 标识文件结束
    .include 同include
    .code32/.arm arm指令
    .code16/.thumb thumb指令

    ldr 大范围的地址加载指令
    ldr既有指令也有伪指令,区别在于使用ldr指令有一些需要注意的点,如合法立即数非法立即数,而使用伪指令则不存在这种问题,因为编译器会将你输入立即数的转换成为合法的方式加载到寄存器

//伪指令与指令加载立即数的方式
ldr	r0,#0x1FF
ldr    r0,	=0x1f  	@涉及到 合法/非法立即数和内存池
adr 小范围的地址加载指令
adrl 中等范围的地址加载指令
	ldr是基于绝对地址,是真实的地址,adr是基于相对地址,即基于pc指针的地址通过偏移得到![在这里插入图片描述](https://img-blog.csdnimg.cn/20210126203408408.PNG?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1RpbmVsaW5lcw==,size_16,color_FFFFFF,t_70#pic_center)

nop 空指令
  1. 补充:合法立即数与非法立即数,由于一条指令只有32位,而指令又要存放其他数据,所以不能所有为位数都用来存放立即数,arm规定只能附带8位立即数,但这个立即数是可以通过左移或右移得到的,即0xff000000也属于合法立即数

伪指令和编译器有关,博主学习的是gnu工具链,所以学习的是gnu工具链下的伪指令

你可能感兴趣的:(嵌入式学习笔记,编译器,嵌入式,arm)