找回密码
 立即注册
楼主: zxcv1973

发现以前老版本的C251编译器几乎无BUG,并且和C51编译器高度一致

[复制链接]
  • 打卡等级:常住居民III
  • 打卡总天数:154
  • 最近打卡:2025-04-30 08:40:57
已绑定手机

15

主题

630

回帖

730

积分

高级会员

积分
730
发表于 2024-11-16 11:46:36 来自手机 | 显示全部楼层
仅替换251.exe即可吗
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:312
  • 最近打卡:2025-03-11 13:20:13

54

主题

1327

回帖

5395

积分

荣誉版主

积分
5395
发表于 2024-11-17 12:23:06 | 显示全部楼层
zxcv*** 发表于 2024-11-15 18:12
pdata数据类型编译是什么错误,可否发个例子来,我用这个老版本编译器编译了几个pdata数据类型,编译的都 ...

这个问题有点复杂, 不是编译通不过, 而是仿真运行得不到想要的结果.

下面我抽空写了一个实例, 编译无错误, 你可仿真运行后, 观看一下字符串考贝后的结果.

注: 将 pdata 改成 xdata , 仿真运行结果正确.
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:312
  • 最近打卡:2025-03-11 13:20:13

54

主题

1327

回帖

5395

积分

荣誉版主

积分
5395
发表于 2024-11-17 12:23:51 | 显示全部楼层
#include <STC32G.H>

volatile  unsigned char pdata tab3[5];
volatile  unsigned char data i;       
          unsigned char code tab1[]="AbcD";
volatile  unsigned char pdata tab2[5];
volatile  char pdata *p;
               
void main(void)
{ volatile  char pdata *p1;

        for(i=0; i<=5; i++)
       tab2[i] = tab1[i];                     

          p = tab2;  
                p1 = tab3;  
        for(i=0; i<=5; i++)
       *p1++ = *p++;                     
                 
while(1);
}            


回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:513
  • 最近打卡:2025-05-01 04:31:49

24

主题

515

回帖

986

积分

荣誉版主

积分
986
发表于 2024-11-17 19:14:58 | 显示全部楼层
试了下,很好用,谢谢楼主。
回复 支持 反对

使用道具 举报 送花

2

主题

185

回帖

1048

积分

金牌会员

积分
1048
发表于 2024-11-18 10:30:00 | 显示全部楼层
LAO*** 发表于 2024-11-17 12:23
这个问题有点复杂, 不是编译通不过, 而是仿真运行得不到想要的结果.

下面我抽空写了一个实例, 编译无错 ...

当然不是指编译通不过,而是指编译出错误的指令代码

点评

当然不是指编译通不过,而是指编译出的指令代码, 执行错误! 需用仿真查看实际 tab2 ,tab3 .  详情 回复 发表于 2024-11-18 17:12
回复 支持 反对

使用道具 举报 送花

2

主题

185

回帖

1048

积分

金牌会员

积分
1048
发表于 2024-11-18 10:37:23 | 显示全部楼层
LAO*** 发表于 2024-11-17 12:23
#include

volatile  unsigned char pdata tab3[5];

用旧版本的编译器编译出的指令代码没有问题,挑不出什么毛病:

     9: void main(void)
    10: { volatile  char pdata *p1;
    11:  
    12:         for(i=0; i<=5; i++)
0xFF0003   750800      MOV      i(0x08),#0x00
0xFF0006   801B        SJMP     C:0x0023
    13:        tab2 = tab1;                     
    14:  
0xFF0008   E508        MOV      A,i(0x08)
0xFF000A   0A3B        MOVZ     WR6,R11
0xFF000C   2E340069    ADD      WR6,#0x0069
0xFF0010   7A7182      MOV      DPL(0x82),R7
0xFF0013   7A6183      MOV      DPH(0x83),R6
0xFF0016   E4          CLR      A
0xFF0017   93          MOVC     A,@A+DPTR
0xFF0018   7C0B        MOV      R0,R11
0xFF001A   7E1108      MOV      R1,i(0x08)
0xFF001D   2E1000      ADD      R1,#0x00
0xFF0020   F3          MOVX     @R1,A
0xFF0021   0508        INC      i(0x08)
0xFF0023   E508        MOV      A,i(0x08)
0xFF0025   BEB005      CMP      R11,#0x05
0xFF0028   28DE        JLE      C:0x0008
    15:           p = tab2;   
0xFF002A   7E7000      MOV      R7,#0x00
0xFF002D   7A730009    MOV      p(0x0009),R7
    16:                 p1 = tab3;   
0xFF0031   7E0005      MOV      R0,#0x05
    17:         for(i=0; i<=5; i++)
0xFF0034   750800      MOV      i(0x08),#0x00
0xFF0037   8011        SJMP     C:0x004A
    18:        *p1++ = *p++;                     
    19:                  
0xFF0039   7E130009    MOV      R1,p(0x0009)
0xFF003D   7CB1        MOV      R11,R1
0xFF003F   04          INC      A
0xFF0040   7AB30009    MOV      p(0x0009),R11
0xFF0044   E3          MOVX     A,@R1
0xFF0045   F2          MOVX     @R0,A
0xFF0046   0B00        INC      R0,#0x01
0xFF0048   0508        INC      i(0x08)
0xFF004A   E508        MOV      A,i(0x08)
0xFF004C   BEB005      CMP      R11,#0x05
0xFF004F   28E8        JLE      C:0x0039
    20: while(1);
0xFF0051   80FE        SJMP     C:0x0051
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:38
  • 最近打卡:2025-04-29 08:28:25
已绑定手机

17

主题

446

回帖

1173

积分

金牌会员

积分
1173
发表于 2024-11-18 11:32:43 | 显示全部楼层
pdata效率明显高于xdata为什么不用,这都太成熟了,不可能有问题

点评

当然不是指编译通不过,而是指编译出的指令代码, 执行错误! 需用仿真查看实际 tab2 ,tab3 .  详情 回复 发表于 2024-11-18 17:13
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:38
  • 最近打卡:2025-04-29 08:28:25
已绑定手机

17

主题

446

回帖

1173

积分

金牌会员

积分
1173
发表于 2024-11-18 11:43:30 | 显示全部楼层
本帖最后由 bkeuqoaq 于 2024-11-18 11:44 编辑
LAO*** 发表于 2024-11-17 12:23
#include

volatile  unsigned char pdata tab3[5];

汇编分析没有问题,这是最新版本编译的
不过251确实没有使用pdata的必要
; line 140: void main(void)
; line 141: {
; line 142:         volatile  char pdata *p1;
; line 143:
; line 144:         for(i=0; i<=5; i++)
        MOV      i,#00H
        SJMP     ?C0004
?C0005:
; line 145:                 tab2 = tab1;                     
        MOV      A,i                            ; A=R11
        MOVZ     WR6,R11                        ; A=R11
        ADD      WR6,#WORD0 tab1
        MOV      DPL,R7                         ; WORD0(DR56)=DPTR
        MOV      DPH,R6                         ; WORD0(DR56)=DPTR
        CLR      A                              ; A=R11
        MOVC     A,@A+DPTR                      ; A=R11
        MOV      R1,i
        ADD      R1,#LOW tab2
        MOVX     @R1,A                          ; A=R11
        INC      i
?C0004:
        MOV      A,i                            ; A=R11
        CMP      R11,#05H                       ; A=R11
        JLE      ?C0005
; line 146:
; line 147:         pp = tab2;  
        MOV      pp,#LOW tab2
; line 148:         p1 = tab3;  
        MOV      R0,#LOW tab3
;---- Variable 'p1' assigned to Register 'R0' ----
; line 149:         for(i=0; i<=5; i++)
        MOV      i,#00H
        SJMP     ?C0009
?C0010:
; line 150:                 *p1++ = *pp++;                     
        MOV      R1,pp
        MOVX     A,@R1                          ; A=R11
        MOV      R10,R11                        ; A=R11
        MOV      R11,R1                         ; A=R11
        INC      A                              ; A=R11
        MOV      pp,A                           ; A=R11
        MOV      R11,R10                        ; A=R11
        MOVX     @R0,A                          ; A=R11
        INC      R0,#01H
        INC      i
?C0009:
        MOV      A,i                            ; A=R11
        CMP      R11,#05H                       ; A=R11
        JLE      ?C0010
; line 151:
; line 152:         while(1);
?C0012:
        SJMP     ?C0012
        ENDP
; line 153: }   

        END

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:312
  • 最近打卡:2025-03-11 13:20:13

54

主题

1327

回帖

5395

积分

荣誉版主

积分
5395
发表于 2024-11-18 17:12:29 | 显示全部楼层
zxcv*** 发表于 2024-11-18 10:30
当然不是指编译通不过,而是指编译出错误的指令代码

当然不是指编译通不过,而是指编译出的指令代码, 执行错误!

需用仿真查看实际 tab2 ,tab3 .
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:312
  • 最近打卡:2025-03-11 13:20:13

54

主题

1327

回帖

5395

积分

荣誉版主

积分
5395
发表于 2024-11-18 17:13:38 | 显示全部楼层
bkeu*** 发表于 2024-11-18 11:32
pdata效率明显高于xdata为什么不用,这都太成熟了,不可能有问题

当然不是指编译通不过,而是指编译出的指令代码, 执行错误!

需用仿真查看实际 tab2 ,tab3 .
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 02:47 , Processed in 0.165443 second(s), 117 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表