fc的输入数据in(dword)是要移位的双字,bit_no(int)是移位位数。输出数据out(dword)是移位的结果。本文以输入in的低20位数据连续循环移位1~20位为例。tmp1和tmp2分别用来暂存移位后的数据和移位次数剩余值。l1.4是tmp1(ld0)的第20位。
将l1.4改为ld0的其他位,可以改变要移位数据的位数。例如改为l2.4时,被移位数据的位数为12位。
l #in
t #tmp1 //保存被移位的双字
l #bit_no
back: t #tmp2 //保存移位次数剩余值
l 1
l #tmp1
rld //循环移位1位
t #tmp1
a l 1.4
s l 3.0 // tmp1的第20位为1则将最低位置位
an l 1.4
r l 3.0 // tmp1第20位为0则将最低位复位
clr
= l 1.4 //将tmp1第20位清零
l #tmp2 //取移位次数剩余值
loop back //减1后非零则返回
l #tmp1
t #out //输出循环移位的结果
call fc 1
in :=md10
bit_no:=mw14
out :=md16
用十六进制格式监控md10和md16,移位次数mw14的值最好是4的整倍数,监控比较方便。