gpt4 book ai didi

无法理解简单程序集 x86 中 %rax 的值

转载 作者:行者123 更新时间:2023-11-30 20:09:05 26 4
gpt4 key购买 nike

#include <stdio.h>
#include <stdlib.h>

typedef struct item {
int low; int high; char label[16];
} Item;

typedef struct item_coll {
size_t length; Item *items[];
} ItemColl;

extern char *find_first_in_range(ItemColl *ic, int rlow, int rhigh);

/*
char *find_first_in_range(ItemColl *ic, int rlow, int rhigh) {
for (size_t i = 0; i < ic->length; i++)
if (ic->items[i]->low >= rlow && ic->items[i]->high <= rhigh)
return &ic->items[i]->label[0];
return NULL;
}
* */

int main() {

struct item fruits[] = {
{10, 20, "Apple"},
{12, 14, "Pear"},
{ 8, 12, "Banana"},
{ 2, 4, "Grape"},
{15, 35, "Watermelon"}
};


struct item_coll *basket = malloc (sizeof *basket + 5 * sizeof *basket->items);
basket->length = 5;

for (size_t i = 0; i < 5; i++)
basket->items[i] = &fruits[i];

char *label = find_first_in_range (basket, 12, 15);
printf ("%s\n", label);

free (basket);

return 0;
}

我有这个 C 程序,目标是在汇编中创建 find_first_in_range 函数。现在我只是想访问 Apple 中的 10,但它在 %rax 中给了我一个奇怪的值。

这是我在汇编中所做的:

    .globl find_first_in_range

# *ic is passed in %rdi
# rlow is passed in %rsi
# rhigh is passed in %rdx

find_first_in_range:
mov %rdi, %rax

%rsi 包含 12%rdx 包含 15 这是我传入的左右限制find_first_in_range (basket, 12, 15);,但 %rax 不应该容纳 10 吗?来自 fruits[] 的第一个元素。

我的另一个问题是如何访问例如篮子的长度?这是5

最佳答案

ic 本身位于 %rdi 中:指向 ItemColl指针。因此,ic->length 作为该结构中的第一个元素,(在 mov 之后)只是 (%rax) (大概是 8 个字节长)。

关于无法理解简单程序集 x86 中 %rax 的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53972995/

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