如何在汇编程序(SPARC)中找到最小和最大的整数数组?

时间:2012-01-05 14:59:25

标签: assembly int min sparc

我必须编写一个汇编程序,它将找到最小的整数数组(从C作为指针输入程序)

谁能告诉我怎么做?或者至少如何在汇编程序中存储/访问数组?

通常,连续的缓冲器可以访问变量,例如:

subcc %i0, 2, %l0

但我不清楚如何使用数组做这件事。

2 个答案:

答案 0 :(得分:0)

重申,在C表达式中arr[i]实际上等同于*(arr + i)

要访问数组中的值,您需要计算它的地址 - 它是arr + i * sizeof(int)。然后,您可以使用ldst指令进行读取或写入。

答案 1 :(得分:0)

我设法这样做了:

.global findminmax      !
.proc 4             !
                !
findminmax:         !
    save %sp, -96, %sp  !
    ld [%i0], %l0       !
    mov %l0, %l2        !
    mov %l0, %l3        !
                !
loop:               !
    subcc %i1, 1, %l0   !
    bneg end        !
    nop             !
                !
    ld [%i0], %l1       !
                !
    subcc %l2, %l1, %l0     !
    bneg newmax         !
    nop             !
                !
    subcc %l1, %l3, %l0     !
    bneg newmin         !
    nop             !
                !
back:           ! 
    add %i0, 4, %i0     !
    sub %i1, 1, %i1     !
    ba loop         !
    nop             !
end:                !
    st %l2, [%i2]       !
    st %l3, [%i3]       !
    ret             !
    restore         !
                !
newmax:             !
    mov %l1, %l2        !
    ba back         !
    nop             !
newmin:             !
    mov %l1, %l3        !
    ba back         !
    nop             !