偶尔发现200Smart的左移右移指令SHL_B/SHR_B有个不容易发现的问题,如果指令的N参数和Out参数是同一个的话会出问题,具体看图:


第10段,SHL_B的N和Out都使用同一个累加器AC0,不能得到正确的结果。1左移2位本来应该得到4,当却是2。
调试了一段时间也没发现问题所在。偶然的把LAD转做STL,发现问题了:
原来200Smart的SHL_B是先把IN复制到Out,然后再使Out移位N个位。
并不是理解的先使IN移位N位,然后把结果送到Out。

太扯了,我还要一个个检查以前的程序。