我正在尝试修补旧的 8 位汇编程序例程(它恰好是 M6800,但这并不是真正特定于机器的)以获取 16 位值并向下舍入到最接近的 0x50 (dec 80) 倍数。当前代码只需对低字节执行 1 操作即可截断到最接近的32AND 0xE0,这当然会将低 5 位清零,并在不触及高字节的情况下获得正确的结果。
这是在进行一些屏幕数学运算,因此输入值将仅在0xE000到的范围内0xE7CF。由于 80 显然不是 2 的幂,所以我不能简单地做到这一点,但考虑到这是一个补丁,我试图将指令数量保持在最低限度,理想情况下不添加通用除法或查找表等。
我很困惑,怀疑没有特别聪明的方法来实现这一点。80 不是 2 的幂,而是 16 的倍数……这对我一点帮助都没有吗?任何见解、指示等都将受到赞赏。谢谢。
对于旧处理器,这可能是一个奇怪的问题,但我已经用 Java 编写了一个 Heathkit ET-3400A 微型计算机训练器的仿真。我添加了触发中断的能力,摩托罗拉 6800 数据表表明 I 标志(中断掩码)在复位时设置。然而,6800 程序员的参考资料中有一段表明它在复位时被清除。有人知道是哪一款吗?