【发布时间】:2016-04-28 00:26:15
【问题描述】:
我目前正在使用 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
提前谢谢你
【问题讨论】:
-
只是出于好奇,一年后的“, 10, 0”是什么意思?
-
cwd不会像您认为的那样做。你应该简单地将rdx归零。正如马蒂所说,不要跳入数据:) -
@MattiVirkkunen 的印象是这些是完成“db”语句所必需的
-
不,您不需要随机幻数来“完成”数据声明。通常在字符串之后看到它们,因为它们代表换行符和用于终止字符串的空字节,这在将它们传递给期望以空终止字符串的函数时很有用。
-
您可能需要查看您的classmates code 以了解如何使用
puts打印字符串。