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