Assembly 计算链表中的值之和(masm)*跟进
所以我对汇编语言很陌生,我希望能得到一些帮助。我编写了一个函数,它将整数数组中的所有值相加,并生成总和。现在我想修改函数,使其使用链表,从而返回链表中所有值的总和。我还是个初学者,所以我还在学习MASM,但这是我为查找数组中所有值之和的函数编写的:Assembly 计算链表中的值之和(masm)*跟进,assembly,masm,Assembly,Masm,所以我对汇编语言很陌生,我希望能得到一些帮助。我编写了一个函数,它将整数数组中的所有值相加,并生成总和。现在我想修改函数,使其使用链表,从而返回链表中所有值的总和。我还是个初学者,所以我还在学习MASM,但这是我为查找数组中所有值之和的函数编写的: PUSH EBX PUSH ECX PUSH EDX PUSH ESI PUSH EDI MOV EBX, Arr MOV ECX, len
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) 对于数组示例,可以将固定跳转放在循环之前,将条件跳转放在循环末尾:
.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]
; ...
这是一个怎样的后续行动呢?人们问上一篇文章中链接列表是如何呈现的。我应该写“*修订”而不是后续。可能是重复的否,你应该编辑原始问题。