【问题标题】:Floating point exceptions in x86 NASM assembly using div instruction [duplicate]使用 div 指令的 x86 NASM 程序集中的浮点异常 [重复]
【发布时间】:2013-10-17 02:55:56
【问题描述】:
我有一个任务,我必须输入一个数字,并找出所有质数,但不超过该数字。例如,如果我在程序中输入 9,它应该会打印 3、5 和 7。
我确定一个数是否为素数的计划是将其除以 2 并检查余数是否为 0。如果余数为 0,则程序从被除数中减去 1,然后循环回到顶部以再次除法.如果余数 != 0 则将其打印到屏幕上,并再次减少股息。这会一直发生,直到被除数为 0。只是这不是正在发生的事情,无论出于何种原因,每当我使用 DIV 指令时,我总是会遇到浮点异常,我似乎无法弄清楚为什么或如何解决它。有人对我如何解决此问题有任何想法吗?
代码:%INCLUDE "csci224.inc"
段.数据
提示:DD "请输入一个数字:",0 ;提示字符串
message: DD "是素数。", 0 ;当 n 为素数时显示
无效:DD "无效条目。", 0
我: DD 2
段.bss
输入:RESD 100;没必要,忽略这个
段 .text
主要的:
mov edx,提示
调用 WriteString
调用 ReadInt
移动 esi, eax ;将 eax 移入 esi 以用作循环的索引
循环:
异或 edx, edx ;清除寄存器
异或 ecx, ecx
xor eax, eax
移动 eax, dword 2 ; mov 2 到 eax
div ecx ; ecx/eax | n/2
决定;递减循环计数器
dec ecx ;递减分子
cmp edx, 双字 0 ;余数为零?
我的循环;是 - 不是素数 - 跳回顶部
移动 eax, edx ;否 - 移动到 eax 并打印
调用 WriteInt
呼叫 Crlf
cmp esi, 0 ;计数器为零?
jz完成;是 - 结束循环
jmp myloop ; NO - 再次循环
完成的:
ret
【问题讨论】:
标签:
assembly
x86
nasm
floating-point-exceptions