AttoChess, a complete, playable chess program for 16-bit x86 DOS in 278 bytes2 months agohttps://nicholas-afk.github.io/AttoChess/AttoChess通过重新思考棋盘显示、走棋解码和搜索循环进行优化,节省了10字节。棋盘显示直接使用int 29h中断绘制到控制台,移除了渲染缓冲区和DOS的09h功能。启动过程去除BIOS模式设置,使用确定性假设和cld指令以缩小代码体积。输入解码器将常量折叠到基地址中,利用16位指针运算和imul指令提高效率。搜索循环通过比较指针释放CX寄存器,避免从栈中重新加载深度信息。兵的行进方向通过异或操作与颜色位折叠,使两种颜色的处理共用同一路径。
Demystifying the Red Zone: Optimizing Leaf Functions2 months agohttps://zlnv.ch/posts/red-zone/在 x86-64 和 ARM64 Mac 系统中,红区是栈指针下方的一个 128 字节安全区域,由 System V ABI 定义。它允许叶函数跳过栈指针调整,通过减少指令数量来优化性能。内核异步写入(如信号帧)会避开红区,确保 rsp 下方 128 字节内的数据保持原状。一个工作量证明函数示例展示了这种优化,通过避免栈管理操作节省了 6% 的指令。Windows 系统未采用红区,而是使用 32 字节的影子空间进行寄存器参数溢出。汇编代码验证了红区的保护机制:其内部内存在信号处理过程中得以保留,而外部数据则被破坏。