计算链接列表(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函数(struct node *start)。

对于数组示例,您可以将固定的跳跃放在循环前,并在循环结束时有条件跳跃:

        .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
;       ...    

对于链接列表,这里足以显示语法:

        .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]
;       ...

最新更新