Developing Software in Assembly Language
6812 Assembly Language Examples
By Jonathan W. Valvano
�����This article, which discusses assembly language programming,
accompanies the book Embedded Microcomputer Systems: Real Time Interfacing published by Brooks-Cole 1999. This document has four overall
parts
�����Overview
�����Syntax (fields, pseudo ops)
�����Local variables
�����Examples
Interpreter Examples
������Decision tree
������Vector table
������Command table
������Linked list
������Binary tree
Other Examples
������Arithmetic Examples on the 6812
������Shift Examples on the 6812
������Stack Usage and Interrupts on the 6812
������FIFO Queue Examples on the 6812
������Control Structure Examples on the 6812�
�
������It is better to use vector tables, command tables, linear linked list, or a tree-structured linked list instead of decision trees to build a command interpreter. The tables and linked lists will be easier to understand, quicker to debug, and simplier to modify. In the following examples the command interpreter operates on a single letter basis. All examples, except the vector table, can be modified to handle command strings, by replacing the simple beq with a string compare operation.
--------------------------------------------------------------------------------------
Decision Tree interpreter on the 6812
;*********** Decision Tree *****************
Exec��jsr���InChar���;Input a char in RegA
������cmpa��#'A'
������beq���ISA������;Check each
������cmpa��#'B'
������beq���ISB
������cmpa��#'C'
������beq���ISC
������bra���ERROR
ISA���jsr���ACCEPT���;Execute command
������bra���DONE
ISB���jsr���BYE������;Execute command
������bra���DONE
ISC���jsr���CANCEL���;Execute command
������bra���DONE
DONE��bra���Exec
--------------------------------------------------------------------------------------
Vector interpreter on the 6812
;************* Vector ********************
Exec���jsr���InChar���;Input a char in RegA
�������cmpa��#'C'
�������bhi���ERROR
�������ldx���#VECTAB���;Vector table
�������suba��#'A'������;Convert 'A' to 'C' to 0 to 2
�������bmi���ERROR
�������lsla��������;Calculate index
�������ldx���A,X���;X points to the subroutine
�������jsr���0,X���;Execute command
�������bra���Exec
VECTAB�fdb���ACCEPT ���;Ptr to subroutines
�������fdb���BYE
�������fdb���CANCEL
-------------------------------------------------------------------------------------
Command Table interpreter on the 6812
;********** Command Table ********************
Letter�equ���0���;Index for command letter
SubAdr�equ���1���;Index for subroutine address
Exec���jsr���InChar���;Input a char in RegA
�������ldx���#CMDTAB-3���;Command table
TEST���leax��3,x���������;Next entry
�������tst�� Letter,X����;Done?
�������beq���ERROR
�������cmpa��Letter,X����;Is it this command?
�������bne���TEST
�������ldx���SubAdr,X����;X points to the subroutine
�������jsr���0,X ��������;Execute command
�������bra���Exec
CMDTAB�fcb���'A'������;Command letter
�������fdb���ACCEPT���;Ptr to subroutine
�������fcb���'B'
�������fdb���BYE
�������fcb���'C'
�������fdb���CANCEL
�������fcb���0���;No more commands�
--------------------------------------------------------------------------------------
Linked List interpreter on the 6812
;********** Linked List Interpreter ********************
Exec���jsr���InChar�����;Input a char in RegA
�������ldx���#CMDA������;First entry Command linked list
TEST���cmpa��Letter,X���;Is it this command?
�������beq���Found
�������ldx���Next,X
�������cpx���#null
�������bne���TEST
�������bra���ERROR
Found��ldx���SubAdr,X���;X points to the subroutine
�������jsr���0,X��������;Execute command
�������bra���Exec
null���equ���0���;Null pointer
Letter�equ���0���;Index for command letter
SubAdr�equ���1���;Index for subroutine address
Next���equ���3���;Index for next cmd entry
CMDA���fcb���'A'�����;Command letter
�������fdb���ACCEPT��;Ptr to subroutine
�������fdb���CMDB����;Ptr to next entry
CMDB���fcb���'B'
�������fdb���BYE
�������fdb���CMDC����;Ptr to next entry
CMDC���fcb���'C'
�������fdb���CANCEL
�������fdb���null����;No more commands
--------------------------------------------------------------------------------------
Binary Tree interpreter on the 6812
;********** Binary Tree Interpreter ******************
Exec����jsr���InChar����;Input a char in RegA
��������ldx���Root������;First entry Command table
TEST����cpx���#null
��������beq���ERROR �����;Not found?
��������cmpa��Letter,X���;Is it this command?
��������beq���Found
��������bhi���goRight
goLeft��ldx���Left,X����;RegA < Letter
��������bra���TEST
goRight�ldx���Right,X���;RegA > Letter
��������bra���TEST
Found���ldx���SubAddr,X���;X points to the subroutine
��������jsr���0,X���;Execute command
��������bra���Exec
null����equ���0 ��;Null pointer
Letter��equ���0���;Index for command letter
SubAddr�equ���1���;Index for subroutine address
Left����equ���3���;Index for left next cmd entry
Right���equ���5���;Index for right next cmd entry
Root��fdb���CMDM
CMDM��fcb���'M'����;Command letter
������fdb���MAKE���;Ptr to subroutine
������fdb���CMDH���;Ptr to left entry
������fdb���CMDV���;Ptr to right entry
CMDH��fcb���'H'����;Command letter
������fdb���HIGH���;Ptr to subroutine
������fdb���CMDA���;Ptr to left entry
������fdb���null���;None to the right
CMDA��fcb���'A'����;Command letter
������fdb���ACCEPT�;Ptr to subroutine
������fdb���null���;None to the left
������fdb���null���;None to the right
CMDV��fcb���'V'����;Command letter
������fdb���VERIFY�;Ptr to subroutine
������fdb���null���;None to the left
������fdb���CMDZ���;Ptr to right entry
CMDZ��fcb���'Z'����;Command letter
������fdb���ZAP����;Ptr to subroutine
������fdb���null���;None to the left
������fdb���null���;None to the right
�
This document has four overall parts
�����Overview
�����Syntax (fields, pseudo ops)
�����Local variables
�����Examples
�