我目前正在使用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提前谢谢你
发布于 2016-04-28 08:34:06
在只处理整数的程序中,浮点错误通常是由不正确的除法引起的。在您的例子中,它看起来不像被零除,所以它将是一个除法溢出,正如Michael Petch在评论中指出的那样。
然而,一个更大的问题是您正在跳转到一个不包含有效代码的位置。例如,您的_no_leap位置包含表示字符串"This is NOT a leap year\n\0“的字节,您告诉系统将其解释为代码。那是行不通的。
简单地执行数据并不能让计算机打印出来。您需要进行系统调用才能打印出字符串。实现这一点的方法依赖于平台。
https://stackoverflow.com/questions/36903176
复制相似问题