gpt4 book ai didi

linux - 在 nasm 程序中隔离余数

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:24:54 26 4
gpt4 key购买 nike

我目前正在 x86 Linux 上编写一个 NASM 程序,我正在尝试执行一个计算,将第一个命令行 arg(一年)除以第一个闰年检查。我想检查余数是否为 0,但我正在为如何做到这一点而苦苦挣扎。我知道 div 命令将答案存储在某个寄存器中,将余数存储在另一个寄存器中,但现在我只是在使用 test.这是代码

        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 但不知道如何分离余数并确定我是否应该跳到下一个测试或者我是否应该跳到不是闰年。

最佳答案

首先,函数的返回值进入 eax,因此 atoi 结果将在此处。然后像这样使用 div:

xor edx,edx
div 4

现在除法的结果将在 eax 中,余数将在 edx 中。

关于linux - 在 nasm 程序中隔离余数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36901647/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com