Помогите пожалуйста исправить ошибки в программе на masm 4.0 (16 бит):
Разработать программу которая вводит массив из 5 элементов типа байт и число C.
Требуется, используя подпрограмму, найти максимальный элемент в массиве если каждый из заданных элементов меньше C. Параметры (указатель на массив, длина массива и число С), в подпрограмму, передаются через стек, а результат возвращается через регистр АХ или регистры AX,DX. Восстановить стек в стиле языка Паскаль. В стиле языка Паскаль стек восстанавливается командой ret с указанием числа байт, на которые надо скорректировать указатель стека.
Не передаются параметры через стек. Выводит из ax одно и то же число.
include io.asm ;подключение операций ввода-вывода
stack segment stack
        dw 128 dup (?)
stack ends
data segment
; место для переменных и констант
x db 5,13,4,14,12
c equ 7
l equ 5
data ends
code segment 'code'
        assume ss:stack, ds:data, cs:code
; место для описания процедур
foo proc 
push bp
mov bp, sp
mov bx, [bp+4]
mov al,[bp]
lp:     cmp [bp],al     ;если текущее значение не больше максимального
        jle m1          ;то пропустить
        mov al,[bp]     ;если больше, запомнить новый максимум
m1:     inc bp          ;следующий элемент массива
        loop lp         ;обработать весь массив
        cmp al,c        ;сравнить макс и с
        jge m2          ;если макс не меньше с, то пропустить
        mov al,c        ;если с больше, сделать с максимумом
m2:     pop bp
        ret 4
foo endp
start:
        mov ax,data
        mov ds,ax
mov ax, offset x 
push ax
mov ax,l; помещаем длину массива 
push ax; в стек
mov ax,c
push ax
call foo 
outint ax
newline
    finish
code ends
    end start