当前位置: 代码迷 >> 汇编语言 >> 新手请问ARM汇编
  详细解决方案

新手请问ARM汇编

热度:1010   发布时间:2013-02-26 00:00:00.0
新手请教ARM汇编
下面是C:
char   Test   (int   Address)
{
        if   (Address   ==   0x21)
        {
                Test2(Address);
        }
        return   (0);
}
汇编:
Test   PROC
                CMP             r0,#0x21
                PUSH           {r4,lr}
                BNE             |L1.11744|
                BL               Test2
|L1.11744|
                MOVS           r0,#0
                POP             {r4,pc}
                ENDP

我不明白的是为什么要将r4压栈?PUSH           {r4,lr}   具体是什么意思呢?
感觉r4是保存了lr,但是这里怎么是用PUSH呢?



------解决方案--------------------------------------------------------
翻《ARM嵌入式系统基础教程》、《深入浅出ARM7》
------解决方案--------------------------------------------------------
首先那种程序只是分析,而不是用来运行的.
push 应该放在最前面,这个程序并不需要把r4压栈,因为没用到它,
不过你得注意,因为c 编译器要考虑通用性,把c翻译成汇编的.当然没有自己手写效率高啊!
你可以看一下标准的教程.
  相关解决方案