element14 Community
element14 Community
    Register Log In
  • Site
  • Search
  • Log In Register
  • Community Hub
    Community Hub
    • What's New on element14
    • Feedback and Support
    • Benefits of Membership
    • Personal Blogs
    • Members Area
    • Achievement Levels
  • Learn
    Learn
    • Ask an Expert
    • eBooks
    • element14 presents
    • Learning Center
    • Tech Spotlight
    • STEM Academy
    • Webinars, Training and Events
    • Learning Groups
  • Technologies
    Technologies
    • 3D Printing
    • FPGA
    • Industrial Automation
    • Internet of Things
    • Power & Energy
    • Sensors
    • Technology Groups
  • Challenges & Projects
    Challenges & Projects
    • Design Challenges
    • element14 presents Projects
    • Project14
    • Arduino Projects
    • Raspberry Pi Projects
    • Project Groups
  • Products
    Products
    • Arduino
    • Avnet & Tria Boards Community
    • Dev Tools
    • Manufacturers
    • Multicomp Pro
    • Product Groups
    • Raspberry Pi
    • RoadTests & Reviews
  • About Us
  • Store
    Store
    • Visit Your Store
    • Choose another store...
      • Europe
      •  Austria (German)
      •  Belgium (Dutch, French)
      •  Bulgaria (Bulgarian)
      •  Czech Republic (Czech)
      •  Denmark (Danish)
      •  Estonia (Estonian)
      •  Finland (Finnish)
      •  France (French)
      •  Germany (German)
      •  Hungary (Hungarian)
      •  Ireland
      •  Israel
      •  Italy (Italian)
      •  Latvia (Latvian)
      •  
      •  Lithuania (Lithuanian)
      •  Netherlands (Dutch)
      •  Norway (Norwegian)
      •  Poland (Polish)
      •  Portugal (Portuguese)
      •  Romania (Romanian)
      •  Russia (Russian)
      •  Slovakia (Slovak)
      •  Slovenia (Slovenian)
      •  Spain (Spanish)
      •  Sweden (Swedish)
      •  Switzerland(German, French)
      •  Turkey (Turkish)
      •  United Kingdom
      • Asia Pacific
      •  Australia
      •  China
      •  Hong Kong
      •  India
      • Japan
      •  Korea (Korean)
      •  Malaysia
      •  New Zealand
      •  Philippines
      •  Singapore
      •  Taiwan
      •  Thailand (Thai)
      • Vietnam
      • Americas
      •  Brazil (Portuguese)
      •  Canada
      •  Mexico (Spanish)
      •  United States
      Can't find the country/region you're looking for? Visit our export site or find a local distributor.
  • Translate
  • Profile
  • Settings
Embedded and Microcontrollers
  • Technologies
  • More
Embedded and Microcontrollers
Embedded Forum How much more efficient is assembly code versus C in terms of clock cycles?
  • Blog
  • Forum
  • Documents
  • Quiz
  • Polls
  • Files
  • Members
  • Mentions
  • Sub-Groups
  • Tags
  • More
  • Cancel
  • New
Join Embedded and Microcontrollers to participate - click to join for free!
Actions
  • Share
  • More
  • Cancel
Forum Thread Details
  • State Not Answered
  • Replies 7 replies
  • Subscribers 475 subscribers
  • Views 1157 views
  • Users 0 members are here
  • 8_bit
  • 32_bit
  • microprocessor
  • microcontrollers
  • programming
  • development
  • microcontroller
  • mpu
  • software
Related

How much more efficient is assembly code versus C in terms of clock cycles?

Catwell
Catwell over 15 years ago
My current PIC projects are getting more complicated to the point where I am thinking C might be needed. A side note: most jobs I've had, I ended up using assembly on all the projects due most to my adamant grandstanding of code efficiency of the base language. I was able to get away with this posture for a long time. However, I am now doing complex math on the PIC that I don't want to figure out a clever bit manipulation to solve. EX: Dividing a 16bit number by another using 8bit registers.

The PICs I am working on have limited (1Mhz to 4Mhz clock) cycles, and I am wondering if C is going to waste a substantial amount of time executing. Has anyone ever had experience with both and could share some thoughts on the comparison?

 

 

C

  • Sign in to reply
  • Cancel
  • michaelkellett
    0 michaelkellett over 15 years ago

    You can't put numbers on it easily but well tuned assembler will usually outperform C for speed or code size or even both. However you should remmeber that the algorithm is often much more significant - for example a ripple sort in assembler will be nowhere near as fast as a quick sort in C.

     

    C outperforms assembler (in my experience at least 10:1) in terms of time to write/test/sign off code.

     

    Your best bet is almost always to write the application in C and use assembler for the bits you need to improve (this can be less true with very limited processors like the the original architecture 8 bit PICs).

     

    You do not need to write your own maths routines in assembler unless you want - a million people have doen it already:

     

    http://www.piclist.com/techref/microchip/math/div/index.htm

     

    (just one example - there are many).

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • Catwell
    0 Catwell over 15 years ago in reply to michaelkellett

    Thanks Michael. Based on your post I'm going to try the C approach on my next few programs.

     

    I'd love to see an actual comparison of clock cycles used in programs doing the same function in both C and assembly.

    In fact, I will program my next routine in both, and post my results.

     

    Cabe

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • Former Member
    0 Former Member over 15 years ago

    Why not ditch the PIC & use something designed more recently (i.e. after your scope?). If you use a 16 or 32 bit uP it will run many times faster than the 1-4MHz PIC & your C code will beat the assy on the 4MHz PIC anyway. And you can retreive your life........

     

    R

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • WestfW
    0 WestfW over 15 years ago

    A good C compiler will produce code nearly as good as a good assembly language programmer for a lot of common programming structures, but not all C compilers are that "good" (especially for architectures like the PIC that are not very C-friendly), and there are a few common assembler techniques that don't seem to translate well to C:

    1. Direct use of status bits.  In ASM on an 8-bit CPU, you can essentially do 9-bit math by paying attention to the Carry bit, which is very handy for things like, oh, calculating 8bit CRCs or pseudo-random-number generation.
    2. Mixed-size arithmetic, like adding a one-byte quantity to a 32bit sum.
    3. Reserved registers.  In ASM, it's pretty easy to say "these three registers will only be used by this interrupt service routine", making the ISR a lot quicker.  Frequently much more difficult in C.

    But the simpe truth is that most code doesn't need to be "as fast as possible", and being able to create it sooner, with less likelyhood of bugs, is a really good excuse for using a higher-level language.

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • albertosombri
    0 albertosombri over 15 years ago in reply to WestfW

    I completely agree with Bill,

    If a source program is well developed, I mean write flow-chart first, and then the real program, I believe assembly is the best way to write the source code.

    Writing a good flow-chart will help you in understanding what you need, Subs, functions, and tables.

    So, the first step in writing source code, will be to write own subs, functions, and tables.

    Then, you have only to follow the flow-chart.

     

    Alberto.

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • Former Member
    0 Former Member over 15 years ago in reply to albertosombri

    Did you say assembly is the best way to write source code? Unless it has to be mega fast I doubt it (even on a Sharc where the assy code is at least sensible). Is this 2010 or what?. Why not move to a modern processor with a decent register set & use C and get your code written faster with fewer bugs and more readable etc??

     

    R

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • pjclarke
    0 pjclarke over 15 years ago

    I program using both.

     

    C code generates ASM, therefore C code can't perform better than ASM because in the end you end up with the same thing. ie the chip will not run ASM generated by C quicker.

     

    What your asking is what is better, Apples or Oranges.

     

    Saying that C code is generates faster code is because the person who did it is not that great at witting ASM code, or saying ASM is smaller that C is because the person doing it dose not know who to get the best out of C.

     

    Its down to the engineer and the skills they have. So I write in C or ASM or Mix depending on my project and what I want from it.

     

    Assess your project and what is important for it, then decide if you are better at writing your code in C or ASM or both. If you select components and micros with the same critical eye, then you should be applying the same to how you write your code and not what public option is - because they have chosen based on thier project and own skill sets.

     

    Paul

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
element14 Community

element14 is the first online community specifically for engineers. Connect with your peers and get expert answers to your questions.

  • Members
  • Learn
  • Technologies
  • Challenges & Projects
  • Products
  • Store
  • About Us
  • Feedback & Support
  • FAQs
  • Terms of Use
  • Privacy Policy
  • Legal and Copyright Notices
  • Sitemap
  • Cookies

An Avnet Company © 2025 Premier Farnell Limited. All Rights Reserved.

Premier Farnell Ltd, registered in England and Wales (no 00876412), registered office: Farnell House, Forge Lane, Leeds LS12 2NE.

ICP 备案号 10220084.

Follow element14

  • X
  • Facebook
  • linkedin
  • YouTube