您好,欢迎访问三七文档
汇编除法原理除法说得简单一点就是循环做减法,等减到不能再减了,那商也就出来了,余数也就得到了。在单片机系统中,有时候也要用到除法的,但如果没有除法指令怎么办呢?而且单片机系统中除法和现实纯数学中的又不一样,它需要节约硬件资源又要运算速度快。下面就介绍一种即省时又节约资源的单字节除法算法,并附上51的汇编程序:算法思想00001001/00000011=00000011被除数是00001001(9)除数是00000011(3)商是00000011(3)余数是00000000(0)算法思想是:1、将被除数高位移入Temp中2、将Temp减去除数3、如果小于0,则置商值低位为0如果大于等于0,则置商值低位为1,并将相减的结果放入Temp中4、将商值左移1位5、判断是否循环完成(一共循环8次)6、没有则跳到步骤1继续执行7、完成则存入商值和余数(Temp)按照上面的例子执行的结果如下:1、00000000-00000011小于0,商值为000000002、00000000-00000011小于0,商值为000000003、00000000-00000011小于0,商值为000000004、00000000-00000011小于0,商值为000000005、00000001-00000011小于0,商值为000000006、00000010-00000011小于0,商值为000000007、00000100-00000011大于0,商值为00000001,余数为00000001赋值给Temp8、00000011-00000011等于0,商值为00000011,余数为00000000至此算法完成注:单字节是循环8次,如果是双字节就要循环16次,依次类推附51单片机汇编程序lt1db?;除数lt2db?;被除数tmp1db?;商tmp2db?;中间变量tmp3db?;作为被除数的中间变量tmpdb?;循环的次数code.sectionat0'code'org00hjmpstartorg04hretorg20hstart:mova,05hmovlt2,a;赋值给被除数mova,00hmovlt1,a;赋值给除数szaccjmpgo_onjmpend_;如果除数为0,程序结束;----------------go_on:mova,lt2divui_0:;开始除法运算movtmp3,a;被除数赋给tmp3mova,8movtmp,a;循环的次数clrtmp1clrtmp2divui_1:clrc;清除借位标志rlctmp3;被除数左移一位rlctmp2;把被除数从高位左移至tmp2mova,lt1;除数赋给accsuba,tmp2;tmp2与除数比较大小szz;两数相等则z为1jmpdivui_2;等于,跳到divui_2szc;不等于,判断是否有借位jmpdivui_3;没有借位,除数大于被除数divui_2:;有借位,被除数大于除数mova,tmp2suba,lt1;被除数减去除数movtmp2,a;得到余数setc;商1jmpdivui_4divui_3:clrc;商0divui_4:rlctmp1;把商移进tmp1sdztmp;循环是否有8次?jmpdivui_1;没有,继续循环mova,tmp1;把商存在acc;----------------------------end_:jmp$;原地踏步end;程序结束
本文标题:汇编除法运算原理
链接地址:https://www.777doc.com/doc-2755239 .html