消行之后 draw_new_screen
在画新屏幕的时候
我们会清除 最上面一行。 实际上 。 我们 运行下面代码 会发现。
预期的是 消除 一行 。
但是 消除了 两行。 这里的 clear_row 确实清楚了 最上面一行 。 但是 这个最上面 一行。 本来 应该是 在 check_clear_row 里面 消除的。
; 在 执行 get_top_row 之前
; 3042 为 底部边界 蓝色部分第二个字符
; bx = dx = 3042 - 320 = 2722 倒数第二行 内容
; 执行之后 最上面的一行 就 变为了 bx = 3042-160 = 2882 最后一行内容
; 然后执行 draw_new_line 会 发现 。 本来清楚 最上面一行的代码 。
; 提前将 下一轮循环的 消行 给 消掉了。
; 因为调用的 是一个 clear_row 当只有一行的时候。 即是最后一行也是第一行(最上面一行)
; 第二轮循环的时候 cx = 1
bx = 2882
dx = 2882
会从 最后一行开始检查 ,
但是 那个时候 屏幕上 没有 4432h 了。
所以 执行完 14 次 列 的遍历 检查之后 程序 ret 了。
> 这 就是为什么 程序 可以 正常执行 的原因 。
> 因为根本没有 进入 clear_row 和 draw_new_screen
发表观点要登录哦!点击登录
我也来评论