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)
.
我需要在 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)
.