Las instrucciones de desplazamiento de bits ya se presentaron al hablar de multiplicaciones y divisiones:
- “asl”.
- “lsr”.
La instrucción “asl” mueve los bits del acumulador (o de una posición de memoria) un bit a la izquierda, metiendo el bit más significativo (bit 7) en el flag C – carry, y un bit a 0 en el bit menos significativo (bit 0). Esta operación equivale a multiplicar por dos.
Contrariamente, la instrucción “lsr” mueve los bits del acumulador (o de una posición de memoria) un bit a la derecha, metiendo un bit a 0 en el bit más significativo (bit 7), y el bit menos significativo (bit 0) en el flag C – carry. Esta operación equivale a dividir por dos.
Estas instrucciones son útiles, con carácter general, para manipular bits. Por ejemplo, moviendo cuatro bits a la derecha, se puede pasar de un byte a su nibble más significativo.
Estas instrucciones soportan los modos de direccionamiento acumulador, absoluto, página cero, absoluto indexado y página cero indexado. Y afectan a los flags S – sign, Z – zero y C – carry.
Sus detalles se pueden consultar en http://www.6502.org/tutorials/6502opcodes.html#ASL y http://www.6502.org/tutorials/6502opcodes.html#LSR.
Programa de ejemplo: Prog18