Вопрос или проблема
Я работаю над проектом, в котором пытаюсь реализовать сортировку выбором в 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 элементов.
Описание алгоритма выборной сортировки
Алгоритм сортировки выбором функционирует следующим образом:
- Находит минимальный элемент в массиве.
- Обменивает его местами с первым элементом массива.
- Затем повторяет процесс для оставшейся части массива.
Однако, при реализации в LMC вместо абстрактных массивов, важно правильно управлять адресами в памяти, что может стать проблемой для начинающего программиста.
Основные этапы реализации в LMC
- Ввод данных: Для начала мы будем считывать 6 элементов в массив.
- Сортировка: Реализовать алгоритм сортировки.
- Обмен значениями: Важный момент заключается в корректной корректировке элементов массива.
Ваш код и как его доработать
Ваш код уже довольно хорошо структурирован, однако я помогу вам с реализацией сортировки и обмена значениями. Мы будем работать с адресами в памяти, чтобы исполнение вашего алгоритма проходило корректно.
Добавим несколько шагов, чтобы правильно заменить значения.
Пример доработанного кода
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
Объяснение изменения
- Обмен значениями: Исправил часть кода, отвечающую за обмен значениями. Используйте
STA
для сохранения обновленных значений в соответствующих ячейках памяти. - Организация кода: Обратите внимание на некоторые структуры, такие как
LDA
,STA
, которые отвечают за загрузку и запись значений.
Заключение
Таким образом, адаптация алгоритма выборной сортировки в LMC требует должного внимания к управлению адресами в памяти и правильной обработке обмена значениями. Убедитесь, что вы тестируете каждую часть своего кода, чтобы убедиться, что вводимые данные сортируются правильно. Если возникнут дополнительные вопросы или вам требуется помощь в других аспектах программирования LMC, не стесняйтесь обращаться!