计算链表(masm)中值的总和*跟进

时间:2014-03-08 01:33:52

标签: assembly masm

所以我对汇编语言很陌生,我希望能得到一些帮助。我编写了一个函数,它将整数数组中的所有值相加并生成总和。现在我想要更改函数,以便它使用链接列表,以便返回链接列表中所有值的总和。我还是初学者,所以我还在学习MASM,但这是我为函数编写的,它找到了数组中所有值的总和:

 PUSH EBX
        PUSH ECX
        PUSH EDX
        PUSH ESI
        PUSH EDI

        MOV EBX, Arr
        MOV ECX, len




        mov eax, 0; sum
        mov ecx, 0; i
        mov ESI, len

FOR_EXPR:
        cmp ecx, esi
        jge END_FOR

        mov edx, dword ptr[ebx+ecx*4]
        add eax, edx

        inc ecx
        jmp FOR_EXPR
END_FOR:


        POP EDI
        POP ESI
        POP EDX
        POP ECX
        POP EBX

新函数将作为参数传递链表的头部:int function(struct Node * start)。

2 个答案:

答案 0 :(得分:0)

对于数组示例,您可以在循环之前放置固定跳转,在循环结束时放置条件跳转:

        .model  FLAT
        .data
array   dd      1,2,3,4
len     dd      4

        .code
_main   proc    near
;       ...    
        push    ebx
        push    ecx
        push    edx
        push    esi
        push    edi
        lea     ebx, array
        mov     esi, len
        mov     eax, 0  ; sum
        mov     ecx, 0  ; i
        jmp     for1
for0:   mov     edx, [ebx+ecx*4]
        add     eax, edx
        inc     ecx
for1:   cmp     ecx, esi
        jl      for0
        pop     edi
        pop     esi
        pop     edx
        pop     ecx
        pop     ebx
;       ...    

答案 1 :(得分:0)

对于链表,这里有足够的示例来显示语法:

        .model FLAT
node    struct
next    dd      ?
value   dd      ?
node    ends

        .data
list0   node    {offset list1,1}
list1   node    {offset list2,2}
list2   node    {offset list3,3}
list3   node    {0           ,4}

        .code
_main   proc    near
;       ...
        push    ebx
        push    ecx
        push    edx
        push    esi
        push    edi
        lea     ebx, list0
;       ...
        add     eax,node.value[ebx]
;       ...