使用 div 指令的 x86 NASM 程序集中的浮点异常 [重复]
Posted
技术标签:
【中文标题】使用 div 指令的 x86 NASM 程序集中的浮点异常 [重复]【英文标题】:Floating point exceptions in x86 NASM assembly using div instruction [duplicate] 【发布时间】:2013-10-17 02:55:56 【问题描述】:我有一个任务,我必须输入一个数字,并找出所有质数,但不超过该数字。例如,如果我在程序中输入 9,它应该会打印 3、5 和 7。
我确定一个数是否为素数的计划是将其除以 2 并检查余数是否为 0。如果余数为 0,则程序从被除数中减去 1,然后循环回到顶部以再次除法.如果余数 != 0 则将其打印到屏幕上,并再次减少股息。这会一直发生,直到被除数为 0。只是这不是正在发生的事情,无论出于何种原因,每当我使用 DIV
指令时,我总是会遇到浮点异常,我似乎无法弄清楚为什么或如何解决它。有人对我如何解决此问题有任何想法吗?
【问题讨论】:
【参考方案1】:在这部分代码中:
xor ecx, ecx ; Clears ecx (set to 0)
xor eax, eax ; Clears eax (set to 0)
mov eax, dword 2 ; Sets eax to 2
; NOTE: you had just set it to 0 in the prior step)
; PROBLEM; the following code computes eax/ecx, which is 2/0 - the comment is wrong
div ecx ; ecx/eax | n/2
【讨论】:
作为旁注更简洁的除/乘以二的幂的方法是移位指令。也更具可读性。 @rAndom69 同意。我回答的目的是直接向 OP 指出他们的特定代码存在的问题。以上是关于使用 div 指令的 x86 NASM 程序集中的浮点异常 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
YASM/NASM x86 程序集中立即数与方括号的基本使用