C 汇编语言前缀和问题
因此,我的任务是编写汇编代码,对一组数字执行前缀和 给出的例子是246-1,返回值需要是12106-1用作塞子C 汇编语言前缀和问题,c,assembly,prefix-sum,C,Assembly,Prefix Sum,因此,我的任务是编写汇编代码,对一组数字执行前缀和 给出的例子是246-1,返回值需要是12106-1用作塞子 jmp main prefix: addl %edx, %eax ret print: irmovl $32, %ecx wrint %eax wrch %ecx ret
jmp main
prefix: addl %edx, %eax
ret
print: irmovl $32, %ecx
wrint %eax
wrch %ecx
ret
read: pushl %ebp # ON_ENTRY saving old frame ptr
rrmovl %esp, %ebp # ON_ENTRY set new frame ptr
mrmovl 8(%ebp), %edx # Retrieving parameter
irmovl $1, %ecx # writing ecx with 1
addl %ecx, %esi
addl %edx, %ecx # adding edx and ecx
je baseCase # checking if they equal 0
recStep: rdint %ebx # reading parameter from user
pushl %ebx
call read
popl %ebx
mrmovl 8(%ebp), %edx
pushl %edx
call prefix
popl %edx
call print
jmp end
baseCase: irmovl $0, %eax
end: rrmovl %ebp, %esp # ON_EXIT reset stack ptr
popl %ebp # ON_EXIT restore old base/frame ptr
ret # ON_EXIT
main: irmovl $0x1000, %esp # init stack ptr
irmovl $-1, %esi
rdint %ebx # reading parameter from user
pushl %ebx # pushing parameter
call read # function call
popl %ebx # removing parameter
call prtnl
halt
prtnl: irmovl $10, %edx # assuming edx is caller save
wrch %edx
ret
所以基本上我的代码打印61012,我需要找到一种方法来反转这个输出。有什么想法吗
所以基本上我的代码打印61012,我需要找到一种方法来反转这个输出。有什么想法吗
是的,不要使用递归-没有理由过度滥用堆栈
取而代之的是,在获得每个输入时将其保存到堆栈中。然后将其视为一个数组-迭代每个项并计算其前缀和。我要做的是使用一个寄存器来指示堆栈上第一个项的起始位置,并使用esp和该寄存器之间的差值来获取数组长度。我还将使用另一个寄存器在接收输入时累加总和
每个元素的前缀和可以通过从当前数组[i]中减去累加器并将结果存储回下一个元素的累加器来计算。谢谢您的回答!实际上我不得不放弃这个设计,重新开始。该项目需要递归,尽管它效率极低。你是对的,如果我摆脱了递归,把每一件事都像数组一样保存起来,那么这个方法就行了!