assembly 拜托,谁能解释一下这个汇编代码是做什么的?

cu6pst1q  于 2022-11-24  发布在  其他
关注(0)|答案(1)|浏览(149)
codeA:
.data
N: .word 10
V: .word 90,50,40,20,30,10,80,70,60,100
.text
main:
li t2, 0 //t2 <-0
la t3, N //t3 <- @N
lw t3, 0(t3) //t3<- N
la t4, V //t4 <- V
addi a7, x0, 1 //a7 <- i <- 1
p1:
beq t2, t3, end
lw a0, 0(t4) // a0 <- V[?]
ecall
addi t2, t2, 1
addi t4, t4, 4
j p1
end:

我是这方面的新手,我正在努力理解这段代码是做什么的。
我试着把它“翻译”成C语言或某种伪代码,使它更容易理解。

xu3bshqb

xu3bshqb1#

这是在做:

int N = 10;
int V [] = { 90, ... };

void main () {

    for ( int i = 0; i < N; i++ ) {
        printf ( "%d", V[i] );
    }

 }

因此,打印数组中从0到〈N的所有元素。
但是,它使用的是指针而不是数组索引。因此,在C中,它看起来更像这样:

int *p = &V;
 for ( int i = 0; i < N; i++ ) {
     printf ( "%d", *p );
     p++;  // adds 4 to p so it refers to the next int in the array
 }

现在,它不是使用printf ( "%d" ... );,而是使用MARS/RARS syscall/ecall #1将整数作为文本打印到屏幕上--但对于C编程来说,printf是sys/ecall的最佳Map。

相关问题