讨论区 综合讨论区 主题详情
pisct
老师参与 我感觉这个地方没有所谓的潜在问题

所有回复(5)

bx dx 相等之前就进行跳转结束了。。。

中间的 bx dx  我记得 都进行push 和 pop 。。。 所以是会产生相等的情况 。。


只要 call get_top_row 从最上面开始找。

2021-3-21

loop 指令 执行的话是 cx 先-1 啊 我记得视频中有 演示。。  如果 是0的情况下会发生什么

2021-3-21

消行之后 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


2021-3-20

发表观点要登录哦!点击登录

但是为什么 cx =  0  程序的结果还是对的. 

2021-3-20

章节一 28课时.  潜在问题那个.

draw_screen 和 get_top_raw  每次  check_clear_row 的时候都会 重新执行.  

在 进入  draw_new_screen 之前  bx , dx 都是一样的. 

而 check_clear 里面 的 最后得到的 bx 是  可消行的 那行的 首地址.


也就 是 说 在  上面 没有多余 方块的情况下.   我们两个相减的值  dx  和  bx  是 相等的. 

所以 cx 等于 0  执行一次 .  很合理.  


2021-3-20

回复

发布

发表观点要登录哦!

最近活动:2021-3-21
创建时间:2021-3-20
浏览次数:102
关注人数:0

使用协议与隐私政策

感谢您使用网易云课堂!

为了更好地保障您的个人权益,请认真阅读《使用协议》《隐私政策》《服务条款》的全部内容,同意并接受全部条款后开始使用我们的产品和服务。若不同意,将无法使用我们的产品和服务。

同意
手机课堂
下载App
返回顶部