Circuit Negma

C++, C, VB.NET, PCB, Electronics, Circuit Design

HC12 Microcontroller :: Assembly vs. C syntax

Posted by Circuit Negma on November 19, 2008


Created By: Hussein Nosair

Source: EE308 @ New Mexico Tech

Comparison of basic assembly language and C syntax

Assembly                      |   C
------------------------------|------------------------------------
; Use a name instead of a num |   /* Use a name instead of a num */
COUNT:  EQU  5                |   #define COUNT 5
;-----------------------------|   /*-----------------------------*/
;start a program              |   /* To start a program */
CODE:  section  .text         |   main()
       org   $0800            |   {
       lds   #$0A00           |   }
;-----------------------------|   /*-----------------------------*/
;allocate two bytes for       |   /* Allocate two bytes for 
;a signed number              |    * a signed number */
                              |
DATA: section .data           |
      org     $0900           |
i:    ds.w    1               |   int i;
j:    dc.w    $1A00           |   int j = 0x1a00;
;-----------------------------|   /*-----------------------------*/
;allocate two bytes for       |   /* Allocate two bytes for 
;an unsigned number           |    * an unsigned number */
i:    ds.w    1               |   unsigned int i;
j     dc.w    $1A00           |   unsigned int j = 0x1a00;
;-----------------------------|   /*-----------------------------*/
;allocate one byte for        |   /* Allocate one byte for 
;an signed number             |    * an signed number */
                              |
i:    ds.b    1               |   signed char i;
j:    dc.b    $1F             |   signed char j = 0x1f;
;-----------------------------|   /*-----------------------------*/
;Get a value from an address  |   /* Get a value from an address */
                              |
i:  ds.b   1                  |   unsigned char i;
                              |
    ldx    $E000              |   i = *(unsigned char *) 0xE000;
    ldaa   0,x                |  
    staa   i                  |
;-----------------------------|   /*-----------------------------*/
; Use a variable to store     |   /* Use a variable as a pointer
; an address                  |      (address) */
                              |  
i:   ds.b  1                  |   unsigned char *ptr, i;  
ptr: ds.b  1                  |  
                              |  
     ldd   #$E000             |   ptr = (unsigned char *) 0xE000;
     std   ptr                |   
     ldx   ptr                |   i = *ptr;  
     ldaa  0,x                |  
     staa  i                  |   
     ldx   ptr                |   *ptr = 0x55;
     ldaa  #$55               |  
     staa  0,x                |   
;-----------------------------|   /*-----------------------------*/
;To call a subroutine         |   /* To call a function */
  ldaa  i                     |   sqrt(i);
  jsr   sqrt                  |
;-----------------------------|   /*-----------------------------*/
;To return from a subroutine  |   /* To return from a function */
  ldaa  j                     |   return j;
  rts                         |

;-----------------------------|   /*-----------------------------*/
;Flow control                 |   /* Flow control */
    blo                       |   if (i < j)
    blt                       |   if (i < j)
                              |
    bhs                       |   if (i >= j)
    bge                       |   if (i >= j)
                              |

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

 
%d bloggers like this: