inc cx是正解啊,我学过C其实早就能理解LOOP指令,可是我就是没明白他上面都把CX清零了还怎么能循环,这个题要从两个方面去理解
(1)当内存时面遇到有零的时候CX被清零了,这时如果没有INC CX那么,就相当于0-1 CX得到的是FFFF很明显不能得到正确的结果,但是当我们在那里加一句INC CX时就不同了,因为当他第一个找到为零的结果的时候CL [BX] CH,0这两句把CX清零了,也就是说我们已经找到了第一个为零的结果了,这时候我们要退出循环,怎么样退出循环,就要保证CX 为零 而LOOP S 是先CX-1 结果为零就退出,那么我们就要相办法让CX 为零,所以先让已被 CL [BX] CH,0清零的CX 加上1让LOOP S执行后刚好为零这样就刚好找到了退出循环,至于为什么要 DEC BX我想这也是一目了然的,因为前面多加了一个INC BX
(2)当内存里面不是零的时候,(这个很重要)不为零的时候很明显,CL,[BX]将得到不为零的结果,也就是说CX 会得到一个值 你不要管这个值的大小,然后INC CX这句只不过是在他找到不为零的值上面加上了1 记住这时候CX是有值的也就是这个循环不会退出会一直下去直到遇到有零的然后 不管CX里面得到内存里面多大的值他都会因为遇到内存里面有零的值把他清零,所以就回到(1) |