O Motorola 6800 não possui uma instrução específica para divisão de dois números. Uma solução simples é fazer a divisão através de múltiplas subtrações. Contudo, podemos pensar mecanismos mais eficientes. Uma solução esta descrita no código-abaixo. Esse algoritmo é mais eficiente na maiora dos casos, pois com apenas 8 deslocamentos efetua a divisão de dois números de 8 bits.
O primeiro caso é quando temos números absolutos.
LDAA Divisor
BEQ __end ; caso Divisor = 0
; o contador ira deslocar 8 vezes,
; mas como já começo decrementando
; carrego com 9.
LDAA #$09
STAA Contador
CLRA
BRA loop_div
empurra_zero: ASL Resposta
loop_div: DEC Contador ; decrementa contador
BEQ __end
ASL Dividendo ; desloca o dividendo p/ Carry
ROLA ; desloga do Carry p/ ACCA
CMPA Divisor ; Acumulador - Dividor > 0
BCS empurra_zero
SEC ; set carry
ROL Resposta ; empurra '1' na resposta
SUBA Divisor
BRA loop_div
__end: NOP
Se os números forem sinalizados precisamos considerar isso na conta, portanto antes de dividir o número devemos verificar seu sinal. O código abaixo utiliza duas posições de memória para o sinal do número. No final é feito uma OU-Exclusivo para definir qual sinal da resposta.
CLR Neg_Divisor
CLR Neg_Dividendo
LDAA Divisor
BEQ __end ; caso Divisor = 0
BPL skip
NEG Divisor
DEC Neg_Divisor ; Neg_Divisor = 1 (0xff)
skip: LDAA Dividendo
BPL __div ; Neg_Dividendo = 1 (0xff)
NEG Dividendo
DEC Neg_Dividendo
; o contador ira deslocar 8 vezes, mas
; como já começo decrementando
; carrego com 9.
__div: LDAA #$09
STAA Contador
CLRA
BRA loop_div
empurra_zero: ASL Resposta
loop_div: DEC Contador ; decrementa contador
BEQ __end
ASLA Dividendo ; desloca o dividendo p/ Carry
ROLA ; desloga do Carry p/ ACCA
CMPA Divisor ; Acumulador - Dividor > 0
BCS empurra_zero
SEC ; set carry
ROL Resposta ; empurra '1' na resposta
SUB Divisor
BRA loop_div
__end: LDAA Neg_Divisor
EORA Neg_Dividendo
; a lógica da XOR garante o estudo dos sinais
BPL _end
NEG Resposta
_end: NOP
Arquivado em: programação Etiquetado: | 6800, efei, microprocessadores, unifei

eeee… parece q tem alguem estudando micro 1 por aqui … eahuaehua