asm_echo.s – Demonstrates calling C from assembly

Demonstrates how to call C functions from assembly lanaguage. Implements a UART1 character echo, and calls the configBasic, inChar, and outChar functions.

 

Include processor-specific headers

.include "xc.inc"
 
 

Data section

This directive causes the assember to place the following statements in PSV space (constant memory).

           .section psv psv

Define a null-terminated ASCII string.

HELLO_MSG: .asciz "asm_echo.s ready!\n"
 
 

Code Section

This directive causes the assembler to place the following statements in program memory.

.text

;; int main() {

Make main visible outside this file so that C startup code can call it.

.global _main
_main:

  ;; char c;
  ;;
  ;;               W0
  ;; configBasic(HELLO_MSG)
  mov #HELLO_MSG, W0
  call _configBasic

  ;; while (1) {
  while_top:

    ;; W0
    ;; c  = inChar();
    call _inChar

    ;; c++;
    inc W0, W0

    ;;         W0
    ;; outChar(c);
    call _outChar

  bra while_top
  ;; }