剖析 m8trix

主要观点:

  • m8trix是作者最喜欢的演示之一,其仅用 8 字节实现了类似矩阵的效果,包含源程序及注释。
  • 讲解了在 DOS 系统下使用 DEBUG 工具分析 m8trix 的工作原理,包括实模式分段、各指令的作用及寄存器状态变化等。
  • 介绍了 m8trix 存在的问题及在 DEBUG 下不能正常运行的原因,还给出了修复方法。
  • 随后提到 m7trix 是在 m8trix 基础上进一步压缩和改进的版本,不仅尺寸更小且能清除屏幕,字符循环周期仍为 85。
  • 最后提供了一个在 DEBUG 下能正常运行且不使用错位跳转的简化版本。

关键信息:

  • DEBUG 是 MS-DOS 系统自带的工具,可通过?获取内置帮助,或参考相关指南和视频。
  • m8trix 中LES BX,[SI]DS:0000的内容加载到BXES,默认DS为程序加载段,而 DEBUG 会将SI初始化为 0 导致错误,需手动设置RSI 0100
  • LAHFFLAGS的最高位字节加载到AH,但 DEBUG 会导致其设置不正确,需运行RAX 02FF修复。
  • STOSW用于将AX的值写入ES:DI并递增DI,每个字符由一个字表示,AH=02设置颜色为深绿色。
  • 跳过列通过INC DI实现,JMP 0101 uncover 隐藏的SBBSBB AL,9F通过借位修改AL值实现动画效果,不同操作数对动画周期有影响。
  • m7trix 通过交换AXCX实现跳过列和清除屏幕的效果,字符循环周期仍为 85。
  • 简化版本使用MOV指令替代部分指令,可在 DEBUG 下正常运行且便于实验。

重要细节:

  • m8trix 程序的起始地址为073D:0100,各指令的操作及对寄存器的影响在不同步骤中详细展示。
  • DEBUG 环境下的寄存器初始值及指令执行后的状态变化,如AXBXCX等寄存器的值。
  • 关于实模式分段的解释,不同指令对段寄存器和内存地址的映射关系。
  • 不同版本程序中指令的具体修改及对程序功能的影响,如 m7trix 与 m8trix 的差异。
  • 简化版本中指令的具体修改及在 DEBUG 下的运行效果。
阅读 12
0 条评论