ASL          ASL Shift Left One Bit (Memory or Accumulator)           ASL
                   +-+-+-+-+-+-+-+-+
  Operation:  C <- |7|6|5|4|3|2|1|0| <- 0               N V - B D I Z C
                   +-+-+-+-+-+-+-+-+                    / . . . . . / /
  +----------------+-----------------------+---------+---------+----------+
  | Addressing Mode| Assembly Language Form| OP CODE |No. Bytes|No. Cycles|
  +----------------+-----------------------+---------+---------+----------+
  |  Accumulator   |   ASL A               |   $0A   |    1    |    2     |
  |  ZeroPage      |   ASL $FF             |   $06   |    2    |    5     |
  |  ZeroPage,X    |   ASL $FF,X           |   $16   |    2    |    6     |
  |  Absolute      |   ASL $FFFF           |   $0E   |    3    |    6     |
  |  Absolute,X    |   ASL $FFFF,X         |   $1E   |    3    |    7     |
  +----------------+-----------------------+---------+---------+----------+
  For penalty cycles on the 65816, check the desired addressing mode.
What it does: Shifts the bits in a byte to the left by 1. This byte can be in the Accumulator or in memory, depending on the addressing mode. The shift moves the seventh bit into the carry flag and shoves a 0 into the zeroth bit.
Major uses: Allows you to multiply a number by 2. Numbers bigger than 255 can be manipulated using ASL with ROL. A secondary use is to move the lower four bits in a byte (a four-bit unit is often called a nybble) into the higher four bits. The lower bits are replaced by zeros, since ASL stuffs zeros into the zeroth bit of a byte. You move the lower to the higher nybble of a byte by: ASL ASL ASL ASL.