Assembly 对于汇编来说是个新手,试图找出一个简单的代码

Assembly 对于汇编来说是个新手,试图找出一个简单的代码,assembly,x86,Assembly,X86,我试图在最后计算出这个代码的RAX值 start: mov $1024, %rax mov $4096, %rbx mov $2048, %rcx xor %rdx, %rdx sub %rcx, %rbx cmp %rbx, %rax jge loopa jmp loopb loopa: cmp $4, %rdx jg end inc %rdx loopb: xchg %rax, %rbx idiv %rbx add %rdx, %rax imul %rcx jmp loopa end: 我

我试图在最后计算出这个代码的RAX值

start:
mov $1024, %rax
mov $4096, %rbx
mov $2048, %rcx
xor %rdx, %rdx
sub %rcx, %rbx
cmp %rbx, %rax
jge loopa
jmp loopb
loopa:
cmp $4, %rdx
jg end
inc %rdx
loopb:
xchg %rax, %rbx
idiv %rbx
add %rdx, %rax
imul %rcx
jmp loopa
end:

我所做的是遵循寄存器的值,开始时RAX定义为1024,RBX定义为4096,RCX定义为2048,但随后代码在RDX上使用XOR,然后在loopa中对其进行比较,但我似乎不理解RDX的初始值,因为它在代码中的任何地方都没有定义,我遗漏了什么?

rdx的初始值在这里并不重要,因为
xor%rdx,%rdx
将rdx的所有位设置为零。它在功能上相当于
mov$0,%rdx

xor%rdx,%rdx
将注册表中可能重复的Oh清零。我明白了,谢谢,我不能选择它作为最佳答案atm,但我会。在功能上,它对
rdx
的效果相当,并且。但是,有一个显著的区别:
XOR
操作设置标志,而
MOV
操作不影响标志。有时这很重要,当它发生时,您需要
mov$0,%rdx