Как найти минимум и максимум массива целых в ассемблере (SPARC)? - PullRequest
0 голосов
/ 05 января 2012

Мне нужно написать программу на ассемблере, которая найдет минимум массива целых чисел (подается в программу из C как указатель)

Может кто-нибудь сказать мне, как это сделать? или хотя бы как сохранить / получить доступ к массиву в ассемблере?

Обычно доступ к переменным осуществляется последовательными буферами, например :

subcc %i0, 2, %l0

но я понятия не имею, как это сделать с массивами.

Ответы [ 2 ]

0 голосов
/ 06 января 2012

Мне удалось сделать это как-то так:

.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             !
0 голосов
/ 05 января 2012

Помните, что в выражении C arr[i] фактически эквивалентно *(arr + i).

Чтобы получить доступ к значению в массиве, вам нужно вычислить его адрес - это arr + i * sizeof(int).Затем вы можете использовать ld, st инструкции для чтения или записи.

...