打印

汇编与C语言

[复制链接]
3880|17
手机看帖
扫描二维码
随时随地手机跟帖
沙发
硅图腾| | 2007-8-16 20:35 | 只看该作者

“C + 汇编 = 程序原子弹”

使用特权

评论回复
板凳
金辉科技| | 2007-8-16 22:30 | 只看该作者

 “C + 汇编 = 程序原子弹” 

 
但有很多编程的已经这么做了,你怎样解释.

使用特权

评论回复
地板
ayb_ice| | 2007-8-17 07:31 | 只看该作者

这就是是混合编程,我经常用...

使用特权

评论回复
5
后学| | 2007-8-17 07:36 | 只看该作者

re

我以前觉得混合编程很强大,
现在感觉搞太复杂了也不好,
程序够用,容易读懂,就行了,

使用特权

评论回复
6
z_no1| | 2007-8-17 08:05 | 只看该作者

c是大兵团海陆空协同,汇编是特种兵。

一个战役可以没有特种兵,但在特定的情况下他是刀尖。汇编的应用要知道什么时候不应该用。具体的混合编程的方法各个编译器不一样,要自己去看手册。

使用特权

评论回复
7
dcp| | 2007-8-17 08:19 | 只看该作者

不知为什么初入门时就喜欢研究混合编程

记得当年也是这样问过的:D

建议: 先用熟悉汇编,能用汇编写程序之后再用C语言写程序

使用特权

评论回复
8
computer00| | 2007-8-17 08:27 | 只看该作者

尺有所长,寸有所短。实事求是,与时具进。

汇编和C只是工具,该用时就用,需要用时就用,没什么好讨论的。

使用特权

评论回复
9
救火车| | 2007-8-17 08:35 | 只看该作者

最好不用混合编程

不容易控制。
主要是现场保护和参数传递。
除非你对性能要求非常高。

使用特权

评论回复
10
hq_y| | 2007-8-17 09:04 | 只看该作者

我想大部分情况下不需要使用汇编

除非是在对速度和波形要求特别严格的情况下,可以嵌入汇编

使用特权

评论回复
11
ayb_ice| | 2007-8-17 09:16 | 只看该作者

是否容易控制,那么要看你是否掌握游戏规则。。。

使用特权

评论回复
12
li311| | 2007-8-17 16:47 | 只看该作者

很正常的用法啊

使用特权

评论回复
13
hyh0lh| | 2007-8-17 17:02 | 只看该作者

可以混用~

两种当然可以混用.只是要求你的有更好的程序能力

使用特权

评论回复
14
拜师学艺|  楼主 | 2007-8-18 22:49 | 只看该作者

16位C

先谢谢各位的见解哈!
不过我现在用的是C51汇编,效果还不错,但是我想学16位的单片机,顺便开始学习使用C编程,可我不知道该学哪一种16位的好,请各位大哥大姐给点建议吧,谢谢了

使用特权

评论回复
15
qjy_dali| | 2007-8-19 01:21 | 只看该作者

当然可以在一个程序里

只是一般要有特别的原因,才会用混合编程

使用特权

评论回复
16
古道热肠| | 2007-8-20 10:58 | 只看该作者

我都用C语言实现功能,用汇编程序做优化

    用C语言实现功能容易验证硬件是否能工作正常,速度慢点正好能看到程序运行的轨迹。待模型架构好后,就用汇编程序实现几个影响系统性能的关键函数。效果立马出来了。
    典型应用就是LED屏的串行数据输出操作,用IO口模拟SPI输出128位数据,用C语言跟汇编的效果差距太大了。
    标准LED屏控制电路设计都用到了并转串,用C语言编程也应能满足要求,还有就是用以硬代软,用SPI模块操作速度也很快的。

使用特权

评论回复
17
古道热肠| | 2007-8-20 11:02 | 只看该作者

给个DEMO给楼主看看,楼主的ID我喜欢

; //LED屏驱动

; #pragma src  (LED_ShiftRegistControl.a51) small


; #include "..incincludes.h"

; extern uchar ucColDataBuff_High[16];
; extern uchar ucColDataBuff_Low[16];


; sbit c_Col_SData = P1^5;
; sbit c_Col_SClk = P1^7;
; sbit c_Col_SOut_High = P1^0;
; sbit c_Col_SOut_Low = P1^1;

; sbit c_Col_SOE  = P1^2;

; /*
; void ShT_LEDBoard_ColShiftOut(void)
; {
;     uchar ucByteCount;
;     uchar ucBitCount;
;     uchar ucTemp;

;     c_Col_SOE = 0;
;     c_Col_SClk = 0;
;     c_Col_SOut_High = 0;
;     
;     for(ucByteCount=0; ucByteCount<16; ucByteCount++)
;     {
;         ucTemp = ucColDataBuff_High[ucByteCount];
;     
;         for(ucBitCount=0; ucBitCount<8; ucBitCount++)
;         {
;             if(ucTemp & 0x80)
;             {
;                 c_Col_SData = 0;        //When Shift Register Latch Out Value is Zero,the Led is Light
;             }
;             else
;             {
;                 c_Col_SData = 1;
;             }

;             c_Col_SClk = 1;
;             ucTemp <<= 1;
;             c_Col_SClk = 0;
;         }
;     }
;     
;     c_Col_SOut_High = 1;
;     c_Col_SOut_High = 0;


;     for(ucByteCount=0; ucByteCount<16; ucByteCount++)
;     {
;         ucTemp = ucColDataBuff_Low[ucByteCount];
;     
;         for(ucBitCount=0; ucBitCount<8; ucBitCount++)
;         {
;             if(ucTemp & 0x80)
;             {
;                 c_Col_SData = 0;        //When Shift Register Latch Out Value is Zero,the Led is Light
;             }
;             else
;             {
;                 c_Col_SData = 1;
;             }

;             c_Col_SClk = 1;
;             ucTemp <<= 1;
;             c_Col_SClk = 0;
;         }
;     }
;     c_Col_SOut_Low = 1;
;     c_Col_SOut_Low = 0;

;     c_Col_SOE = 0;
; }
; */

; void ShT_LEDBoard_ColShiftOut(void)

    RSEG  ?PR?ShT_LEDBoard_ColShiftOut?LEDSHIFTREGISTERCONTROL
ShT_LEDBoard_ColShiftOut:
    USING    0
            ; SOURCE LINE # 82
; {
            ; SOURCE LINE # 83
;     uchar ucByteCount;
;     uchar ucBitCount;
;     uchar ucTemp;


     Clr Col_SOE ;
;     c_Col_SClk = 0;
    Clr Col_SClk
;     c_Col_SOut_High = 0;
    Clr Col_SOut_High
;     
;     for(ucByteCount=0; ucByteCount<16; ucByteCount++)
    MOV      A,#LOW (ucColDataBuff_High)
    MOV      R0,A

    Mov R2,#16
ShiftOutByte_HighScreen:
          Mov R3,#8
        Mov A,@R0
        CPL A
    
    ShiftOutBit_HighScreen:
        Rlc A
        Mov Col_SData,c
        
        SetB Col_SClk
        Clr  Col_SClk

        DJNZ R3,ShiftOutBit_HighScreen

        Inc R0
        DJNZ R2,ShiftOutByte_HighScreen

    SetB Col_SOut_High
    Clr  Col_Sout_High

        
    MOV      A,#LOW (ucColDataBuff_Low)
    MOV      R0,A

    Mov R2,#16
ShiftOutByte_LowScreen:
          Mov R3,#8
        Mov A,@R0
        CPL A
    
    ShiftOutBit_LowScreen:
        Rlc A
        Mov Col_SData,c
        
        SetB Col_SClk
        Clr  Col_SClk

        DJNZ R3,ShiftOutBit_LowScreen

        Inc R0
        DJNZ R2,ShiftOutByte_LowScreen

    SetB Col_SOut_Low
    Clr  Col_Sout_Low
        
    Clr Col_SOE
;     {
;         ucTemp = ucColDataBuff_High[ucByteCount];
;     
;         for(ucBitCount=0; ucBitCount<8; ucBitCount++)
;         {
;             if(ucTemp & 0x80)
;             {
;                 c_Col_SData = 0;        //When Shift Register Latch Out Value is Zero,the Led is Light
;             }
;             else
;             {
;                 c_Col_SData = 1;
;             }

;             c_Col_SClk = 1;
;             ucTemp <<= 1;
;             c_Col_SClk = 0;
;         }
;     }
;     
;     c_Col_SOut_High = 1;
;     c_Col_SOut_High = 0;


;     for(ucByteCount=0; ucByteCount<16; ucByteCount++)
;     {
;         ucTemp = ucColDataBuff_Low[ucByteCount];
;     
;         for(ucBitCount=0; ucBitCount<8; ucBitCount++)
;         {
;             if(ucTemp & 0x80)
;             {
;                 c_Col_SData = 0;        //When Shift Register Latch Out Value is Zero,the Led is Light
;             }
;             else
;             {
;                 c_Col_SData = 1;
;             }

;             c_Col_SClk = 1;
;             ucTemp <<= 1;
;             c_Col_SClk = 0;
;         }
;     }
;     c_Col_SOut_Low = 1;
;     c_Col_SOut_Low = 0;

;     c_Col_SOE = 0;


;     ucTemp = ucColDataBuff_High[ucByteCount];
            ; SOURCE LINE # 89
;    MOV      R7,ucByteCount?040
;    MOV      A,#LOW (ucColDataBuff_High);
;    ADD      A,R7
;    MOV      R0,A
;    MOV      A,@R0
;    MOV      R7,A
;    MOV      ucTemp?042,R7
;     
;     ucTemp = ucColDataBuff_Low[ucByteCount];
            ; SOURCE LINE # 91
;    MOV      R7,ucByteCount?040
;    MOV      A,#LOW (ucColDataBuff_Low)
;    ADD      A,R7
;    MOV      R0,A
;    MOV      A,@R0
;    MOV      R7,A
;    MOV      ucTemp?042,R7
; }
            ; SOURCE LINE # 92
    RET      
; END OF ShT_LEDBoard_ColShiftOut

    END

使用特权

评论回复
18
拜师学艺|  楼主 | 2007-8-21 00:16 | 只看该作者

先谢了哈

我会慢慢看明白的哈!呵呵

使用特权

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

本版积分规则

10

主题

30

帖子

0

粉丝