Сортировка выбором с LMC

Вопрос или проблема

Я работаю над проектом, в котором пытаюсь реализовать сортировку выбором в LMC. Вместо использования фиксированной памяти я хочу попробовать использовать самокорректирующийся код. Здесь я попытался зафиксировать размер массива на 6, чтобы после 6 вводов он начинал сортировать. С первой частью я смог заполнить таблицу. Однако, когда дело дошло до сортировки и обмена, у меня возникли трудности с изменением значения моей таблицы в памяти

load    INP
        ADD un
depart  BRZ setup
        SUB un
store   STA tab
        LDA store
        ADD un
        STA store
        LDA count
        ADD un
        STA count
        SUB six
        BRZ setup
        BRA load

setup   LDA store
        SUB count
        SUB instr
        STA tab_base
        LDA six
        STA cmp
        LDA zero
        STA index
        BRA outer

outer   LDA cmp
        SUB un
        STA cmp
        BRZ fin
        LDA index
        ADD un
        STA index
        LDA zero
        STA j
        BRA inner

inner   LDA j
        ADD tab_base
        STA dyn_addr
        LDA dyn_addr
        STA dyn

        LDA j
        ADD un
        ADD tab_base
        STA dyn2_addr
        LDA dyn2_addr
        STA dyn2

        LDA dyn2
        SUB dyn
        BRP noswap

        LDA dyn
        STA temp
        LDA dyn2
        STA dyn_addr
        LDA temp
        STA dyn2_addr

noswap  LDA j
        ADD un
        STA j
        LDA j
        SUB cmp
        BRZ outer
        BRA inner

fin     HLT

dyn_addr      DAT 0
dyn2_addr     DAT 0
un            DAT 1
six           DAT 6
count         DAT 0
zero          DAT 0
cmp           DAT 6
instr          DAT 300
tab_base      DAT 0
index         DAT 0
j             DAT 0
dyn           DAT 0
dyn2          DAT 0
temp          DAT 0
tab           DAT 0
  • Я новичок в LMC, поэтому любая помощь будет оценена 😀

Ответ или решение

Выбор сортировки (Selection Sort) представляет собой один из простейших алгоритмов сортировки, который, тем не менее, может быть полезен для образовательных целей, в частности при использовании в многократных учебных проектах; например, с использованием LMC (Little Man Computer). В этом ответе я предложу подробное руководство по реализации метода выбора в LMC с учетом вашего запроса на использование самореферентного кода и обработки массива из 6 элементов.

Описание алгоритма выборной сортировки

Алгоритм сортировки выбором функционирует следующим образом:

  1. Находит минимальный элемент в массиве.
  2. Обменивает его местами с первым элементом массива.
  3. Затем повторяет процесс для оставшейся части массива.

Однако, при реализации в LMC вместо абстрактных массивов, важно правильно управлять адресами в памяти, что может стать проблемой для начинающего программиста.

Основные этапы реализации в LMC

  1. Ввод данных: Для начала мы будем считывать 6 элементов в массив.
  2. Сортировка: Реализовать алгоритм сортировки.
  3. Обмен значениями: Важный момент заключается в корректной корректировке элементов массива.

Ваш код и как его доработать

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

Добавим несколько шагов, чтобы правильно заменить значения.

Пример доработанного кода

START   LDA INP
        ADD UN
DEPART  BRZ SETUP
        SUB UN
STORE   STA TAB
        LDA STORE
        ADD UN
        STA STORE
        LDA COUNT
        ADD UN
        STA COUNT
        SUB SIX
        BRZ SETUP
        BRA START

SETUP   LDA STORE
        SUB COUNT
        SUB INST
        STA TAB_BASE
        LDA SIX
        STA CMP
        LDA ZERO
        STA INDEX
        BRA OUTER

OUTER   LDA CMP
        SUB UN
        STA CMP
        BRZ FINISH
        LDA INDEX
        ADD UN
        STA INDEX
        LDA ZERO
        STA J
        BRA INNER

INNER   LDA J
        ADD TAB_BASE
        STA DYN_ADDR
        LDA DYN_ADDR
        STA DYN

        LDA J
        ADD UN
        ADD TAB_BASE
        STA DYN2_ADDR
        LDA DYN2_ADDR
        STA DYN2

        LDA DYN2
        SUB DYN
        BRP NOSWAP

        ; Обмен значениями
        LDA DYN
        STA TEMP
        LDA DYN2
        STA DYN_ADDR  ; Запись меньше в первое место
        LDA TEMP
        STA DYN2_ADDR ; Запись больше во второе место

NOSWAP LDA J
        ADD UN
        STA J
        LDA J
        SUB CMP
        BRZ OUTER
        BRA INNER

FINISH HLT

; Переменные
DYN_ADDR      DAT 0
DYN2_ADDR     DAT 0
UN            DAT 1
SIX           DAT 6
COUNT         DAT 0
ZERO          DAT 0
CMP           DAT 6
INST          DAT 300
TAB_BASE      DAT 0
INDEX         DAT 0
J             DAT 0
DYN           DAT 0
DYN2          DAT 0
TEMP          DAT 0
TAB           DAT 0

Объяснение изменения

  1. Обмен значениями: Исправил часть кода, отвечающую за обмен значениями. Используйте STA для сохранения обновленных значений в соответствующих ячейках памяти.
  2. Организация кода: Обратите внимание на некоторые структуры, такие как LDA, STA, которые отвечают за загрузку и запись значений.

Заключение

Таким образом, адаптация алгоритма выборной сортировки в LMC требует должного внимания к управлению адресами в памяти и правильной обработке обмена значениями. Убедитесь, что вы тестируете каждую часть своего кода, чтобы убедиться, что вводимые данные сортируются правильно. Если возникнут дополнительные вопросы или вам требуется помощь в других аспектах программирования LMC, не стесняйтесь обращаться!

Оцените материал
Добавить комментарий

Капча загружается...