其实子程序做除法是用的二进制做的,跟十进制的是一样的,下面我演示一下: 比如:85H÷12H(随便取的)算是8位除以8位吧,无符号,写成二进制为10000101B/00010010B 111 __________ 00010010 / 10000101 - 10010 ------------ 11110 - 10010 ------------ 11001 - 10010 ------------ 111 具体的方法(用上例解释):先将被除数10000101左移,直到大于或等于除数10010,即移出部分为100001,记录移位次数6,商1,移出的被除数减去除数,用8减去移位次数保存,下面是循环,循环次数就是8-6=2,循环体为(被除数(包括前面移出的共两个8位二进制数)左移一位,判断高8位是否大于等于除数,小于则进位位清零,大于等于则置1,商带进位位左移)。最后被除数的高8位为余数,商和被除数可以公用一个寄存器。 16/16,16/8等其他的依此类推,只是循环次数多一些而已
|