ВЖ
Василий Жирнов

Ассемблер. Определить найменьшее число из чисел, меньших 2Еh

Нужно написать программу для микроконтроллера PIC16F84 в среде MPLAB. Суть задачи: задается произвольно, в тексте программы, таблица из 10 чисел. Необходимо проверить, что эти числа меньше 2Еh и найти среди них найменьшее. Тоесть нужно организовать циклы. При этом необходимо использовать регистр косвенной адрессации FSR...

Вадим Варванин
Вадим Варванин

Таблица чисел задается по адресам 0x20 - 0x29.
Наименьшее число записывается по адресу 0x10. Если все числа больше или равны 0x2E, то по этому адресу будет записано 0xFF.

________include P16F84.INC

MIN equ 0x10; Наименьший элемент, результат работы
SEED equ 0x1B; Переменная генератора ПСП
COUNT equ 0x1C; Счетчик элементов
ARG2 equ 0x1D; Множитель
PROD equ 0x1E; Результат умножения
ITER equ 0x1F; Переменная-итератор, используется при умножении
ARRAY equ 0x20; Адрес начала массива
SIZE equ 0x0A; Десятичное 10, длина массива

________goto START

________org 0x0010
START
________clrf STATUS
________movlw ARRAY
________movwf FSR
________goto PRESET
MAIN
________movlw ARRAY
________movwf FSR
________movlw SIZE
________movwf COUNT
________movlw 0xFF
________movwf MIN
TEST
________movlw 0x2E
________subwf INDF, W
________btfsc STATUS, C
________goto NEXT
________movfw INDF
________subwf MIN, W
________btfss STATUS, C
________goto NEXT
________movfw INDF
________movwf MIN
NEXT
________incf FSR, F
________decfsz COUNT, F
________goto TEST

; Зацикливание микроконтроллера
LOOP
________goto LOOP

PRESET
________movlw 0x07; Затравка для генератора ПСП
________movwf SEED
________movlw SIZE
________movwf COUNT

; Заполнение массива
FILLING
________call RAND
________movwf INDF
________incf FSR, F
________decfsz COUNT, F
________goto FILLING
________goto MAIN

; Генератор псевдослучайных чисел от 0x00 до 0x3F
RAND
________clrf PROD
________movlw 0x08
________movwf ITER
________movlw 0x11
________movwf ARG2

; Умножение SEED на ARG2, результат в PROD
MUL
________rrf SEED, F
________btfss STATUS, C
________goto ARG2x2
________movfw ARG2
________addwf PROD, F
ARG2x2
________bcf STATUS, C
________rlf ARG2, F
________decfsz ITER, F
________goto MUL

________movfw PROD
________addlw 0x39
________movwf SEED
________andlw 0x3F
________return

________end

Как у настоящего ленивого программиста, в программе используется генератор ПСП.

1) программу для микроконтроллера PIC16F84 - для него.
2) в среде MPLAB - в ней, версия 7.50.
3) задается произвольно, в тексте программы, таблица из 10 чисел - 10 произвольных чисел, в программе.
4) Необходимо проверить, что эти числа меньше 2Еh - проверяется.
5) найти среди них наименьшее - ищется.
6) нужно организовать циклы - организованы.
7) необходимо использовать регистр косвенной адресации FSR - используется.

Вроде, все условия соблюдены 🙂

Кому не нравится генерация псевдослучайных чисел линейным конгруэнтным методом, может вручную создавать таблицу, записав вместо goto PRESET десять раз по три команды
movlw число
movwf INDF
incf FSR, F

Похожие вопросы
1. Определить два наименьших числа из 10 чисел.
Перевод символа числа в число ассемблер.
Найти три последовательных натуральных числа, если произведение двух меньших чисел меньше произведения двух больших чисел
Из логарифмов трех введенных с клавиатуры чисел, определите меньшее
Паскаль. Ввести два числа. Из большего числа вычесть 100 а меньшее удвоить. На печать выдать произведение полученных чисел.
Помогите по ассемблеру! Найти сколҗко чисел =12h
Ассемблер
Вывести число. Ассемблер. DOS Как вывести число (оно высчитывается) на экран?
На входе целые числа, количество введённых чисел неизвестно, последовательность чисел заканчивается числом нулём.
Поменять местами пары соседних чисел. Массив слов. (ассемблер)