我目前正致力于使用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
提前谢谢
答案 0 :(得分:0)
仅处理整数的程序中的浮点错误通常是由不正确的除法引起的。在你的情况下,它看起来不像是一个除零,所以它将是一个除法溢出,正如Michael Petch在评论中指出的那样。
更大的问题是您跳转到不包含有效代码的位置。例如,您的_no_leap
位置包含表示字符串“这不是闰年\ n \ 0”的字节,并且您告诉系统将其解释为代码。那是行不通的。
简单地执行数据不会使计算机打印出来。您需要进行系统调用才能打印出字符串。这样做的方法取决于平台。