gpt4 book ai didi

c - 需要帮助在给定 64 位汇编指令的情况下在 C 中构建 Long loop(long x, int n) 函数

转载 作者:太空宇宙 更新时间:2023-11-04 02:33:44 26 4
gpt4 key购买 nike

我有以下来自 C 函数的汇编代码 long loop(long x, int n)在 64 位机器上,x 在 %rdi 中,n 在 %esi 中。我已经写下了我认为汇编指令正在做什么的评论。

loop:

movl %esi, %ecx // store the value of n in register ecx
movl $1, %edx // store the value of 1 in register edx (rdx).initial mask
movl $0, %eax //store the value of 0 in register eax (rax). this is initial return value
jmp .L2

.L3

movq %rdi, %r8 //store the value of x in register r8
andq %rdx, %r8 //store the value of (x & mask) in r8
orq %r8, %rax //update the return value rax by (x & mask | [rax] )
salq %cl, %rdx //update the mask rdx by ( [rdx] << n)

.L2

testq %rdx, %rdx //test mask&mask
jne .L3 // if (mask&mask) != 0, jump to L3
rep; ret

我有下面的C函数需要对应汇编代码:

    long loop(long x, int n){
long result = _____ ;
long mask;
// for (mask = ______; mask ________; mask = ______){ // filled in as:
for (mask = 1; mask != 0; mask <<n) {
result |= ________;
}
return result;
}

我需要一些帮助来填空,我不是 100% 确定组装说明是什么,但我通过对每一行进行评论来尽力而为。

最佳答案

您在评论中已经差不多明白了。

long loop(long x, long n) {
long result = 0;
long mask;
for (mask = 1; mask != 0; mask <<= n) {
result |= (x & mask);
}
return result;
}

因为result是返回值,而返回值保存在%rax中,movl $0, %eax加载0到result 最初。

在 for 循环内,%r8 保存与 result 或的值,就像您在评论中提到的那样,它只是 x & 掩码

关于c - 需要帮助在给定 64 位汇编指令的情况下在 C 中构建 Long loop(long x, int n) 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40161234/

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