¿Por dónde empezar?
Asumiré que tiene la intención de hacer cálculos de CPU, no intentar hacerlo con puertas.
- usa bcd maths en primer lugar. Eso es lo que hicieron las calculadoras. Binario NO puede dar decimales correctos si quieres hacer eso.
- haga que el núcleo matemático sea conmutable, es decir, puede cambiar * + entre bcd / binary. Esto es bastante fácil: a expensas de algunos ciclos adicionales, puede usar / no usar el ajuste decimal en cada paso.
No has declarado lo que realmente quieres.
- BCD empaquetado - bytes múltiples de 2 dígitos por byte
- bcd único - 1 dígito por byte, por ejemplo, para escribir ascii, convertir a 7seg, etc.
Quiero los últimos dígitos: puedo escribirlos en la pantalla o en el terminal, así que lo hago dígito a dígito. Esto me permite insertar puntos decimales en la pantalla donde quiero, a medida que los imprimo.
Uso una rutina que resta una constante k (por ejemplo, 100) desde N hasta cero. Entonces tengo ese dígito, y puedo emitirlo.
while (N>0) {
N=N+k; //constant is negative so + is actually subtract
Digit:=Digit+1;
}
Repita para cada dígito, colocando el decimal fijo donde lo desee, por ejemplo. 25.1
push N
-10000 Add2Zero PrintDigit
-1000 Add2Zero PrintDigit
-100 Add2Zero PrintDigit
PrintDecimalPoint
-10 Add2Zero PrintDigit
PrintDigit
Observará que esto está usando una pila y es de estilo RPN (notación de pulido inverso). Si está implementando una calculadora, esta es una manera mucho más eficiente de hacer sus cálculos. Solo tiene que implementar una pila pequeña y las funciones básicas en C y luego llamarlas en orden, como RPN o la programación de pulsaciones de la calculadora.
Una pila pequeña (3-4 números es suficiente) y uno o dos registros de almacenamiento, y un par de funciones (push, dup, roll) permiten realizar muchos cálculos complejos. Tenga en cuenta que las únicas funciones matemáticas que realmente necesita son * + y negar. Para una gran cantidad de (16 bits), la resta sucesiva está bien para la división.
Las calculadoras utilizaron muchos algoritmos de bucle ineficientes ya que tienen 1 segundo para hacer cada cálculo.
Si estás haciendo una calculadora, mira lo que hace Sinclair Scientific y maravilla.