打印

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

[复制链接]
楼主: Periodic
手机看帖
扫描二维码
随时随地手机跟帖
21
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  的

使用特权

评论回复
22
chhaich| | 2012-2-25 23:13 | 只看该作者
跟前辈学习了,呵呵。。。

使用特权

评论回复
23
刘前辈| | 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扬名中国和世界。


、、

使用特权

评论回复
24
Periodic|  楼主 | 2012-2-26 14:21 | 只看该作者
TO  刘前辈  我用人工 反回去   不多才 5K行。  只是以前没有整过:L  还请前辈指教

另外IDA  可以实现A51 到 C51

使用特权

评论回复
25
刘前辈| | 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吧?


、、

使用特权

评论回复
26
Periodic|  楼主 | 2012-2-27 08:52 | 只看该作者
确实是  IDA Pro v6.1 Advanced

使用特权

评论回复
27
Periodic|  楼主 | 2012-2-27 08:53 | 只看该作者
想当年我们老板为**一段2716机器码,出资2万。无人能解
=============================================

也许 HOT 大叔能解

使用特权

评论回复
28
Periodic|  楼主 | 2012-2-27 08:53 | 只看该作者
51相对 其他的单片机 简单

使用特权

评论回复
29
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];

使用特权

评论回复
30
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         ;

使用特权

评论回复
31
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

使用特权

评论回复
32
Periodic|  楼主 | 2012-2-27 11:56 | 只看该作者
请教如何 把 32楼的  A代码 ==   31楼的原始A代码

使用特权

评论回复
33
刘前辈| | 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);

}

//

使用特权

评论回复
34
Periodic|  楼主 | 2012-2-28 11:32 | 只看该作者
DBYTE[8]   ???
这个如何定义的

使用特权

评论回复
35
hrc123qq| | 2012-2-28 11:34 | 只看该作者
哎,,,不会!

使用特权

评论回复
36
刘前辈| | 2012-2-28 11:38 | 只看该作者

C51函数库定义

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

回34楼,见ABSACC.H。

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


、、

使用特权

评论回复
37
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

使用特权

评论回复
38
Periodic|  楼主 | 2012-2-28 18:34 | 只看该作者
貌似33楼的方法 解决 不了  38楼的 问题吧?

使用特权

评论回复
39
刘前辈| | 2012-2-28 19:22 | 只看该作者

一样!

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





、、

使用特权

评论回复
40
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         ;

使用特权

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

本版积分规则