Я не уверен, но я думаю, что вы хотите переместить переменную SIZE сразу после переменной LIST:
data segment
LIST DB 05H, 31H, 34H, 30H, 38H, 37H
SIZE=$-OFFSET LIST
MINIMUM DB ?
MAXIMUM DB ?
AVARAGE DB ?
ends
То, что он делает, это дает вам количество байтов между текущим адресом ($) и началом переменной LIST - таким образом, давая вам размер (в байтах) самой переменной списка. Поскольку LIST является массивом байтов, SIZE будет фактической длиной массива. Если бы LIST был массивом слов, вам пришлось бы разделить размер на два. Если ваш учитель написал этот код, то, возможно, вам следует оставить его в покое.
Мне не совсем ясно, почему ваш учитель сделал сегмент стека, я не могу придумать причину его использования, но, возможно, это станет ясно в будущем задании. На данный момент вы, вероятно, должны знать, что DUP - это сокращение от дубликатов. Эта строка кода:
DW 128 DUP(0)
Распределяет 128 СЛОВ памяти, инициализированной на 0.
следующие строки кода:
MOV AX,DATA
MOV DS,AX
MOV ES,AX
Настраиваете ваши указатели, чтобы вы могли просматривать список. Все, что вам нужно знать, это то, что в этот момент AX указывает на начало сегмента данных и, следовательно, на начало вашего LIST.
Что касается остальных ... похоже, у вас бесконечный цикл. Что вам нужно сделать, это:
- Установить SI для указания на начало списка
- Установите CX равным длине списка, вы сделали это
- Скопировать первый байт из [SI] в AX
- Сравнить AX с переменной памяти MINIMUM
- Если AX меньше, скопируйте его в MINIMUM
- Инкремент IS и декримент CX
- Если CX = 0 (отметьте флаг ZERO), выйдите из цикла, в противном случае вернитесь к # 3