纯x86汇编实现的多线程操作系统实践 - 第七章 AP2的用户进程

AP2用户进程的代码为task2.asm。

该用户进程将在界面上显示一个移动的弹球。一旦在界面上点击鼠标左键,弹球就会直接从鼠标点击处重新出现并继续移动。

如何在界面上显示出一个持续移动的小球?

计算小球将移动到的区域1->保留该区域中将被小球覆盖的点->将小球的点写入区域1->计算小球将移动到的区域2->将原区域1中被小球覆盖的点复原->保留区域2中将被小球覆盖的点->将小球的点写入区域2->…

代码解释如下:

主循环中,每一次循环都先等待30ms。

将原被小球覆盖的点复原。之后,将获取小球出现在新位置的坐标。然后先保存新位置处将被覆盖的点,再显示小球。

调用0x83系统中断,获取鼠标在界面上点击处的X、Z轴。同时判断,鼠标点击处的X坐标不能小于4,也不能超过1142;同时,点击处的Y轴也不能小于82,或者超过810。(如果并没有鼠标没有点击界面,获得的X、Y轴的值将都为0)

如果获取到的X、Y坐标满足条件,则小球下一次出现的地方将被更新为鼠标点击的位置。

小球新出现的位置的X轴和Y轴数据保存在x_axle和y_axle中,先用保存新坐标的值。

将新位置处将被小球覆盖的点都保存起来。

在新位置显示小球。

改变小球下一次显示时的颜色。

之后计算下一次小球出现的位置。先计算X轴的值。

x_nxt_step中保存了小球在X轴上移动的步长,为1时,每次向右移动一步;为-1时,每次向左移动一步。

先用x_nxt_step中保存的步长与小球当前位置的X轴的值相加,然后通过x_nxt_step的值来判断小球移动的方向。

如果x_nxt_step的值大于0,小球向右移动。此时判断小球移动后的X轴位置是否大于1142,如果大于,则将步长x_nxt_step设置为-1,下次往左移动。

如果小球本身向左移动,就判断小球移动后的X轴是否小于4,如果小于,则将步长x_nxt_step设置为1,下次往右移动。

之后计算Y轴的值。与X轴的计算相同,通过步长y_nxt_step来判断小球正在往上还是往下移动。往下移动时,判断Y轴是否已经到810处,如果是,则步长改为-1,下一次开始向上移动;如果小球往上移动,则判断Y轴是否已经到82处,如果是,步长改为1,下次开始向下移动。

至于_fill_old、_save_old、_fill_new这几个函数,很简单,不再解释。

task2.asm源代码地址:https://download.csdn.net/download/hanspruce_bird/87502151

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值