導航:首頁 > 操作系統 > 單片機多位乘法

單片機多位乘法

發布時間:2022-06-20 20:21:27

單片機(多位元組數乘法和除法)

有現成的例成啊

② 51單片機非壓縮BCD碼多位數乘法的匯編程序求助

對於多位元組乘除法用匯編語言計算是很不方便的,特別是還要用bcd碼計算,這里給你一個思路,先將A,B都轉換成二進制數,然後用部分積右移演算法計算乘法(參考我的文章http://wenku..com/view/e651f6c9a1c7aa00b52acb30.html?st=1),這種方法是目前比較好的匯編語言乘法演算法,不管數據位數的多少都可以計算。最後將計算結果再轉換為BCD碼。

你可以按這個方法先練習做一下,有什麼問題再追問吧。

③ 單片機乘法究竟怎麼運算

51單片機乘法指令是 MUL AB
A*B結果高八位為B,低八位為A。

④ 單片機乘除指令計算的具體步驟

關於MUL的用法書上有應該,我就不說了。說幾點:

一、單片機的乘法運算只是進制不同,跟我們常用的十進制是一樣的。例如:12×10=120

不要簡單想成在後邊加個0,學了單片機應該學會用*移位*思考,因為單片機不會在後邊加 0減0,應該想成12向左移一位,同樣二進制的11B×10B =110B ,十六進制11H×10H=110H,八進制也一樣。

二、想不通 ,還可換算成十進制去算,然後再轉換成相應進制。因為他們數量是一樣的只是進 制不同。十進制要滿是個進一位,八進制要滿8個進一位。十進制的10和八進制的12是一 樣的。

啰嗦了半天希望能理解其中的意思。

⑤ 單片機乘法指令

乘法指令當結果大於0FFH時,A就裝不下了,所以「溢出」了,大於部分裝入到B裡面。

⑥ 單片機怎麼計算16位數的乘法

加個強制轉換行不行 (float)(0x2ab/1024)*500;

⑦ 如何用單片機的匯編語言實現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

⑧ 一個單片機的乘法指令

單片機乘法指令是MUL AB,只能是累加器A和寄存器B相乘,結果低八位存入A,高八位存入B。
比如題中,A=4EH,B=5DH,A*B=1C56H,所以A=56H,B=1CH

⑨ 51單片機帶小數的多位元組乘除運算

對於多位元組數,估計你不會直接保存成數值而是要保存成字元串了吧,當然如果你保存成數值的話通過連續乘10直到結果為整數的方法計算小數點後的位數,對於小數相乘來說,兩個數的小數點位數相加就是結果的小數點位數。數值計算可以全當整數,按大數乘法計算。而除法可以通過同時向後移位小數位到全部都是整數,用大數除法的演算法解決。如果存的是數值,直接連續乘10.
附,大數計算,這個是在電腦上編的,不過都是C語言,可以參考,有不懂可以問我。
#include <stdio.h>#include <string.h>
//-----------------------------------------------//將字元串轉化為整形數組void str2int(char *a,char *b,int ia[1024],int ib[1024],int ir[1024]){ int i,len; //對數組初始化 for (i=0;i<1024;i++) { ia[i]=0; ib[i]=0; ir[i]=0; } //將a翻轉後輸入到數組 i=strlen(a); len=strlen(a); while(i) { i--; ia[len-i-1]=*(a+i)-48; } //將b翻轉後輸入到數組 i=strlen(b); len=strlen(b); while(i) { i--; ib[len-i-1]=*(b+i)-48; }}//-----------------------------------------------//比較大小int cmp(char *a,char *b){ int i,sg; if (strlen(a)>strlen(b)) { sg=0; } else if (strlen(a)<strlen(b)) { sg=1; } else { for (i=0;i<(int)strlen(a);i++) { if (*(a+i)>*(b+i)) { sg=0; break; } else if (*(a+i)<*(b+i)) { sg=1; break; } else sg=0; } } return sg;}//-----------------------------------------------//加法函數char *add(char *a,char *b){ int len,i,c; int ia[1024],ib[1024],ir[1024]; str2int(a,b,ia,ib,ir); if (strlen(a)>strlen(b)) len=strlen(a); else len=strlen(b); c=0; //加法運算 for (i=0;i<len;i++) { ir[i]=(ia[i]+ib[i]+c)%10; c=(ia[i]+ib[i]+c)/10; } if (c==1) { ir[len]=1; len++; } for (i=0;i<len;i++) { *(a+i)=ir[len-i-1]+48;//翻轉輸出 } *(a+len)='\0'; return a;}//-----------------------------------------------//減法函數char *sub(char *a,char *b){ int len,i,c,sg; int ia[1024],ib[1024],ir[1024]; char str[1024]; char *strrt; str2int(a,b,ia,ib,ir); //符號判斷 sg=cmp(a,b); if (sg==0) len=strlen(a); else len=strlen(b); c=0; //減法運算 for (i=0;i<len;i++) { if (sg==0) { if ((ia[i]-ib[i]-c)>=0) { ir[i]=ia[i]-ib[i]-c; c=0; } else { ir[i]=10+ia[i]-ib[i]-c; c=1; } } else { if ((ib[i]-ia[i]-c)>=0) { ir[i]=ib[i]-ia[i]-c; c=0; } else { ir[i]=10+ib[i]-ia[i]-c; c=1; } } } if (sg==1) str[0]='-'; for (i=0;i<len;i++) { str[i+sg]=ir[len-i-1]+48;//翻轉輸出 } str[len+sg]='\0'; strrt=str; //去零處理 if (sg==0) { while(len>1&&*strrt=='0') { strrt++; len--; } } if (sg==1) { strrt++; while(len>1&&*strrt=='0') { *strrt='-'; strrt++; len--; } strrt--; } strcpy(a,strrt); return a;}
//-----------------------------------------------//乘法函數char *mul(char *a,char *b){ int len,lena,lenb,i,j,c,jin; int ma[1024],mb[1024],mr[1024]; char stra[1024],strb[1024]; char *strrta,*strrtb; stra[0]='0'; stra[1]='\0'; strrta=stra; str2int(a,b,ma,mb,mr); //乘法運算 lena=strlen(a); lenb=strlen(b); for (j=0;j<lena;j++) { c=0; jin=0; for (i=0;i<lenb;i++) { mr[i]=(ma[j]*mb[i]+c)%10; c=(ma[j]*mb[i]+c)/10; } len=lenb; if (c>0) { strb[0]=c+48; jin=1; } for (i=0;i<len;i++) { strb[i+jin]=mr[len-i-1]+48; } for (i=len;i<len+j;i++) strb[i+jin]='0'; strb[len+j+jin]='\0'; strrtb=strb; add(strrta,strrtb); } strcpy(a,strrta); return a;}//--------------------------------------------------//除法函數char *div(char *a,char *b){ int len,lena,i,j; char stra[1024],strb[1024],strc[1024],strd[1024]; char *strbp; strbp=strc; strcpy(stra,a); strcpy(strb,b); strcpy(strd,a); if (cmp(stra,strb)==1) { //被除數小於除數 *a='0'; *(a+1)='\0'; strcpy(b,stra); } else { //被除數大於除數 mul(strb,"10"); len=strlen(a)-strlen(b); if (len==0||(len==1&&cmp(stra,strb)==1)) { strcpy(stra,a); strcpy(strb,b); i=1; strc[0]='1'; strc[1]='\0'; while(cmp(stra,strc)==0) { strc[0]=i+48; strc[1]='\0'; mul(strc,strb); i++; } *a=i+46; *(a+1)='\0'; strcpy(strc,a); mul(strc,strb); sub(stra,strc); strcpy(b,stra); } else { len=strlen(a)-strlen(b); for (j=0;j<=len;j++) { for (i=0;i<=(int)strlen(b);i++) { if ((i+j-1)<0) stra[i]='0'; else stra[i]=*(a+i+j-1); } stra[strlen(b)+1]='\0'; strcpy(strb,b); strbp=stra; lena=strlen(strbp); while(lena>1&&*strbp=='0') { strbp++; lena--; } div(strbp,strb); strc[j]=*strbp; strbp=strb; for (i=0;i<(int)(strlen(b)-strlen(strb));i++) { strbp--; *strbp='0'; } for (i=strlen(b)-1;i>=0;i--) { *(a+i+j)=*(strbp+i); } } strc[len+1]='\0'; strbp=strc; lena=strlen(strbp); while(lena>1&&*strbp=='0') { strbp++; lena--; } strcpy(a,strbp); mul(strbp,b); sub(strd,strbp); strcpy(b,strd); } } return a;}
void main(){ char a[1024],b[1024],c; c='0'; while(c!='q') { printf(">>請輸入命令\n>>+ 加\n>>- 減\n>>* 乘\n>>/ 除\n>>q 退出\n>>"); c=getchar(); getchar(); switch(c) { case 'q':break; case '+': printf(">>請輸入第一個加數\n>>"); gets(a); printf(">>請輸入第二個加數\n>>"); gets(b); printf(">>和為%s",add(a,b)); getchar(); break; case '-': printf(">>請輸入被減數\n>>"); gets(a); printf(">>請輸入減數\n>>"); gets(b); printf(">>差為%s",sub(a,b)); getchar(); break; case '*': printf(">>請輸入第一個乘數\n>>"); gets(a); printf(">>請輸入第二個乘數\n>>"); gets(b); printf(">>積為%s",mul(a,b)); getchar(); break; case '/': printf(">>請輸入被除數\n>>"); gets(a); printf(">>請輸入除數\n>>"); gets(b); div(a,b); printf(">>商為%s余數為%s",a,b); getchar(); break; default:break; } }}

閱讀全文

與單片機多位乘法相關的資料

熱點內容
精通編程入門 瀏覽:14
99單片機原理 瀏覽:59
linuxssh互信 瀏覽:286
支持128加密的瀏覽器 瀏覽:290
程序員下載器 瀏覽:48
退出雲伺服器代碼 瀏覽:900
軍狀如命令 瀏覽:263
如何安卓系統更新 瀏覽:74
linux命令在哪裡輸入 瀏覽:497
編程語言集合類怎麼選 瀏覽:93
如何將pdf轉化為word 瀏覽:11
邁克菲隔離區解壓密碼 瀏覽:785
怎麼用偉福編譯 瀏覽:867
計算機演算法專家 瀏覽:501
什麼app清理垃圾 瀏覽:643
android流媒體伺服器 瀏覽:183
各種演算法的時間復雜度是指 瀏覽:116
幫助高考生緩解壓力 瀏覽:850
自媒體聚合APP需要什麼資質 瀏覽:487
求標准體重的演算法 瀏覽:740