【问题标题】:Floating point exception in NASMNASM 中的浮点异常
【发布时间】:2014-10-20 05:01:49
【问题描述】:

出于学习目的,我正在 nasm 中编写一个小除法程序,但每当我尝试运行它时,我都会不断收到“浮点异常”。代码如下:

segment .data
x dw 7
y dw 2

segment .bss
num resb 2
segment .text
global _start
_start:
mov cx, 1
mov bx, 0

label1:
mov ax, cx
xor bx, bx
xor edx, edx
mov bx, word [x]
div bx
cmp edx, 0
jne next
mov ax, cx
xor bx, bx
xor edx, edx
mov bx, word [y]
div dx
cmp edx, 0
jne next

mov [num], cx

mov eax, 4
mov ebx, 1
mov ecx, num
mov edx, 2
int 80h

add bx, 1
next:
add cx, 1
cmp cx, 100
jle label1

exit:   
mov eax, 1
xor ebx, ebx
int 80h

如果有人能指出我做错了什么,我将不胜感激!

【问题讨论】:

    标签: exception assembly nasm


    【解决方案1】:

    您的代码中有这一行:

    div dx
    

    显然除以dx 是一个坏主意,因为dx 也是被除数的一部分,并且您在除法之前正确地将dx 设置为零。我认为这是一个错字,你真的打算写

    div bx
    

    【讨论】:

    • 确实,这是一个错字。谢谢你指出;然而,我确实注意到了一个不同的问题,即没有任何东西输出到屏幕上。知道这是为什么吗?
    • sys_write 系统调用不会在输出前将整数转换为字符串。如果要打印整数,则必须先将其转换为字符串。
    猜你喜欢
    • 2013-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多