Puedes manipular números arbitrariamente anchos utilizando una ALU de ancho finito. Sin embargo, se requieren múltiples operaciones cuando el número es más ancho que la ALU.
Para ilustrar esto, usaré un PIC 18 como ejemplo. Esta arquitectura solo puede manipular directamente números de 8 bits. Para agregar las cantidades de 8 bits VAR1 y VAR2 y colocar el resultado en SUM, se tomará un código como este (suponiendo que no se necesita la banca o que el banco ya está configurado correctamente):
movf var1, w ;get VAR1 into accumulator
addwf var2, w ;add VAR2 to it
movwf sum ;save the result
Si, en cambio, VAR1, VAR2 y SUM fueran variables de 32 bits, el código sería:
movf var1+0, w ;make byte 0 (low byte)
addwf var2+0, w
movwf sum+0
movf var1+1, w ;make byte 1
addwfc var2+1, w
movwf sum+1
movf var1+2, w ;make byte 2
addwfc var2+2, w
movwf sum+2
movf var1+3, w ;make byte 3 (high byte)
addwfc var2+3, w
movwf sum+3
Cada byte se maneja por separado. Tenga en cuenta el uso de ADDWFC en lugar de ADDWF para todos menos el primer byte. Esta instrucción agrega los dos bytes, pero también agrega el acarreo de la operación ALU anterior.
Esperamos que pueda ver que este enfoque se puede usar para agregar dos números arbitrariamente grandes. La aritmética amplia es posible, solo que toma más tiempo y requiere varios viajes a través de la ALU para realizar la operación completa.
Las operaciones como AND, OR, XOR, etc., son independientes a nivel de bits. Cada bit de salida se puede calcular dados solo los bits de entrada correspondientes. Dichas operaciones se escalan linealmente con el ancho de los valores que se procesan. La adición requiere los dos bits de entrada, pero también el resultado del acarreo del siguiente bit inferior. Eso requiere que se mantenga un bit de estado entre operaciones sucesivas, pero aún se escala linealmente con el ancho del número.
Multiplica las escalas con el cuadrado del ancho del número, ya que cada fragmento de un número debe multiplicarse por todos los fragmentos del otro número. Multiplicar dos números de 32 bits, que pueden producir un resultado de hasta 64 bits, toma mucho más que 8 x 8 en una ALU de 8 bits, pero todo es posible.