四 二进制乘法运算
EM78 单片机 没有乘法指令,所以乘法运算需要转化为加法运算。0X20单元数据乘以0X21单元数据,结果放在0X22,0X23中。
main: mov a,@0x0 0x22,0x23单元清0
mov 0x22,a
mov 0x23,a
mov a,@0x3f 赋值
mov 0x20,a
mov a,@0x22
mov 0x21,a
mul1: mov a,0x20 ;0x20与0x22内容相加
add 0x22,a
jbc 0x03,0
inc 0x23 有进位0x23加1
djz 0x21 0x21中次数减到0则结束
jmp mul1 没减到0则继续
self: jmp self
eop
五 二进制除法运算
多字节二进制除法
被除数为3个字节,在0x20、0x21、0x22单元中,0x22.7为最高位,0x20.0为最低位。
除数为2个字节,在0x30、0x31中。
算法:EM78 单片机 没有除法指令,而且本例中除法为多字节除法,可采用如下算法。
将被除数扩充一个字节0X23,0X23清0。被除数左移1位,0X23、0X22中数据减去0X31、0X30中数据,够减则减且0X20.0置1,减出结果存入0X23、0X22;不够减则0X23、0X22保持不变,0X20.0清0。然后被除数再左移1位,重复上述过程。共循环16次,最后0X23、0X22中得相减余数,0X21、0X20中得商。注意,若被除数左移后C标志为1,则不比较0X23、0X22与0X31、0X30数据大小关系而直接相减。
main: mov a,@0x55 被除数赋值
mov 0x20,a
mov 0x21,a
mov 0x22,a
mov a,@0x0 被除数扩充1字节并清0
mov 0x23,a
mov a,@0x12 除数赋值
mov 0x30,a
mov 0x31,a
mov a,@0x10 循环次数为16
mov 0x32,a
again: call rt_sub 调移位除法子程
上一篇:EMC单片机写的I2C程序