① 【說得好有獎】單片機查表時用RL或RLC移位乘2的問題!!根據這個程序幫我分析下
RL是循環左移 移除最高位進入最低位 最高位為0時無區別
還有a只有8位 91*2=122h 但是a只能放下ffh 所以最高位舍棄 變成22
嚴格意義上說 左移不等同於乘2 樓主再理解一下 不懂再把問題補充一下
設表格中有1024個數據項,每個數據為2個位元組,表格總長度為2048個位元組
你看 這里假設有1024個數據項 如果是超出部分無法查表的話 那麼ffff-1024=efdbh 一共有這么多的數據不能查 顯然題意不是這樣的。
② 51單片機,查表指令,乘2用移位。
51單片機查表指令是:MOVC A,@A+DPTR
DPTR是表的首地址,第二個A是偏移量。第一個A是取出的結果。
乘2相當於左移一位,即:RLC A(C需要先清零)
除2相當於右移一位,即:RRC A(C需要先清零)
③ 單片機移位指令問題:為什麼RLC A 左移一位相當於剩餘2 啊 !
你這個程序只有第一個問題的解答,即只有X2的操作。X2的操作比較好理解,P進制運算中,將數左移一位就是乘P。如10進制數左移一位就是乘10。你對後面的程序理解有問題。注釋「;累加器高位送入41H單元」是整個後面三條語句完成的,而並不是MOV 40H,A這條語句完成的。另:程序有問題,CLR C 這句應該是CLR A 。因為移位之後A的最高位會丟失,但如果最高位為1,移出時會產生進位,這時進位標志CY會置1,這樣,相當於將A的最高位移入CY中了,因此CY即表示乘法結果的高位。RLC A 將CY移入A的低位,然後MOV 41H,A 將A送入41H保存,即保存了乘法結果的高位。
另一個問題,絕對轉移指令和長轉移指令的區別就是轉移的地址范圍不一樣。絕對轉移指令的轉移地址為11位(2K),長轉移指令的轉移地址為16位(64K)。詳細區別與使用可參考網路文庫
④ 單片機 怎麼用位移的方法實現乘除法
因為在寄存器里的數都是二進制的,所以乘以2:左移一位;乘以4左移兩位;乘以8左移三位……依此類推(但要注意寄存器總共有多少位,防止溢出),除法用右移。
直接移位只能計算乘數(或除數)為2的n次方的乘(除)運算,對於一般的乘除法,還要配合加(減)法運算,比如a?9=a??3+a
實際上二進制數的基本運算即加,取反,移位等,通過變換來計算減,乘,除。
可以驗證,用單片機C語言編程計算乘數為2的n次方的乘法運算比乘數為一般數的乘法運算要快得多,就是因為前者只需直接移位,後者還需配合加法或經多步運算
⑤ 單片機循環移位指令中A=7AH,CY=1,執行指令RLC A,結果是怎麼算的
首先,RLC表示A帶進位標志(CY)循環左移一次,相當於乘以2;
進位標志CY=1,則A=7AH=123D(十進制的123)的帶進位標志用二進製表示為1 0111 1010 ,將其整體左移一位(就像是排頭走到最後一個,其他8個依次補位),
變為0 1111 0101,即十六進制的F5H=246D(即十進制的246),此時,第一個數 0 就是進位標志,即CY=0
所以,執行後結果為,(A)=F5H,CY=0。F5H=246D=123D×2
⑥ 單片機左移>>與右移<<為什麼相當於乘除運算
具體說是左移n次相當於乘以2的n次方,右移n次相當於除以2的n次方,例如0001B
左移3次就是1000B
十進制1變成了8
也就是1*2^3