home *** CD-ROM | disk | FTP | other *** search
/ The C Users' Group Library 1994 August / wc-cdrom-cusersgrouplibrary-1994-08.iso / vol_300 / 309_01 / c.as9 < prev    next >
Text File  |  1990-03-20  |  1KB  |  102 lines

  1. *
  2. * 16 bit division
  3. *
  4. *
  5. * D=X/D
  6. *
  7. ccdiv: CLR ADR31
  8.  STX ADR1
  9.  STD ADR2
  10. ccd1: BGT ccd2
  11.  COM ADR31
  12.  COMA
  13.  COMB
  14.  ADDD #1
  15.  STD ADR2
  16. ccd2: LDD ADR1
  17.  CMPD #0
  18.  BGT ccd3
  19.  COM ADR31
  20.  COMA
  21.  COMB
  22.  ADDD #1
  23.  STD ADR1
  24. ccd3: LDA #16
  25.  STA ADR3
  26.  CLRA
  27.  CLRB
  28.  DIVD
  29.  ASL ADR1+1
  30.  ROL ADR1
  31.  ROLB
  32.  ROLA
  33.  CMPD ADR2
  34.  BLO NOSUB
  35.  SUBD ADR2
  36.  INC ADR1+1
  37. NOSUB: DEC ADR3
  38.  BNE DIVD
  39.  TFR D,X
  40.  LDD ADR1
  41.  TST ADR31
  42.  BEQ ccd4
  43.  COMA
  44.  COMB
  45.  ADDD #1
  46. ccd4: RTS
  47. *
  48. * 16 bit multiplication
  49. *
  50. ccmult: STX ADR1
  51.  STD ADR2
  52.  CLR ADR3
  53.  CLR ADR3+1
  54.  LDA ADR1+1
  55.  LDB ADR2+1
  56.  MUL
  57.  STD ADR3+2
  58.  LDA ADR1
  59.  LDB ADR2+1
  60.  MUL
  61.  ADDD ADR3+1
  62.  STD ADR3+1
  63.  LDA ADR1+1
  64.  LDB ADR2
  65.  MUL
  66.  ADDD ADR3+1
  67.  STD ADR3+1
  68.  BCC NOCARRY
  69.  INC ADR3
  70. NOCARRY: LDA ADR1
  71.  LDB ADR2
  72.  MUL
  73.  ADDD ADR3
  74.  TFR D,X
  75.  LDD ADR3+2
  76.  RTS
  77.  
  78. ADR1:  RMB 2
  79. ADR2:  RMB 2
  80. ADR3:  RMB 1
  81. ADR31: RMB 3
  82. *
  83. *  switch statement
  84. *
  85. * D = switch value
  86. * S = switch table
  87. *     FDB addr1, value1
  88. *     FDB addr2, value2
  89. *     ...
  90. *     FDB 0
  91. *     [JMP DEFAULT]
  92. *     continuation
  93. *
  94. CCSWITCH: PULS X get stack adr
  95. SWLOOP: LDY ,X++ get address
  96.  CMPY #0 if 0
  97.  BEQ SWEND then it is the default
  98.  CMPD ,X++ else, if it is not the switch value
  99.  BNE SWLOOP try next one
  100.  JMP ,Y else we found it
  101. SWEND: JMP ,X default exit
  102.