gpt4 book ai didi

c - 任务: Rewrite X86-assembler program in C

转载 作者:行者123 更新时间:2023-11-30 19:31:35 25 4
gpt4 key购买 nike

我在回答计算机系统考试测试集中的一个问题时遇到问题。

问题/任务是:“用 C 语言重写以下 X86 汇编程序”

我已经浏览了汇编代码,并评论了我认为我知道的内容:

program:
movq (%rdi), %rax # 1st argument copied to return value register
testq %rax, %rax # Sets ZF to 1 if value stored in it is 0 (return value == 0)?
je L1 # Jump to L1 if (ZF == 1)
addq $8, %rdi # Value 8 is added to 1st argument
movq %rax, %rdx # Retun value register is copied to 3rd argument
L3:
cmpq %rdx, %rax # sets SF if (return value - 3rd argument < 0)?
cmovl %rdx, %rax # Copy 3rd argument to return value register if (SF = 1)?
addq $8, %rdi # Value 8 is added to 1st argument
movq -8(%rdi), %rdx # ?
testq %rdx, %rdx # Sets ZF to 1 if value stored in it is 0 (3rd argument == 0)?
jne L3 # Jump to L3 if (ZF == 0)?
L1:
ret # Pop's return address off the stack, and sets intruction pointer to it

有一些事情我不确定,如果有人能为我澄清,那就太好了:

  • testq %rax, %raxtestq %rdx, %rdx 的用途是什么?
  • 代码使用了 %rdi (arg1) 和 %rdx (arg3),但没有使用 %rsi (arg2) - 是这是为了欺骗我们的学生(arg2 没有使用),或者当转换为 C 时应该如何解释?
  • 我们从未将任何内容复制到地址 -8(%rdi),但突然我们想将其内容复制到 %rdx

我一整天都在阅读汇编,但我很难完全掌握它。如果我的评论有任何错误,请指出。

谢谢。

最佳答案

  1. test 用于零 (NULL) 检查。
  2. 参数寄存器可用作通用目的。因此,该函数仅需要 1 个参数。 rdx 仅用作局部变量。
  3. 从未将其设置为任何内容,但调用者可能已经设置了。

关于c - 任务: Rewrite X86-assembler program in C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48307459/

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