Другие языки программирования и технологии

Ассемблер. Определить найменьшее число из чисел, меньших 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
Олег Гомольский
Олег Гомольский
2 543
Лучший ответ