[程序源码] GNU汇编指令

[复制链接]
1660|5
 楼主| wahe2008 发表于 2018-8-13 10:14 | 显示全部楼层 |阅读模式
.size __isr_vector, . - __isr_vector
subs r2, #4
这两行代码怎么理解?

ayb_ice 发表于 2018-8-13 10:29 | 显示全部楼层
应该是中断向量定义
r2 -= 4

好像是计算PC的值
 楼主| wahe2008 发表于 2018-8-13 12:38 | 显示全部楼层
__isr_vector是中断向量表的标号,意思应该是求向量表中向量个数
但是.size指令怎么是这样用的.size __isr_vector, . - __isr_vector
一般代码求向量个数是这样的:__Vectors_Size  EQU     __Vectors_End - __Vectors
john_lee 发表于 2018-8-13 17:38 | 显示全部楼层
.size 是设置那个符号的 size 属性。
符号必须是之前定义过的,比如 __isr_vector
  1. __isr_vector:
  2. ...
  3. .size __isr_vector, . - __isr_vector

而 EQU 是定义一个新的符号。

评论

照你所说.size是属性不是运算符号,那后面的‘-’号是什么意思  发表于 2018-8-13 18:42
john_lee 发表于 2018-8-13 23:14 | 显示全部楼层
  1. __isr_vector:
  2. ...
  3. .size __isr_vector, . - __isr_vector

第1行定义了符号 __isr_vector,并置该符号的“值”属性为段的当前“地址”,
第2行生成了一些代码或数据,使当前地址也随之增加了。
第3行设置符号 __isr_vector 的“大小”属性为表达式“. - __isr_vector”,. 是“段”的当前“地址”,- 是“减”,__isr_vector 是引用该符号的“值”(该值在第1行被赋予),表达式的结果就是第1行到第3行之间的代码或数据大小(按byte计)。

一个符号可以有多种属性,其中“值”是最重要也是最常用的;“大小”和“类型”也很常见,比如函数:
  1.     .type       main, %function  
  2. main:

  3.     ...

  4.     .size   main, . - main

调试器就可以从符号 main 取得它的“类型”、“值”、“大小”等属性,从而知道 main 是个函数,它的起始地址和大小。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:奋斗是一种乐趣,追求是一种动力,助人是一种储蓄,吃亏是一种积累,谦和是一种修养,宽容是一种境界,忍让

23

主题

556

帖子

6

粉丝
快速回复 在线客服 返回列表 返回顶部