完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
1、 IAR汇编指令SFB和SFE
SFB Segment begin 段开始 语法格式 SFB(segment [{+|-} offset]) 参数 segment: 可重定位段的段名, 必须在SFB使用前已定义 offset : 从开始地址的偏移, 是一个可选参数, 当偏移量省略时, 可以不添加小括号 描述 SFB 右边可以接受一个操作数, 而且这个操作数必须是一个可重位段的段名. 这个操作符计算段的首字节地址. 这个操作发生在连接时. 例 NAME demo RSEG CODE start: DC16 SFB(CODE) 即使上面的代码和多个其他的模块进行连接, start标号处仍被置为段的首字节地址 语法格式 SFE (segment [{+|-} offset]) 参数 segment: 可重定位段的段名, 必须在SFB使用前已定义 offset : 从开始地址的偏移, 是一个可选参数, 当偏移量省略时, 可以不添加小括号 描述 SFE在其右边接收一个操作数. 操作数必须是一个可重定位段的段名. SFE操作符将段起始地址和段大小相加. 这个操作在连接时发生. SFE accepts a single operand to its right. The operand must be the name of a relocatable segment. The operator evaluates to the segment start address plus the segment size. This evaluation takes place at linking time. 例 NAME demo RSEG CODE end: DC16 SFE(CODE) 即使当上面的代码被和多个模块想连接时, end标号仍然会被置为段最后一个字节的地址. Even if the above code is linked with many other modules, end will still be set to the address of the last byte of the segment. 段MY_SEGMENT的大小可以通过以下方式计算而得: SFE(MY_SEGMENT)-SFB(MY_SEGMENT) arm中的几种跳转 arm汇编的跳转指令无非是b和ldr。但是如果没有足够理解,别人灵活的用一下你就犯晕了。 首先我们要知道两者的两个本质区别: 1、b是位置无关的,ldr不是位置无关的。 2、b的范围只能是+—32MB,而ldr是4GB。 在arm的启动汇编的中断向量表是必然用跳转指令的,但是就是这里也有很多实现形式: 方式1: B InitReset ; 0x00 Reset handler undefvec: B undefvec ; 0x04 Undefined Instruction swivec: B swivec ; 0x08 Software Interrupt pabtvec: B pabtvec ; 0x0C Prefetch Abort dabtvec: B dabtvec ; 0x10 Data Abort rsvdvec: B rsvdvec ; 0x14 reserved irqvec: B |
|
|
|
只有小组成员才能发言,加入小组>>
3320 浏览 9 评论
2998 浏览 16 评论
3496 浏览 1 评论
9066 浏览 16 评论
4089 浏览 18 评论
1189浏览 3评论
612浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
602浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2339浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1899浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-26 21:37 , Processed in 1.040631 second(s), Total 50, Slave 41 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (威廉希尔官方网站 图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号