汇编中的代码,用于访问链表的第二个值元素

时间:2014-03-08 03:23:05

标签: assembly x86

任何帮助都是适用的,我无法坚持多日:(。

我有一组链表。 例如:0,0,0,0,0 或1,1,1,1,1 或-10,-5,0,5,10

我可以访问链表的第一个元素! 第一个是堆栈,但第二个不在堆栈内存中。

这是我访问链表的第一个值元素的代码

__declspec(naked) int valueLink(struct Node *head) {
__asm{
           PUSH EBX

           MOV EBX, [ESP+8] //get the address of the first element of linked list on the stack

           MOV EAX, [EBX] // move the value to EAX

           POP EBX
           ret
         }
        }

我会得到正确的输出,如:

该列表包含-1,-1,-1,-1,-1,正和为0。 你的结果是-1。

该列表包含1,1,1,1,1,正数为5。 你的结果是1

该列表包含-10,-5,0,5,10,正数为15。 你的结果是-10

但现在我想访问链表的第二个值,我修改了代码 - >

__declspec(naked) int valueLink(struct Node *head) {
__asm{
          PUSH EBX

          MOV EBX, [ESP+8] //get the address of the first element of linked list on the stack

          MOV EAX, [EBX+4] // move the second value to EAX

          POP EBX
          ret
         }
       }

我会得到错误的价值!请帮忙?!?!

该列表包含-1,-1,-1,-1,-1,正和为0。 你的结果是4760640

该列表包含1,1,1,1,1,正数为5。 你的结果是4760920

该列表包含-10,-5,0,5,10,正数为15。 你的结果是4769096

1 个答案:

答案 0 :(得分:0)

我没有看到示例中定义的链接列表中的节点结构。假设名为node的结构定义为成员 next value ,那么节点的语法以及从ebx指向的节点添加值为:

node    struct
next    dd      ?
value   dd      ?
node    ends
;       ...
        add     eax,node.value[ebx]
;       ...