GNU汇编的保留字 (网上都是,没法找出处了)

本文列举了GNU汇编中的各种保留字,包括.ascii、.asciz、.balign等,并详细解释了它们的功能和用法,例如如何创建对齐、如何定义宏等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

GNU汇编的保留字(转载)

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

 

.ascii  “<string>”

 

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的#i nclude类似

 

.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类似

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值