LTORG指令

LDR伪指令在汇编时,如果立即数可以用<shifter_operand>表示的话就替换为MOV或MVN指令;如果不能用其表示则需要将该立即数放到一个文字池中,并生成一条将该文字池内容加载到目标寄存器的LDR指令。而使用LDR指令必须保证文字池在其可以访问的地址范围之内,对于ARM指令集来说就是4KB,所以必须在LDR指令前后4KB的范围内用LTORG显式地在代码段中添加一个文字池。

一直不明白汇编代码中的LTORG指令, 今天终于能明白了, 写出来大家看看.

LTORG是在此指令出现的地方放一个文本池(literal pool). 在ARM汇编中常用到

    ldr   r0, =instruction     将地址instruction载入r0.

此时编译器将ldr尽可能的转变成mov或mvn指令.  如果转变不成, 将产生一个ldr指令, 通过pc相对地址从一块保存常数的内存区读出instruction的值. 此内存区既是文本池. 一般的, 文本池放在END指令之后的地方. 但是, 如果偏移地址大于4k空间, ldr指令会出错(因为ldr的相对偏移地址为12-bit的值). 此时使用LTORG放到会出错的ldr指令附近, 以解决此问题. 编译器会收集没有分配的ldr的值放到此文本池中.

就这么些了.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值