微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

AVR,组装,标志 V

如何解决AVR,组装,标志 V

我需要有关汇编程序的建议 (AVR ATMega169)。我必须创建代码来计算这个表达式。

keyboard.hook(on_key)

我尝试计算代码中的算术表达式并始终检查溢出指令但它无法正常工作

R20 = (4 * R16 + 3 * R17 - R18) / 8

解决方法

就正确设置溢出标志而言,大多数单个操作都会正确设置溢出标志,即addsublsl。然而,asr 似乎并没有以特别有意义的方式设置溢出标志关于有符号除法。

问题在于正确设置溢出标志的指令也会清除溢出标志(成功/无溢出),因此它们根据单个算术运算设置或清除它。因此,似乎没有直接的方法可以跨多个指令累积溢出条件。

解决方案是在每次操作后测试是否溢出,可能是通过分支到出口(跳过其余的计算——尽管设置了溢出标志,但在 R20 中留下垃圾。)因为除以 8不能溢出,那么如果你到达那部分代码(即没有溢出之前的计算),那么我会在除法之后和到达出口之前清除溢出标志。

另一种方法是在每次操作后将溢出标志 or 放入某个变量中,然后使用该变量在最后设置溢出标志。当溢出确实发生时,这种方法会在 R20 中留下一个更可预测的值,代价是额外的指令和变量。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。