Ⅰ 51單片機,查表指令,乘2用移位。
51單片機查表指令是:MOVC A,@A+DPTR
DPTR是表的首地址,第二個A是偏移量。第一個A是取出的結果。
乘2相當於左移一位,即:RLC A(C需要先清零)
除2相當於右移一位,即:RRC A(C需要先清零)
Ⅱ 求教:51單片機,十六位二進制數乘以2後放回原單元,用移位的方法怎麼做
左移其實就是乘法。
例如十進制;10左移一位就是100,相當於10*10;
二進制:10左移一位就是100,從原先的2變為4,就是乘以2;
左移一位就是把原來的數乘以"進制".
二進制x2就是左移一位。
Ⅲ 單片機第三章作業,用移位的方法實現16位二進制數乘3的程序,16位二進制數在R0R1中,結果在R2R3中。
最要練習的是帶進位移位,帶進位加法 clr c;RLCR1,RLC R0.這個結果再加上(R0R1)。就是乘以3的結果。結果放到R2R3,很久沒有用51了,指令都忘了。但是這個題目沒有考慮溢出。比如FFFF×3後就不止16位了。R2R3放不下了
Ⅳ 單片機指令部分,兩個16進制的數怎麼相乘
你可以用兩個寄存器放一個數字,然後AB相乘就轉換為四個寄存器相乘,結果放在四個寄存器中,這樣數字就可以放下了。八位的寄存器最多能達到0FFH,放不下這么大的數,所以分開存放,然後進行相乘,可以得到結果。
Ⅳ 【說得好有獎】單片機查表時用RL或RLC移位乘2的問題!!根據這個程序幫我分析下
RL是循環左移 移除最高位進入最低位 最高位為0時無區別
還有a只有8位 91*2=122h 但是a只能放下ffh 所以最高位舍棄 變成22
嚴格意義上說 左移不等同於乘2 樓主再理解一下 不懂再把問題補充一下
設表格中有1024個數據項,每個數據為2個位元組,表格總長度為2048個位元組
你看 這里假設有1024個數據項 如果是超出部分無法查表的話 那麼ffff-1024=efdbh 一共有這么多的數據不能查 顯然題意不是這樣的。
Ⅵ 32位單片機計算兩個int16的數相乘和兩個int32的數相乘,所花的周期一樣嗎
一般是一樣的。
這個具體可以查一下晶元內核指令代碼的手冊,如果有硬體乘法指令的系統,16位運算與32位運算所用時間,一般是一樣的。
樓上的忽略了32位機這個前提。一般在32位機上是會有硬體乘法指令或者是乘法器部件,是可以在單周期內計算32位乘法的。而16位的乘法,一般都是擴展成32位的乘法來實現,所以說時間一般來說是一樣的,都是一個周期。
特殊的情況包括,
沒有硬體乘法,使用移位加程序模擬乘法功能,32位的乘法時間可能會比16位乘多一倍,當然這還取決於乘法模擬演算法的具體實現。
用32位實現16位乘法,可能需要對16位數進行額外的擴展調整,這時是16位的慢一點。一般在C語言中就是根據系統字長規定int的類型,所以在C語言中如果不考慮移植,多使用int可能會提高編譯的效率,在32位機上最好使用32位的數據進行計算反而更快一些。
Ⅶ 單片機 怎麼用位移的方法實現乘除法
因為在寄存器里的數都是二進制的,所以乘以2:左移一位;乘以4左移兩位;乘以8左移三位……依此類推(但要注意寄存器總共有多少位,防止溢出),除法用右移。
直接移位只能計算乘數(或除數)為2的n次方的乘(除)運算,對於一般的乘除法,還要配合加(減)法運算,比如a?9=a??3+a
實際上二進制數的基本運算即加,取反,移位等,通過變換來計算減,乘,除。
可以驗證,用單片機C語言編程計算乘數為2的n次方的乘法運算比乘數為一般數的乘法運算要快得多,就是因為前者只需直接移位,後者還需配合加法或經多步運算
Ⅷ 51單片機中,將R3中的數乘4(用移位指令)。 有人給的答案:
你要乘以4左移是乘以2,所以要做兩次左移,另外由於左移的RLC是帶進位C的,所以為了避免失誤每次左移前都要將C進位清0