看的不是很明白,能大概解释一下吗
追答说明:
MOV 30H, #255 ;百位,初始化为-1
MOV A, N ;8位数,0~255
LP1:
INC 30H--第一次加一即为零
CLR C
SUBB A, #100----N 减100
JNC LP1--无借位,再去《商加一、减100》
-------有借位,即不够减了,则停止循环
ADD A, #100--补回减去的100,
-------除以100,到此就结束了。
----------------------
N 的百位数,是 0~2。
如果是0,第一次加一,商就是0,
然后减100,必定不够减,那就不循环了,
补上100 之后,往下,就去除以 10 了。
如果是1,《加一,减100》,就能进行两次。
商,加两次,就是1。
减两次100,才不够减。
补上100 之后,往下,就去除以 10 了。
……
----------------------
循环的《加一,减 10》,最多循环10遍,即可求出十位数。
思路,和求百位数,是相同的。
----------------------
另外网友提供的 C 程序,逻辑上是正确的。
但是,他是在每一个循环里面:
先判断是否够减,够减再减,不够减退出循环。
实际上,判断够减否,就必须做一次减法。
那么,他是每减一个数,必须做两次减法。
就是说,这个C程序,功能,虽然相同,
运算量,却是我的汇编程序的大约两倍。
如果商是 9,他就必须做 18 次减法。
而我的程序,只做 10 次减法、1次加法。
我的程序,在STM32上验证过,是正确的。