Другие языки программирования и технологии
Ассемблер. Определить наименьшее число из из чисел меньши 2Eh
Необходимо написать программу на ассемблере в среде MPLAB. Тоесть необходимо создать некий массив из 10 чисел, которые меньше 2Eh. Создать цикл который сравнивал бы все числа и определял самое меньшее. Вопрос - с чего отталкиваться? Как организовать цикл?
Для Алекса.
Функцию рандом для микроконтроллера предварительно потребуется реализовать самостоятельно.
Для получения при каждом запуске разных последовательностей псевдослучайных чисел, нужны или часы реального времени, или внешний генератор случайных чисел, или генератор шума, напряжение на выходе которого измерять в начале программы с помощью АЦП.
Полученное число использовать как начальное значение генератора ПСП - псевдослучайной последовательности. Как край - измерять наводки на какой то линии :-)
Для Александра.
В этой программе берется фиксированное число для начального значения генератора. Можешь эту затравку произвольно изменять от 0 до 255, будут генерироваться разные массивы.
Массив создается по адресам 0x20 - 0x29 в 0-ом банке GPR. Наименьший элемент записывается по адресу 0x32 в том же банке.
Было бы неплохо узнать тип микроконтроллера. Но для всех 8 разрядных среднего семейства должна эта программа подойти.
______include P17C756.INC
SEED equ 0x30; Переменная генератора ПСП
COUNT equ 0x31; Счетчик элементов
MIN equ 0x32; Наименьший элемент, результат работы
______org 0x0000
______goto START
______org 0x0020
START
; Настройка адресов для косвенной адресации
______movlw 0x20
______movwf FSR0
______movwf FSR1
; Включение автоинкремента при косвенной адресации
______bcf ALUSTA,FS1
______bsf ALUSTA,FS0
______bcf ALUSTA,FS3
______bsf ALUSTA,FS2
______movlw 0x05; Затравка для генератора ПСП
______movwf SEED
; Генератор массива из 10 элементов
______movlw 0x0A
______movwf COUNT
RAND
______movfp SEED,WREG
______mullw 0x59
______movfp PRODL,WREG
______addlw 0x2F
______movpf WREG,SEED
______mullw 0x2E
______movfp PRODH,WREG
______movwf INDF0
______decfsz COUNT,1
______goto RAND
; Поиск минимального элемента
______movlw 0x09
______movwf COUNT
______movfp INDF1,WREG
______movwf MIN
TEST
______movfp INDF1,WREG
______cpfslt MIN
______movwf MIN
______decfsz COUNT,1
______goto TEST
______end
ПС. Символы подчеркивания замени на пробелы, а то местный парсер их удаляет. А без пробелов MPLAB будет ругаться.
Функцию рандом для микроконтроллера предварительно потребуется реализовать самостоятельно.
Для получения при каждом запуске разных последовательностей псевдослучайных чисел, нужны или часы реального времени, или внешний генератор случайных чисел, или генератор шума, напряжение на выходе которого измерять в начале программы с помощью АЦП.
Полученное число использовать как начальное значение генератора ПСП - псевдослучайной последовательности. Как край - измерять наводки на какой то линии :-)
Для Александра.
В этой программе берется фиксированное число для начального значения генератора. Можешь эту затравку произвольно изменять от 0 до 255, будут генерироваться разные массивы.
Массив создается по адресам 0x20 - 0x29 в 0-ом банке GPR. Наименьший элемент записывается по адресу 0x32 в том же банке.
Было бы неплохо узнать тип микроконтроллера. Но для всех 8 разрядных среднего семейства должна эта программа подойти.
______include P17C756.INC
SEED equ 0x30; Переменная генератора ПСП
COUNT equ 0x31; Счетчик элементов
MIN equ 0x32; Наименьший элемент, результат работы
______org 0x0000
______goto START
______org 0x0020
START
; Настройка адресов для косвенной адресации
______movlw 0x20
______movwf FSR0
______movwf FSR1
; Включение автоинкремента при косвенной адресации
______bcf ALUSTA,FS1
______bsf ALUSTA,FS0
______bcf ALUSTA,FS3
______bsf ALUSTA,FS2
______movlw 0x05; Затравка для генератора ПСП
______movwf SEED
; Генератор массива из 10 элементов
______movlw 0x0A
______movwf COUNT
RAND
______movfp SEED,WREG
______mullw 0x59
______movfp PRODL,WREG
______addlw 0x2F
______movpf WREG,SEED
______mullw 0x2E
______movfp PRODH,WREG
______movwf INDF0
______decfsz COUNT,1
______goto RAND
; Поиск минимального элемента
______movlw 0x09
______movwf COUNT
______movfp INDF1,WREG
______movwf MIN
TEST
______movfp INDF1,WREG
______cpfslt MIN
______movwf MIN
______decfsz COUNT,1
______goto TEST
______end
ПС. Символы подчеркивания замени на пробелы, а то местный парсер их удаляет. А без пробелов MPLAB будет ругаться.
Эссэмблер не знаю, но можно создать массив с помощью функции рандом, где максимальное число будет 2Еh, потом создать цикл типа: переменная i=1 переменная min = первому числу массива (i), если второе число массива (i++) меньше min, то min = второму числу массива (i++).
Похожие вопросы
- Ассемблер. Определить найменьшее число из чисел, меньших 2Еh
- Как определить отрицательные числа?
- я должен написать прогу на ассемблере для перевода числа из восьмеричной системы в десятичную
- паскаль - Дано натуральное число п. Переставить его цифры так, чтобы образовалось наименьшее число
- Помогите пожалуйста!Паскаль. Дано натуральное число N. Получить наименьшее число вида 2(m в степени), превосходящее N.
- Пожалуйста помогите,C++ .Дана последовательность чисел.Найти в ней наименьшее число.
- Нужна программа на Си Которая из трех рандомных чисел, выбирает два наименьших числа
- Pascal => нужна идея, которая поможет мне определить : простое число или нет.
- скажите пожалуйста почему в делфи при попытке определить четность числа компилятор пишет что оператор неприменим
- Почему скомпилированный код на Ассемблер занимает меньше места чем на C, а на C меньше чем на C++?