Assembly Packed Bcd

-2

Estaba tratando de hacer que una subrutina llamada recuento contara el número de apariciones de la cadena "hello" en la memoria externa de 64 KB con el microprocesador 8051. Lo que quería hacer es que cuando el contador supere los 1.000 se escribirá en R1 y R2 como un número empaquetado, como si el conteo es 1550, R1 tendrá 15 y R2 tendrá 50. ¿Cómo puedo usar R1: R2 para esto? ¿problema? En otras palabras, ¿cómo puedo hacer un seguimiento apropiado del contador cuando el contador tiene más de 1000?

    
pregunta david

1 respuesta

2

Hay dos enfoques generales que se pueden tomar para obtener un conteo en base 10, base 100 u otro formato que no sea potencia de dos bases. Uno puede realizar el conteo en formato binario y convertir el resultado a la base deseada, o puede contar las cosas directamente en la base deseada.

Si uno está escribiendo código de máquina en el 8051, y quiere tener el conteo en formato base-100, el mejor enfoque probablemente sería que los registros de conteo más bajos contengan 100 menos el valor "real", en cuyo caso el rutina para "incrementar" el par de registros r1: r2 sería:

  djnz r2,noWrap
  inc  r1
  mov  r2,#100
noWrap:

Si uno desea que r2 cuente hacia arriba en lugar de hacia abajo:

  inc r2
  cjne r2,#100,noWrap
  inc r1
  mov r2,#0
noWrap:

El código anterior tomará cinco bytes y se ejecutará en dos ciclos en un 8x51 "estándar" en el caso sin ajuste o cuatro ciclos en el caso de ajuste. El último código tomará siete bytes y se ejecutará en tres ciclos en un 8x51 "estándar" en el caso sin ajuste y cinco ciclos en el caso "ajuste". En los clones 8x51 "acelerados", la diferencia de tiempo entre los dos probablemente será la hora de ejecutar dos instrucciones de costo mínimo, ya que el último código agrega una instrucción adicional (probablemente de costo mínimo) y reemplaza una instrucción djnz de dos bytes con una instrucción cjne de tres bytes.

    
respondido por el supercat

Lea otras preguntas en las etiquetas