; q1.asm                ; procura valor máximo numa tabela de inteiros de 16 bits com sinal
                             ; delimitada por 8000h (menor valor negativo de 16 bits)
		; Nov 2003
    Org 100h
    mov bx, tab         ; endere‡o da tabela
    call busca_max
    mov ah, 4ch
    int  21h

busca_max:       ; busca valor maximo em tabela delimitada por valor 8000h
                        ; entrada: bx endere‡o inicial do vetor
                        ; saidas: ax entrada de valor m ximo,
                        ;         cx ¡ndice da entrada de valor m ximo
                        ;         se tabela vazia retorna 8000h em ax
                        ; destroi: bx, dx
;_____________________________________________________________________

    mov ax,8000h        ; valor canditato, caso tabela vazia
    mov dx,0               ; indice candidato
l1:
    cmp word [bx], 8000h ; se fim da tabela,
    jz done                     ; terminamos
    cmp ax, [bx]              ; compara valor candidato com entrada corrente
    jge l2                        ; se candidato >= corrente pega pr¢xima entrada
    mov ax,[bx]               ; senao entrada atual ‚ a maior
    mov cx,dx                 ; e salvo indice em dx
l2:
    add bx,2                   ; ajusta ponteiro para pr¢xima entrada
    inc dx                       ; ajusta indice
    jmp l1                        ; e volta a comparar
done:
    ret
;______________________________________________________________________
tab: dw -3, -2, -1, 1000h, 100h,200h,8000h
