打印
[ZLG-ARM]

请教 ZLG_ARM!

[复制链接]
1289|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
南京土著人|  楼主 | 2007-5-23 12:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
ARM, lg, TE, ST, ps
在IRQ.s中有这么一段:


$IRQ_Label
        SUB     LR, LR, #4                      ; Calculate the returning address 计算返回地址
        STMFD   SP!, {R0-R3, R12, LR}           ; Protects the task environments 保存任务环境
        MRS     R3, SPSR                        ; Protects the status variable 保存状态
        STMFD   SP, {R3,LR}^                    ; Protects SPSR and SP in user status, Notice: DO NOT write back.保存SPSR和用户状态的SP,注意不能回写
                                                ; If the SP is written back, it should be adjusted to its appropriate value later.如果回写的是用户的SP,所以后面要调整SP
        NOP
        SUB     SP, SP, #4*2



我想知道的是:SUB     SP, SP, #4*2 这个是怎么计算的,为什么这样计算?
希望周工能给点意见!

相关帖子

沙发
南京土著人|  楼主 | 2007-5-23 12:39 | 只看该作者

11

我刚才自己想了一下,不知道对不对!
还望指教。
因为STMFD   SP, {R3,LR}^ ,这句话是保存的用户的信息,但是SP指针没有更新(即在这句话入栈时,SP还是指在原来的地方没有动过)。
加了SUB     SP, SP, #4*2 来使SP更新到栈顶!

那我就不是很明白了难道STMFD   SP, {R3,LR}^ 保存用户的信息SP不能加“!”号的吗?这样不就更新了吗?即STMFD   SP!, {R3,LR}^。
这是我自己认为的,希望大虾能指点迷津!
小弟不胜感激!

使用特权

评论回复
板凳
南京土著人|  楼主 | 2007-5-24 11:00 | 只看该作者

????

周工怎么不过来侃侃啊 

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

11

帖子

1

粉丝