请教51汇编子程序 问题(汇编很吃力啊)

[复制链接]
6903|47
 楼主| Periodic 发表于 2012-2-25 19:51 | 显示全部楼层
不过根据另外哪个帖子的


uc_stm32f050发表于 2012-2-24 16:17 | 只看该作者 回复 引用 评分 报告 返回版面 TOP  得分:0
12楼: IAR 8051 7.60:#define DATA_0AH              (*(volatile unsigned char __data *)0x0A)

#define DATA_0BH              (*(volatile unsigned char __data *)0x0B)

#define DATA_0CH              (*(volatile unsigned char __data *)0x0C)

#define DATA_0DH              (*(volatile unsigned char __data *)0x0D)

#define DATA_0EH              (*(volatile unsigned char __data *)0x0E)

#define DATA_0FH              (*(volatile unsigned char __data *)0x0F)



#define DATA_08H              (*(volatile unsigned char __data *)0x08)

#define DATA_09H              (*(volatile unsigned char __data *)0x09)



void SYS_Init(void)

{



        //SYSCON=0;

        DATA_0AH=0x00;                //R1_2

        DATA_0BH=0x00;                //R1_3

        DATA_0CH=0x00;                //R1_4

        DATA_0DH=0x00;                //R1_5

        DATA_0EH=0x00;                //R1_6

        DATA_0FH=0x00;                //R1_7



        DATA_08H=0x0B;            //R1_0

}
复制代码        RSEG NEAR_CODE:CODE:NOROOT(0)

//   15 void SYS_Init(void)

SYS_Init:

//   16 {

        ; Saved register size: 0

        ; Auto size: 0

//   17

//   18         //SYSCON=0;

//   19         DATA_0AH=0x00;                //R1_2

        MOV     0xa,#0x0

//   20         DATA_0BH=0x00;                //R1_3

        MOV     0xb,#0x0

//   21         DATA_0CH=0x00;                //R1_4

        MOV     0xc,#0x0

//   22         DATA_0DH=0x00;                //R1_5

        MOV     0xd,#0x0

//   23         DATA_0EH=0x00;                //R1_6

        MOV     0xe,#0x0

//   24         DATA_0FH=0x00;                //R1_7

        MOV     0xf,#0x0

//   25

//   26         DATA_08H=0x0B;            //R1_0

        MOV     0x8,#0xb

//   27 }

        RET
复制代码












的内容 更像似  IAR  的
chhaich 发表于 2012-2-25 23:13 | 显示全部楼层
跟前辈学习了,呵呵。。。
刘前辈 发表于 2012-2-26 11:25 | 显示全部楼层

ASM51-TO-C51 目前世界上还是空白。

本帖最后由 刘前辈 于 2012-2-26 11:29 编辑

20楼LZ正解!ASM51-TO-C51以前见过有软件,可惜结果只能参考。大多啼笑皆非,所以生命期很短。

       LZ什么时候做好一个,我一定重金购买。至今为止,代表中国51水平的HOT大叔还未做出来。据说也想了20年有了。——现在只做出个A51反汇编。

LZ加油!希望5年或者20年之内凭借ASM51-TO-C51扬名中国和世界。


、、
 楼主| Periodic 发表于 2012-2-26 14:21 | 显示全部楼层
TO  刘前辈  我用人工 反回去   不多才 5K行。  只是以前没有整过:L  还请前辈指教

另外IDA  可以实现A51 到 C51
刘前辈 发表于 2012-2-26 19:54 | 显示全部楼层
本帖最后由 刘前辈 于 2012-2-26 20:05 编辑
TO  刘前辈  我用人工 反回去   不多才 5K行。  


5K行C程序?A程序?——敬佩。是反回去你的专用函数FUN1.C,还是任何A51汇编都能反?——我给你一段A51汇编,帮我反到C51,若能60%正确,1W报酬!

        若真有这个实力,开公司专干这个得了。想当年我们老板为**一段2716机器码,出资2万。无人能解,后来我给他A96自己重新写了一个,功能一样,2万照拿了。一星期2W,还有其他待遇。——老板后来凭此程序产品赚了不止200W。


另外IDA  可以实现A51 到 C51


当真?IDA何东东?IDE吧?


、、
 楼主| Periodic 发表于 2012-2-27 08:52 | 显示全部楼层
确实是  IDA Pro v6.1 Advanced
 楼主| Periodic 发表于 2012-2-27 08:53 | 显示全部楼层
想当年我们老板为**一段2716机器码,出资2万。无人能解
=============================================

也许 HOT 大叔能解
 楼主| Periodic 发表于 2012-2-27 08:53 | 显示全部楼层
51相对 其他的单片机 简单
 楼主| Periodic 发表于 2012-2-27 10:49 | 显示全部楼层
数组问题 已经 解决  

#define TAB        ((volatile unsigned char data *)0x0A)                //
#define pD_08H        ((volatile unsigned char xdata *)0x08)        //
data  unsigned char   D_09H     _at_ 0x09;
       
*pD_08H=TAB[D_09H];
 楼主| Periodic 发表于 2012-2-27 11:49 | 显示全部楼层
本帖最后由 Periodic 于 2012-2-27 11:54 编辑

//----------------原始A代码--------------
MOV      08H,#0BH   ;//地址#0BH
MOV      A,#0AH       ;0925   74 0A
ADD      A,09H          ;0927   25 09
MOV      R0,A           ;0929   F8
MOV      A,@R0         ;092A   E6
MOV      R0,08H        ;092B   A8 08
MOVX    @R0,A         ;
 楼主| Periodic 发表于 2012-2-27 11:52 | 显示全部楼层
本帖最后由 Periodic 于 2012-2-27 11:54 编辑

//-------------------反好的C代码-------------------
data  unsigned char   D_08H     _at_ 0x08;
data  unsigned char   D_09H     _at_ 0x09;

#define TAB        ((volatile unsigned char data *)0x0A)                //
#define pD_08H        (unsigned char xdata *)(D_08H)                //

D_08H=0x0B;  //R1_0
*pD_08H=TAB[D_09H];


//-------------------KEIL生成的A代码-------------------
C:0x0012    75080B   MOV      D_08H(0x08),#D_0BH(0x0B)
C:0x0015    740A     MOV      A,#D_0AH(0x0A)
C:0x0017    2509     ADD      A,D_09H(0x09)
C:0x0019    F8       MOV      R0,A
C:0x001A    E6       MOV      A,@R0
C:0x001B    850882   MOV      DPL(0x82),D_08H(0x08)
C:0x001E    758300   MOV      DPH(0x83),#0x00
C:0x0021    F0           MOVX     @DPTR,A
 楼主| Periodic 发表于 2012-2-27 11:56 | 显示全部楼层
请教如何 把 32楼的  A代码 ==   31楼的原始A代码
刘前辈 发表于 2012-2-27 21:38 | 显示全部楼层
本帖最后由 刘前辈 于 2012-2-27 21:49 编辑

很简单:
#include <ABSACC.H>

#define   TAB       ((unsigned char volatile data  *) 0x0A)   
#define  D_09H     9  

main()
{
DBYTE[8] = TAB[D_09H] ;

while(1);

}

//
 楼主| Periodic 发表于 2012-2-28 11:32 | 显示全部楼层
DBYTE[8]   ???
这个如何定义的
hrc123qq 发表于 2012-2-28 11:34 | 显示全部楼层
哎,,,不会!
刘前辈 发表于 2012-2-28 11:38 | 显示全部楼层

C51函数库定义

本帖最后由 刘前辈 于 2012-2-28 11:39 编辑

回34楼,见ABSACC.H。

#define DBYTE ((unsigned char volatile data  *) 0)


、、
 楼主| Periodic 发表于 2012-2-28 18:33 | 显示全部楼层
MOV      R0,08H        ;092B   A8 08
MOVX    @R0,A         ;
//===================================

C:0x001B    850882   MOV      DPL(0x82),D_08H(0x08)
C:0x001E    758300   MOV      DPH(0x83),#0x00
C:0x0021    F0           MOVX     @DPTR,A
 楼主| Periodic 发表于 2012-2-28 18:34 | 显示全部楼层
貌似33楼的方法 解决 不了  38楼的 问题吧?
刘前辈 发表于 2012-2-28 19:22 | 显示全部楼层

一样!

本帖最后由 刘前辈 于 2012-2-28 19:32 编辑





、、

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| Periodic 发表于 2012-2-29 09:45 | 显示全部楼层
还是不一样  前辈的 是# 0x08   而 眼来的  是 08H    一个是立即数一个是变量

D_08H=0x0B;  //R1_0
*pD_08H=TAB[D_09H];



MOV      R0,08H        ;092B   A8 08  前辈的是#0x08
MOVX    @R0,A         ;
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部