我目前正在x86 Linux上编写一个NASM程序,我正在尝试执行一个计算,将第一个命令行arg(一年)除以第一个闰年检查。我想检查余数是否为0,但我正在努力解决这个问题。我知道div命令将答案存储在某个寄存器中,剩余部分存储在另一个寄存器中,但现在我只是使用测试。这是代码
global main
extern puts
extern printf
extern atoi
section .text
main:
sub rsp, 8
cmp rdi, 2
jne error1 ; jump if aguments != 1
mov rdi, [rsi+8]
call atoi
test rdi, fourTest
jnz notLeapYear
jmp done
testTwo:
jmp done
notLeapYear:
mov edi, nLeap
call puts
jmp done
error1:
mov edi, badArgs
call puts
jmp done
done:
add rsp, 8
ret
badArgs:
db "Requires exactly one argument", 5, 0
nLeap:
db "Not a leap year", 5, 0
section .data
fourTest: dq 4
hundTest: dq 100
fHundTest: dq 400
我相信我需要更改测试rdi,fourTest到使用div但不知道如何隔离剩余部分并确定我是否应该跳到下一个测试或者我是否应该跳到不是闰年。
答案 0 :(得分:0)
首先,函数的返回值进入eax
,以便atoi
结果的位置。然后像这样使用div
:
xor edx,edx
div 4
现在,除法的结果将在eax
,其余部分将在edx
。