3754|6

66

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

如何读懂编译器生成的汇编文件 [复制链接]

本帖最后由 dontium 于 2015-1-23 13:40 编辑

想看看编译器到底对程序做了哪些优化,好让自己更好地去改进程序的性能,可是编译器生成的汇编文件里面很多符号和语句确看不懂什么意思。请问该怎么去看呢?

最新回复

下面是C 语言库 rts2xx.lib 中提供的恢复现场例程,其中分明包含 ST0,ST1. ST1 中还存放  DP,ARP,ARB .. 等等主程序重要信息,不保存还得了? **************************************************************************** * FUNCTION DEF : I$$REST *                This function is branched to at the end of an interrupt *                handler to restore the environment of the interrupted *                code.  This function performs the return from interrupt. *                In order to ensure correct restoration of the T register, *                this function assumes that interrupts are disabled during *                its execution. **************************************************************************** I$$REST:         DINT          MAR     *-              ; POINT TO TOP ELEMENT ON STACK          RPTK    6               ; RESTORE TOP 6 ELEMENTS OF STACK          PSHD    *-                           LAR     AR7,*-          ; RESTORE ALL AUX REGISTERS EXCEPT AR1          LAR     AR6,*-          LAR     AR5,*-          LAR     AR4,*-          LAR     AR3,*-          LAR     AR2,*-          LAR     AR0,*-               MAR     *-              ; SKIP T REGISTER (FOR NOW)          LT      *+                        MPYK    1               ; RESTORE LOW PRODUCT REGISTER          LT      *-              ; RESTORE T REGISTER          MAR     *-              ; SKIP LOW PRODUCT REGISTER VALUE          LPH     *-              ; RESTORE HIGH PRODUCT REGISTER          ZALS    *-              ; RESTORE ACCUMULATOR          ADDH    *-          LST     *-              ; RESTORE STATUS REGISTERS          LST1    *-                 ; OLD ARP IS RESTORED *NOW*          EINT                    ; RESTORE INTERRUPTS          RET                     ; RETURN TO INTERRUPTED CODE         RET  详情 回复 发表于 2008-6-5 08:24
点赞 关注

回复
举报

70

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
都是汇编语言的指令,或伪操作,一般没啥实在看不懂的东西呀! 如果是不是2407,列一段实例来探讨探讨.
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
感谢你的回答,后来重新编译了一下,把那些调试信息都去掉了,这下就清楚多了。
是不是编译器生成的汇编文件一般没有什么参考价值?感觉里面对寄存器的使用很乱
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

4
 
一般是不必读它.但是:
1.  如果出了莫名其妙的错,需要深入 DEBUG;  
2.  想手工优化一下代码;
3.  想写汇编函数,与  C 程序混合运行,但又不很清楚汇编程序的总体的结构,规格.
   哪就无妨读一读 C  生成的汇编程序.

 
 
 

回复

86

帖子

0

TA的资源

一粒金砂(初级)

5
 
如果你用的是 2407A, 可能是这样:
XF 标志在状态寄存器 ST1 中,而 ST1 是中断处理时需要保存和恢复的现场信息,所以中断服务中设置的XF,恢复现场时就被覆盖了,实际是不起作用,看不到的.为此我也困惑了好几天.
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

6
 
哪一点你认为不符事理?
 
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

7
 
下面是C 语言库 rts2xx.lib 中提供的恢复现场例程,其中分明包含 ST0,ST1. ST1 中还存放  DP,ARP,ARB .. 等等主程序重要信息,不保存还得了?



****************************************************************************
* FUNCTION DEF : I$$REST
*                This function is branched to at the end of an interrupt
*                handler to restore the environment of the interrupted
*                code.  This function performs the return from interrupt.
*                In order to ensure correct restoration of the T register,
*                this function assumes that interrupts are disabled during
*                its execution.
****************************************************************************
I$$REST:
        DINT
         MAR     *-              ; POINT TO TOP ELEMENT ON STACK

         RPTK    6               ; RESTORE TOP 6 ELEMENTS OF STACK
         PSHD    *-
                
         LAR     AR7,*-          ; RESTORE ALL AUX REGISTERS EXCEPT AR1
         LAR     AR6,*-
         LAR     AR5,*-
         LAR     AR4,*-
         LAR     AR3,*-
         LAR     AR2,*-
         LAR     AR0,*-         

     MAR     *-              ; SKIP T REGISTER (FOR NOW)
         LT      *+              
         MPYK    1               ; RESTORE LOW PRODUCT REGISTER

         LT      *-              ; RESTORE T REGISTER
         MAR     *-              ; SKIP LOW PRODUCT REGISTER VALUE

         LPH     *-              ; RESTORE HIGH PRODUCT REGISTER

         ZALS    *-              ; RESTORE ACCUMULATOR
         ADDH    *-

         LST     *-              ; RESTORE STATUS REGISTERS
         LST1    *-                 ; OLD ARP IS RESTORED *NOW*

         EINT                    ; RESTORE INTERRUPTS
         RET                     ; RETURN TO INTERRUPTED CODE
        RET
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表