所以我对汇编语言很新,我希望能得到一些帮助。我编写了一个函数,可以将整数数组中的所有值加起来并产生总和。现在,我想更改该函数,以便它使用链接列表,以便返回链接列表中所有值的总和。我仍然是初学者,所以我仍在学习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]
; ...