C转NIOS II程序

C to NIOS II program

我需要在 NIOS II 汇编代码中编写以下 C 代码。并从 L1 标签知道堆栈状态。

struct lelt 
{
   int value; 
   struct lelt* next;
}

struct lelt x = {3,NULL};

lelt* get_tail(lelt *ptr)
{
   lelt* last; 
   L1: last = NULL; 
   while(ptr != NULL)
   {
      last = ptr; 
      ptr = ptr -> next; 
   }
   return last; 
}

这是我到目前为止所写的内容,但我不知道如何管理和编写其余代码,因为我对汇编代码中的结构不是很熟悉。因此,如果有人可以帮助我并稍微解释一下,我将不胜感激。

x: 
 value .word 3
 next .word 0
get_tail: 
 subi sp, sp,12
 stw ra, 0(sp) 
 stw r16, 4(sp) // ptr
 stw r17, 8(sp) // last
 movia r16,zero,r4
 bne r4,zero,endwhile
 add r17,zero,r16
 ... // i don't know how to write ptr=ptr->next 
endwhile: 
 add r2,r17,zero
 br end
end: 
 ldw ra,0(sp)
 ldw r16,4(sp)
 ldw r17,8(sp) 
 addi sp,sp,12
 ret 

所以我猜 r16 是你的 ptr。结构中的 next 成员位于偏移量 4 处。要将其加载到 ptr,只需执行 ldw r16, 4(r16).