【发布时间】:2021-02-15 05:12:37
【问题描述】:
考虑 16 位架构:
在下面的代码中,
测试.s
bits 16
section .text
test:
aam 7 ; divide n by 7
mov cl, al ; cl = n % 7
dec ecx ; <--- here if n was power of 7 we get the underflow
; ... more things where I make use of ah = n / 7
add eax, ecx ; return that number
ret
我想知道如何检查under流。 jo、adc 和 setc(进位标志正常)都没有用。
如果不可能,那么只有当 ecx 为负时才将其转换为 0 的汇编代码
【问题讨论】:
-
dec ecx如果产生否定结果,则设置 SF; (从减少 ECX 中的旧垃圾并合并新的低字节......)您可以将其与cmovs或js一起使用。 (或cmovl/jl)。 -
非常感谢彼得,
js成功了。你可能想回答 -
正如我评论您的代码高尔夫球链接时,
dec ecx根据整个 ECX 寄存器设置 SF,但mov cl, al仅将一个新的低字节合并到任何现有字节中。此外,“7 的倍数”,而不是“幂”,余数 = 0。 -
我将在本地重新编译文件以确保字节码并查看您的建议并进行相应的编辑,非常感谢!