用【||】字体浏览
C51BBS论坛>>C51编程:请问一个C编译为汇编的问题

C51编程:请问一个C编译为汇编的问题 [mikechen] 2008-5-12 10:15:24

在keil C语言中,什么语句编译为以下汇编:
MOV   A,2BH
                   SUBB  A,#02H
                   MOV   2BH,A
                   MOV   A,2AH
                   SUBB  A,#00H
                   MOV   2AH,A
                   MOV   A,29H
                   SUBB  A,#00H
                   MOV   29H,A
                   MOV   A,28H
                   SUBB  A,#00H
                   MOV   28H,A
28H~2BH应该是一个32位数据,减2再存回32位数据;如果直接用减法,编译出来的汇编是
加法,不知是什么语句编译为减法

  • 你也太无聊了吧,研究编译原理? [qllaoda] 2008-5-12 10:22:04

    KEIL的算法是经过高度优化的,所以你不能以你的思路去分析他生成的汇编。减去一个
    数,跟加上一个负数,本来就是一样的效果,所以编译器那么做也并没什么错。通常编译
    器采用的算法,效率会高于正常思路的算法。

    至于你研究的逆向编译,更没啥意义了,除非你想自己搞个C51编译器。

  • 反其道而行,直接用加法,你看结果是不是减法 [ddllxxrr] 2008-5-13 8:20:27


  • 应该是无符号长整形,无符的减法用加法来实现时要先计算它的补码,走弯路烦琐,带符才用补码形式计算效率高点。 [hitek] 2008-5-13 9:31:08

    了解编译原理是好事,有助于编写高效的代码。

  • 加法编译出来还是加法 [mikechen] 2008-5-13 9:35:13


点击回主题参与讨论 >>>
_____________________________________________________________________________
Copyright©,C51BBS论坛 1999-2006