导航:首页 > 操作系统 > 单片机多位乘法

单片机多位乘法

发布时间: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; } }}

阅读全文

与单片机多位乘法相关的资料

热点内容
UG命令变成灰色用不了 浏览:150
sdk命令 浏览:94
好玩免费下载的解压游戏 浏览:9
单片机老师招聘考试内容 浏览:425
弹性云服务器配置流程 浏览:304
android交叉编译linux 浏览:988
金圣叹水浒传pdf 浏览:501
安卓官换新机是什么意思啊 浏览:922
java如何分页 浏览:558
如何查找加密的视频 浏览:742
单片机lcd汉字显示 浏览:879
能够识别中文的编译器 浏览:63
androidlayout注释 浏览:959
重启手机命令 浏览:838
程序员那么可爱男女主是谁 浏览:492
文件如何上传到自己的服务器 浏览:401
你用什么app 浏览:224
安卓平板用什么优化软件 浏览:747
centos重新编译程序 浏览:335
cocoapods命令 浏览:906