導航:首頁 > 操作系統 > 單片機兩個變數相乘

單片機兩個變數相乘

發布時間:2022-08-21 03:44:25

Ⅰ 如何用單片機的匯編語言實現16位數據相乘

將(R2R3)和(R6R7)兩個16位無符號數相乘,結果放在(R4R5R6R7)
MOV
A,R3
MOV
B,R7
MUL
AB
XCH
A,R7
MOV
R5,B
MOV
B,R2
MUL
AB
ADD
A,R5
MOV
R4,A
CLR
A
ADDC
A,B
MOV
R5,A
MOV
A,R6
MOV
B,R3
MUL
AB
ADD
A,R4
XCH
A,R6
XCH
A,B
ADDC
A,R5
MOV
R5,A
MOV
F0,C
MOV
A,R2
MUL
AB
ADD
A,R5
MOV
R5,A
CLR
A
MOV
ACC.0,C
MOV
C,F0
ADDC
A,B
MOV
R4,A

Ⅱ 16位單片機 兩個int型變數相乘,結果存放在long型變數里,為什麼會溢出。

你這個很顯然,結果是溢出了,結果把4000000中高於 65536以外的部分舍棄了,只保留了低16位,所以,結果就等效於: 4000000 % 65536 = 2304
至於為什麼會這樣,我猜測,如果你確定你的C是long類型的,那就應該是編譯器的問題,我以前在運算char類型轉換到short類型的時候遇到過這種問題。
不過,你可以這么做,保證萬無一失:
long c;
c = a;
c = c*b;這樣就可以了。
另外,你也可以強制轉換:
long c;
c = (long)a*(long)b;

Ⅲ 32位單片機計算兩個int16的數相乘和兩個int32的數相乘,所花的周期一樣嗎

一般是一樣的。


這個具體可以查一下晶元內核指令代碼的手冊,如果有硬體乘法指令的系統,16位運算與32位運算所用時間,一般是一樣的。

樓上的忽略了32位機這個前提。一般在32位機上是會有硬體乘法指令或者是乘法器部件,是可以在單周期內計算32位乘法的。而16位的乘法,一般都是擴展成32位的乘法來實現,所以說時間一般來說是一樣的,都是一個周期。

特殊的情況包括,

  1. 沒有硬體乘法,使用移位加程序模擬乘法功能,32位的乘法時間可能會比16位乘多一倍,當然這還取決於乘法模擬演算法的具體實現。

  2. 用32位實現16位乘法,可能需要對16位數進行額外的擴展調整,這時是16位的慢一點。一般在C語言中就是根據系統字長規定int的類型,所以在C語言中如果不考慮移植,多使用int可能會提高編譯的效率,在32位機上最好使用32位的數據進行計算反而更快一些。

Ⅳ 各位高手,我想求教匯編中MUL指令的用法,我的單片機寄存器是8位的,現在有兩個16位的數相乘,

MUL 指令只有一種用法即:
MUL AB 即累加器A與寄存器B相乘,結果保留到A和B中
如果是兩個16位相乘,那麼需要編制一個小函數來實現了。
雙位元組無符號數乘法程序 (R3R4*R6R7)=(R5R2R3R4)
;入口: R3,R4,R6,R7
;佔用資源: ACC,B
;堆棧需求: 2位元組
;出口: R5,R2,R3,R4
NMUL22 : MOV A,R4
MOV B,R7
MUL AB
XCH A,R4
MOV R5,B
MOV B,R6
MUL AB
ADD A,R5
MOV R5,A
CLR A
ADDC A,B
MOV R2,A
MOV A,R3
MOV B,R7
MUL AB
ADD A,R5
MOV R5,A
MOV A,B
ADDC A,R2
MOV R2,A
CLR A
ADDC A,#00H
XCH A,R3
MOV B,R6
MUL AB
ADD A,R2
MOV R2,A
MOV A,B
ADDC A,R3
XCH A,R5
MOV R3,A
CLR OV
RET

Ⅳ 51單片機兩個數乘法結果怎麼送到一個地址里

MOV A,#21H
MOV B,#10H
MUL AB 怎麼把結果送到51H裡面
MOV 51H,A ;這樣就行了啊
MOV 52H,B

Ⅵ 單片機指令部分,兩個16進制的數怎麼相乘

你可以用兩個寄存器放一個數字,然後AB相乘就轉換為四個寄存器相乘,結果放在四個寄存器中,這樣數字就可以放下了。八位的寄存器最多能達到0FFH,放不下這么大的數,所以分開存放,然後進行相乘,可以得到結果。

Ⅶ 51單片機c語言計算兩個unsigned int型數據的乘積結果髙兩位溢出丟失(乘積的數據類型是unsigned long)

你把其中一個變數先放進 長整形變數中(數據類型是unsigned long), 就不會出現結果是整形了

Ⅷ 單片機如何進行兩個有符號數的相乘

在 keil編譯器裡面 使用C語言編程 將變數定義為有符號數 就可以實現你需要的功能
若是想知道原理,可以再網上搜索單片機通用子程序 裡面大部分都有多位元組的有符號和無符號數的四則運算

Ⅸ 單片機雙位元組相乘

網上有這樣的程序,直接復制過來,稍微改下就能用的。

/*---------------------------------------------------
義隆單片機
雙位元組的乘法
功能: (R22:R23)*(R24:R25)-->(R20:R21:R22:R23)
入口:
被乘數 :R22:R23 (R22高位)
乘數 :R24:R25 (R24高位)
出口:
積 :R20:R21:R22:R23(R20為高位)
局部變數 :
count
---------------------------------------------------*/

mul_sub:
clr r20 ; 清空寄存器和進位位
clr r21
mov a,@16 ; 循環16次
mov count,a
bc psw,c
rrc r22
rrc r23
mul_r1:
jbs psw,c ; 判斷移出的一位為0還是1
jmp mul_r2 ; 0的話不做運算

mov a,r25 ; 1的話做運算 R20:R21 + R24R25 --> CR:R20:R21
add r21,a ; 低位相加
jbs psw,c
jmp mul_r0

mov a,@1 ; 如果低位進位則高位加1
add r20,a
jbs psw,c ; 判斷高位加1後是否已經移出
jmp mul_r0

mov a,r24 ; 做高位運算
add r20,a
bs psw,c ; 需要手工補償進位位
jmp mul_r2
mul_r0:
mov a,r24 ; 不需要補償直接加高位的情況
add r20,a
mul_r2:
rrc r20
rrc r21
rrc r22
rrc r23
djz count
jmp mul_r1
ret

閱讀全文

與單片機兩個變數相乘相關的資料

熱點內容
甘肅省浪潮伺服器雲主機 瀏覽:721
許贖的道理愛的命令 瀏覽:718
楚留香穿越和重生的小說 瀏覽:42
酷客影院進不去 瀏覽:139
看pia網站 瀏覽:836
氫氣壓縮機型號 瀏覽:646
中國銀行app查一年之前明細怎麼查 瀏覽:991
成龍電影日本妞開車 瀏覽:801
車貼版app在哪裡下 瀏覽:381
javatimer停止又啟動 瀏覽:622
damage 電影 法國 瀏覽:896
文件夾屬性被劫持 瀏覽:307
性價比雲伺服器怎麼購買 瀏覽:112
為什麼打開騰訊視頻是文件夾 瀏覽:207
美劇戰機電影 瀏覽:721
七七影視大全里緩存的電影怎麼保存到手機相冊 瀏覽:597
讀物app在哪裡可以掃碼 瀏覽:635
編程學員作業檢查報告 瀏覽:256
單片機有幾個寄存器 瀏覽:204
安卓如何安裝泰劇迷app 瀏覽:42