//addr  :代表8位地址    addr16:代表16位地址     data  :立即数

//移位指令

1. 算术左移指令ASL

符号码格式 指令操作码 寻址方式
ASL 0A 累加器寻址
ASL $data 06 零页寻址
ASL $addr16 0E 绝对寻址
ASL $addr,X 16 零页X变址
ASL $addr16,X 1E 绝对X变址

ASL移位功能是将字节内各位依次向左移1位,最高位移进标志位C中,最底位补0

ASL执行结果相当于把移位前的数乘2

例如    //ASL的应用

       2000:LDA #$20            //把立即数20送累加器A

       2002:ASL                 //累加器A的内容算术左移

       2003:STA $2100           //把累加器A的内容送地址2100

       2006:ASL $2100           //地址2100的内容算术左移

       2009:LDA $2100           //地址2100的内容送累加器A

       200C:RTS                 //程序结束

2. 逻辑右移指令LSR

符号码格式 指令操作码 寻址方式
LSR 4A 累加器寻址
LSR $data 46 零页寻址
LSR $addr16 4E 绝对寻址
LSR $addr,X 56 零页X变址
LSR $addr16,X 5E 绝对X变址

该指令功能是将字节内各位依次向右移1位,最低位移进标志位C,最高位补0.

该操作对于无符号数和正数相当于乘1/2

例: //拆字程序,将地址2100单元的高四位送地址2101的低四位,将地址2100单元的低四位送地址2102的底四位

并且清除地址2101和地址2102的高四位

     2000:LDA $2100           //地址2100的内容送A

     2003:AND #$0F            //A和0F进行逻辑与运算,屏蔽了A的高四位

     2005:STA $2102          //结果送地址2102

     2008:LDA $2100         

     200B:LSR                //将A的高四位挪到低四位,高四位补0

     200C:LSR

     200D:LSR

     200E:LSR

     200F:STA $2101          //结果送地址2101

     2012:RTS

3. 循环左移指令ROL

符号码格式 指令操作码 寻址方式
ROL 2A 累加器寻址
ROL $data 26 零页寻址
ROL $addr16 2E 绝对寻址
ROL $addr,X 36 零页X变址
ROL $addr16,X 3E 绝对X变址

ROL的移位功能是将字节内容连同进位C一起依次向左移1位

4. 循环右移指令ROR

符号码格式 指令操作码 寻址方式
ROR 6A 累加器寻址
ROR $data 66 零页寻址
ROR $addr16 6E 绝对寻址
ROR $addr,X 76 零页X变址
ROR $addr16,X 7E 绝对X变址

ROR的移位功能是将字节内容连同进位C一起依次向右移1位