Assembly LC3代码,存储在堆栈中
下面是一段代码,用于将一个数字(或多个数字)存储到堆栈中。R6是堆栈指针。除此之外,我不太明白发生了什么。为什么要将R6存储在R1中,然后清除它?(我相信R1,R1,0清除R1) 对于LC3来说是新的,所以只是想澄清一下。 提前谢谢你Assembly LC3代码,存储在堆栈中,assembly,stack,lc3,Assembly,Stack,Lc3,下面是一段代码,用于将一个数字(或多个数字)存储到堆栈中。R6是堆栈指针。除此之外,我不太明白发生了什么。为什么要将R6存储在R1中,然后清除它?(我相信R1,R1,0清除R1) 对于LC3来说是新的,所以只是想澄清一下。 提前谢谢你 ; storing in the stack STR R1, R6, 0 ;store num in first space AND R1, R1, 0 STR R3, R6, 1 ; store operator in 2nd p
; storing in the stack
STR R1, R6, 0 ;store num in first space
AND R1, R1, 0
STR R3, R6, 1 ; store operator in 2nd place
ADD R6, R6, 3 ; increment the stack
STR R6, R6, -1 ; and provide a link to it in slot 3
JSR INPUT ; back to input
我不能说我完全理解,到底发生了什么,但我只想写下一些不同的评论:
STR R1, R6, 0 ; MEM[R6] <- R1
AND R1, R1, 0 ; R1 <- 0
STR R3, R6, 1 ; MEM[R6+1] <- R3
ADD R6, R6, 3 ; R6 <- R6 + 3
STR R6, R6, -1 ; MEM[R6-1] <- R6
实际上,这段代码正在创建一个单链表,每个节点中存储两个值。这有点奇怪,因为它的构造方式明确地依赖于内存的顺序性质,因此可以很好地处理数组,而不需要链表
要记住的一件事是,使堆栈成为堆栈的是它运行的操作(即推送和弹出)以及结构本身。这里可能有一个更简单的堆栈示例
LEA R1, STACK ; R1 is the next empty location
PUSH: ; Takes new value in R0
ADD R1, R1, 1 ; Increment pointer
STR R0, R1, 1 ; MEM[R1+1]<-R0
RET
PULL: ; Returns new value in R0
LDR R0, R1, -1 ; R0<-MEM[R1-1]
ADD R1, R1, -1 ; Decrement pointer
RET
lear1,栈;R1是下一个空位置
推送:;在R0中获取新值
加上R1,R1,1;增量指针
strr0,R1,1;MEM[R1+1]
LEA R1, STACK ; R1 is the next empty location
PUSH: ; Takes new value in R0
ADD R1, R1, 1 ; Increment pointer
STR R0, R1, 1 ; MEM[R1+1]<-R0
RET
PULL: ; Returns new value in R0
LDR R0, R1, -1 ; R0<-MEM[R1-1]
ADD R1, R1, -1 ; Decrement pointer
RET