链表x86汇编的Sum元素

时间:2014-03-08 05:40:33

标签: assembly linked-list x86

我知道这个问题今晚已被多次询问,但似乎没有一个问题得到解决。显然这是一个家庭作业问题,但在课堂上并没有彻底解释,因此关于这个主题的问题很多。目标是实现一个函数,该函数将链表的正元素相加,并返回结果。

我能从堆栈中获取头指针并将其放入EBX,问题是我不知道如何移动到链表的下一个节点,而且我也不知道如何检查是否已到达链表的末尾。如果有人能引导我走向正确的方向,那将非常感激!我当前的代码,包括评论,在下面。

__declspec(naked) int positiveSum(struct Node *head) {
    __asm{

    PUSH EBX
    MOV EAX, 0

    MOV EBX, [ESP+8] // put pointer from stack into ebx
    ADD EAX, [EBX] // add value in first node to eax

    POP EBX

    ret
    }
}


struct Node{
int e;
struct Node *next;
};


struct Node * createList(int * Arr, int len) {
if (len == 0) {
    return NULL;
}

struct Node *head = (struct Node*)malloc(sizeof(struct Node));
head->e = Arr[0];

struct Node *tail = head;

for (int i = 1; i < len; i++) {
    struct Node *next = (struct Node*)malloc(sizeof(struct Node));
    tail->next = next;
    tail = next;
    tail->e = Arr[i];
}
tail->next = NULL;

return head;
}

0 个答案:

没有答案