Euclid II: HC11 Code Generation



RAM    equ  0
EEPROM equ  $f800
RESET  equ  $fffe

       org  RAM
gcd    rmb  1          * int gcd;
tmp    rmb  1          * temporary storage

       org  EEPROM
M      fcb  15         * #define M 15
N      fcb  10         * #define N 10
*                      * void euclid() {
euclid

       ldaa M          *     a = M;
       ldab N          *     b = N;

tloop  tstb
       beq  gotgcd     *    while (b != 0) {
       cba
       blt  altb       *        if (a >= b) {

       sba             *            a = a - b;

       bra  bloop      *        } else {

altb   staa tmp        *            tmp = a;
       tba             *            a = b;
       ldab tmp        *            b = tmp;
*                      *        }
bloop
       bra  tloop      *    }

gotgcd
       staa gcd        *    gcd = a;

endlp  bra  endlp       * }

       org  RESET
       fdb  euclid