闰年NASM大会计划

时间:2016-04-28 00:26:15

标签: assembly nasm elf

我目前正致力于使用NASM elf64 x64构建汇编程序,该程序将告知输入的年份是否为闰年。目前,我已将该年硬编码为1986年,但在最终版本中,它应该采用命令行参数。

然而。我不断得到一个浮点错误,我无法弄清楚它来自哪里。

    global main
    extern puts
    section .text

main:
    mov rax, year
    cwd
    mov rcx, 400
    div rcx
    test rdx, rdx
    jz _is_leap

    mov rax, year
    cwd
    mov rcx, 100
    div rcx
    test rdx, rdx
    jz _no_leap

    mov rax, year
    test rax, 3
    jz _is_leap

 year
    dq      1986, 10, 0      


 _no_leap:
    db      "This is NOT a leap year", 10, 0            ;print out is not a leap year
    jmp _after

 _is_leap:
    db      "This is a leap year", 10, 0            ;print is a leap year
    jmp _after

 _after:
    ret

提前谢谢

1 个答案:

答案 0 :(得分:0)

仅处理整数的程序中的浮点错误通常是由不正确的除法引起的。在你的情况下,它看起来不像是一个除零,所以它将是一个除法溢出,正如Michael Petch在评论中指出的那样。

更大的问题是您跳转到不包含有效代码的位置。例如,您的_no_leap位置包含表示字符串“这不是闰年\ n \ 0”的字节,并且您告诉系统将其解释为代码。那是行不通的。

简单地执行数据不会使计算机打印出来。您需要进行系统调用才能打印出字符串。这样做的方法取决于平台。