因为在寄存器里的数都是二进制的,所以乘以2:左移一位;乘以4左移两位;乘以8左移三位……依此类推(但要注意寄存器总共有多少位,防止溢出),除法用右移。
直接移位只能计算乘数(或除数)为2的n次方的乘(除)运算,对于一般的乘除法,还要配合加(减)法运算,比如a?9=a??3+a
实际上二进制数的基本运算即加,取反,移位等,通过变换来计算减,乘,除。
可以验证,用单片机C语言编程计算乘数为2的n次方的乘法运算比乘数为一般数的乘法运算要快得多,就是因为前者只需直接移位,后者还需配合加法或经多步运算
比如0001,左移一位则是*2,左移两位则是*4,以此类推。
同理,右移就是除法。
比如00000011,实际是3,你左移一位,即00000110,结果为六。
现在很多单片机有乘法电路。如果没有乘法电路,那么用循环的加法或者减法。
找一个汇编的乘法库,研究下