首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Leap-year NASM汇编程序

Leap-year NASM汇编程序
EN

Stack Overflow用户
提问于 2016-04-28 08:26:15
回答 1查看 1.1K关注 0票数 0

我目前正在使用NASM elf64 x64构建一个汇编程序,它将判断输入的年份是否为闰年。目前,我已经将年份硬编码为1986年,但在最终版本中,它应该接受一个命令行参数。

然而。我一直收到浮点错误,我不知道它是从哪里来的。

代码语言:javascript
复制
    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

提前谢谢你

EN

回答 1

Stack Overflow用户

发布于 2016-04-28 08:34:06

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

然而,一个更大的问题是您正在跳转到一个不包含有效代码的位置。例如,您的_no_leap位置包含表示字符串"This is NOT a leap year\n\0“的字节,您告诉系统将其解释为代码。那是行不通的。

简单地执行数据并不能让计算机打印出来。您需要进行系统调用才能打印出字符串。实现这一点的方法依赖于平台。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36903176

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档