【问题标题】:New to assembly, trying to figure out a simple code组装新手,试图找出一个简单的代码
【发布时间】:2017-04-22 14:40:52
【问题描述】:

我试图在最后找出这段代码的 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 初始值,因为它没有在代码中的任何地方定义,我错过了什么?

【问题讨论】:

标签: assembly x86


【解决方案1】:

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

【讨论】:

  • 哦,我明白了,谢谢,不能选择它作为最佳答案 atm 但我会的。
  • RDXit is preferred because it is shorter and faster 的影响在功能上等效。但是,一个显着的区别:XOR 操作设置标志,而MOV 操作不影响标志。有时这很重要,当它重要时,您需要mov $0, %rdx
猜你喜欢
  • 2012-10-07
  • 2017-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-15
相关资源
最近更新 更多