导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→快来看啊[guest]

 *第26580篇: 快来看啊

  
楼 主:guest 2004年10月11日19:27
 快来看啊

此主题相关图片如下:
按此在新窗口浏览图片

这是gcc for 8051生成的代码....

  
2楼:guest 2004年10月11日19:29
 这是汇编器等

此主题相关图片如下:
按此在新窗口浏览图片
  
3楼:J-10 2004年10月12日07:22
 

怎么没有堆栈框架?
  
4楼:guest 2004年10月12日19:28
 对写程序究竟有什么好处?

好是好,可是,KEIL是针对8051专门设计的.gcc是通用型的,而且适用于RISC,现代超标题处理器,8051太简单,效率会不会是个问题?

gcc是好,有很多扩充,如可以为样初始化一个结构:

struct test test_data = { .x =10; .y=100;}

还有__attribute__,......

但,效率如何?你的例子太简单,不能说明问题....


给我一个复杂的例子.....

  
5楼:guest 2004年10月17日20:21
 给你一个复杂一点的例子
int printf( const char *s,...);
int test (int a, int b,int *s)
{
 *s=10;
 return a/b+100;
}

struct point { double x,y,z;};

struct point get_x(struct point s) 
{
 struct point t;
 t.x=t.y=10;
        t.z=s.z; 
 return t;
}

int f(int d)
{
 int x,y,z;
 double a,b,c;

 x=100;
 y=d>  10?100:200;
 x=y>  100?200:300; 
 a=b=10;
 c=a+b*10;
 return z+test(x,y,&z);
}

  
6楼:guest 2004年10月17日20:25
 你瞧瞧...
 .file "test.c"
 .version "01.01"
gcc2_compiled.:
.globl __loadsi_bp
.globl __loadsi_sp
.globl __loadsi_dptr
.globl __storesi_bp
.globl __storesi_sp
.globl __storesi_dptr
.globl __loadhi_bp
.globl __loadhi_sp
.globl __loadhi_dptr
.globl __storehi_bp
.globl __storehi_sp
.globl __storehi_dptr
.globl __divsi3
.globl __addsi3
.text
.globl test
 .type  test,@function
test:
 MOV 0x40,#10
 MOV 0x41,#0
 MOV 0x42,#0
 MOV 0x43,#0
 MOV DPL,0x30
 MOV DPH,0x31
 CALL __storesi_dptr
 CALL __divsi3
 MOV R4,#100
 MOV R5,#0
 MOV R6,#0
 MOV R7,#0
 CALL __addsi3
 RET
.Lfe1:
 .size  test,.Lfe1-test
.globl __loaddf_bp
.globl __loaddf_sp
.globl __loaddf_dptr
.globl __storedf_bp
.globl __storedf_sp
.globl __storedf_dptr
.section .rodata
 .align 8
.LC0:
 .long 0x0,0x40240000
.text
.globl get_x
 .type  get_x,@function
get_x:
 MOV DPTR,.LC0
 CALL __loaddf_dptr
 MOV DPTR,#-16
 CALL __storedf_bp
 MOV DPTR,#-24
 CALL __storedf_bp
 MOV DPTR,#16
 CALL __loaddf_bp
 MOV DPTR,#-8
 CALL __storedf_bp
 MOV A,0x60
 ADD A,#232
 MOV R2,A
 MOV A,0x61
 ADDC A,#255
 MOV R3,A
 MOV R4,#24
 MOV R5,#0
 MOV R6,#0
 MOV R7,#0
 CALL memcpy
 RET
.Lfe2:
 .size  get_x,.Lfe2-get_x
.globl __muldf3
.globl __adddf3
.globl __addsi3
.globl f
 .type  f,@function
f:
 MOV A,R3
 CJNE A,#0,.L4
 MOV A,R2
 CJNE A,#0,.L4
 MOV A,R1
 CJNE A,#0,.L4
 MOV A,R0
 ADD A,#-10
 JZ .L2
.L4:
 MOV R4,#100
 MOV R5,#0
 MOV R6,#0
 MOV R7,#0
 JMP .L3
.L2:
 MOV R4,#200
 MOV R5,#0
 MOV R6,#0
 MOV R7,#0
.L3:
 MOV A,R7
 CJNE A,#0,.L7
 MOV A,R6
 CJNE A,#0,.L7
 MOV A,R5
 CJNE A,#0,.L7
 MOV A,R4
 ADD A,#-100
 JZ .L5
.L7:
 MOV R0,#200
 MOV R1,#0
 MOV R2,#0
 MOV R3,#0
 JMP .L6
.L5:
 MOV R0,#44
 MOV R1,#1
 MOV R2,#0
 MOV R3,#0
.L6:
 MOV A,0x60
 ADD A,#236
 MOV 0x30,A
 MOV A,0x61
 ADDC A,#255
 MOV 0x31,A
 CALL test
 MOV DPTR,#-20
 CALL __loadsi_bp
 MOV R4,0x40
 MOV R5,0x41
 MOV R6,0x42
 MOV R7,0x43
 CALL __addsi3
 RET
.Lfe3:
 .size  f,.Lfe3-f
 .ident "GCC: (GNU) 2.95.3 20010315 (release)"
  
7楼:guest 2004年10月17日20:28
 仔细分析:代码质量太好了
R0-R3:整形参数1
R4-R7:整形参数2
0x30-0x33:整形参数3
...

整形参数从r0-r3中返回

bp与sp是模拟堆栈与基本框架....

  
8楼:guest 2004年10月13日16:25
 gcc是专业人士用的

初学者当然学KEIL,因为简单....

专业人士不用学就能用gcc,而且独爱gcc

  
9楼:guest 2004年10月14日09:13
 gcc难吗?偶一直用

初学者可以从gcc开始....

因为有VC,所以,很多软件工程师水平很低,因为不用懂汇编语言....
因为有KEIL,很多嵌入式开发者不能上台阶....

gcc是linux入门的必修课....

  
10楼:guest 2004年10月12日19:31
 而且KEIL是图形界面,而你是文字界面

我最不喜欢记命令......

  
11楼:guest 2004年10月14日09:20
 gcc最专业的理由

你知道更多的程序的构成细节,而且你能控制它....

GUI是傻瓜型的,程序是转了,可是,你对二进制代码没有多少了解.如果你用KEIL,你不会明白AOUT,ELF,COFF....

用了GCC,你会明白操作系统很多技术细节.....包括PLT, GOT,....

拿动态连接来说,用VC的人有几个知道DLL的连接技术?用了GCC,你就会明白.....

  
12楼:guest 2004年10月16日08:16
 越是专业,偶越觉得深....
据我所知,GCC的确专业,可是

一提起那么多命令要记,要用键盘输入命令行就头大.....

  
13楼:J-10 2004年10月17日21:10
 如果你想学习开发Linux的基本工具的话
这当然是一个不错的工具....

  
14楼:guest 2004年10月17日20:31
 可是,如果你想到你能采用大量优秀的开源代码
你就只会觉得头小了....

>>>>>>对该主题发表你的看法

本主题贴数14,分页: [第1页]


[上一篇主题]:老古你好!求助?我想用89C51和AD……敬请回复!

[下一篇主题]:在arm上做基于uclinux的网络终端一定要了解uclinux的源代码吗?