Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
0 / 0 / 1
Регистрация: 16.10.2013
Сообщений: 93

Произвести циклический сдвиг вправо 8-байтового кода

17.09.2016, 14:19. Показов 2348. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток! Дали вот такое задание "Произвести циклический сдвиг вправо 8-байтового кода, находящегося по адресу 0000h. Сдвигать на число разрядов, находящееся по адресу 0010h (один байт без знака). Результат записать по адресу 0008h.". Пока не могу понять, как это сделать.
Под Intel 8051.
Буду благодарен за любую помощь. :3
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.09.2016, 14:19
Ответы с готовыми решениями:

Произвести циклический сдвиг вправо элементов массива
Люди в Си++ дуб дубом. Помагите очень надо. Вот текст задачи. Ввести одномерный целочисленный массив A, вывести его. Произвести...

Произвести циклический сдвиг вектора на K элементов вправо
Произвести циклический сдвиг на K элементов вправо заданного вектора размерности N.

Произвести циклический сдвиг столбцов квадратной матрицы A[N] на K позиций вправо
Входные данные: Одно натуральное число N. Далее с новой строки N строк по N целых чисел в каждой. не превышают десяти. Затем с новой...

14
 Аватар для Kukuxumushu
1624 / 806 / 146
Регистрация: 13.06.2015
Сообщений: 3,266
17.09.2016, 15:02
1. Копируем 0000h в аккумулятор
2. Мутим цикл сдвига аккумулятора с условием выхода DJNZ 0010h
3. Пишем аккумулятор в 0008h

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

P.S. Вообще, это как бы в раздел микроконтроллеров.
1
0 / 0 / 1
Регистрация: 16.10.2013
Сообщений: 93
17.09.2016, 18:14  [ТС]
Цитата Сообщение от Kukuxumushu Посмотреть сообщение
1. Копируем 0000h в аккумулятор
2. Мутим цикл сдвига аккумулятора с условием выхода DJNZ 0010h
3. Пишем аккумулятор в 0008h

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

P.S. Вообще, это как бы в раздел микроконтроллеров.
Ну так байт то не один, байтов то 8.
0
Эксперт Hardware
Эксперт Hardware
 Аватар для R71MT
6209 / 2443 / 403
Регистрация: 29.07.2014
Сообщений: 3,174
Записей в блоге: 4
17.09.2016, 18:27
Цитата Сообщение от V-Alterman Посмотреть сообщение
байтов то 8
..что это меняет?
Если по адресу (0:0010h) будет находиться значение(3), то наверное результ должен быть таким:
Code
1
2
0:0000    01 02 03 04 05 06 07 08
0:0008    06 07 08 01 02 03 04 05
0
 Аватар для Kukuxumushu
1624 / 806 / 146
Регистрация: 13.06.2015
Сообщений: 3,266
17.09.2016, 18:30
Цитата Сообщение от V-Alterman Посмотреть сообщение
байтов то 8
Ой, сори, прочёл как "8-битного".
Ну тут либо 8 инструкций сдвига через перенос, либо одну в цикле (но в этом случае легче первый реализовать).
В начале надо переслать самый последний бит в C, чтобы он в самом начале втолкнулся как надо.

Добавлено через 55 секунд
Цитата Сообщение от R71MT Посмотреть сообщение
..что это меняет?
Нет, ему надо весь "паровоз" из 8 байт сдвинуть.
1
0 / 0 / 1
Регистрация: 16.10.2013
Сообщений: 93
17.09.2016, 18:36  [ТС]
Цитата Сообщение от Kukuxumushu Посмотреть сообщение
Ой, сори, прочёл как "8-битного".
Ну тут либо 8 инструкций сдвига через перенос, либо одну в цикле (но в этом случае легче первый реализовать).
В начале надо переслать самый последний бит в C, чтобы он в самом начале втолкнулся как надо.

Добавлено через 55 секунд

Нет, ему надо весь "паровоз" из 8 байт сдвинуть.
Вариант с циклом мне нравится, только что сам до него дошел, попробую реализовать, спасибо. :3
0
Эксперт Hardware
Эксперт Hardware
 Аватар для R71MT
6209 / 2443 / 403
Регистрация: 29.07.2014
Сообщений: 3,174
Записей в блоге: 4
17.09.2016, 18:43
Цитата Сообщение от Kukuxumushu Посмотреть сообщение
весь "паровоз" из 8 байт сдвинуть
Так я вроде и сдвинул весь паравоз: по адресу(0) исходный массив, а по адресу(8) - сдвинутый вправо на 3
0
 Аватар для Kukuxumushu
1624 / 806 / 146
Регистрация: 13.06.2015
Сообщений: 3,266
17.09.2016, 18:51
Цитата Сообщение от R71MT Посмотреть сообщение
по адресу(0) исходный массив, а по адресу(8) - сдвинутый вправо на 3
Как же тогда по адресу 0008 получилось 06 вместо нуля?
Единица оттуда уже уехала, а единица из последнего байта ещё не доехала.

Добавлено через 2 минуты
Цитата Сообщение от V-Alterman Посмотреть сообщение
Вариант с циклом мне нравится
Погодите, а у вас как я понимаю память то внешняя что-ли? Смотрю адресация 16-битная, да и во внутреннем ОЗУ по этим адресам регистры находятся.
0
0 / 0 / 1
Регистрация: 16.10.2013
Сообщений: 93
17.09.2016, 18:57  [ТС]
Цитата Сообщение от Kukuxumushu Посмотреть сообщение
Как же тогда по адресу 0008 получилось 06 вместо нуля?
Единица оттуда уже уехала, а единица из последнего байта ещё не доехала.

Добавлено через 2 минуты

Погодите, а у вас как я понимаю память то внешняя что-ли? Смотрю адресация 16-битная, да и во внутреннем ОЗУ по этим адресам регистры находятся.
Да, память внешняя.
0
Эксперт Hardware
Эксперт Hardware
 Аватар для R71MT
6209 / 2443 / 403
Регистрация: 29.07.2014
Сообщений: 3,174
Записей в блоге: 4
17.09.2016, 18:58
Были-же уже такие задания..
В 8-байтном массиве нужно рассматривать каждый байт как бит, и сдвигать весь массив через ROR.
В результате получится такой паравозик, как я показал.
0
 Аватар для Kukuxumushu
1624 / 806 / 146
Регистрация: 13.06.2015
Сообщений: 3,266
17.09.2016, 19:09
Цитата Сообщение от R71MT Посмотреть сообщение
В 8-байтном массиве нужно рассматривать каждый байт как бит, и сдвигать весь массив через ROR.
Через перенос двигать надо, и не забывать про первый сдвиг, когда флаг переноса ещё неопределён и его руками выставить в нужное значение необходимо.
0
Эксперт Hardware
Эксперт Hardware
 Аватар для R71MT
6209 / 2443 / 403
Регистрация: 29.07.2014
Сообщений: 3,174
Записей в блоге: 4
17.09.2016, 19:16
Ну незнаю.. Советую уточнить задание у препода, чтоб не тратить энергию в холостую.
0
 Аватар для Kukuxumushu
1624 / 806 / 146
Регистрация: 13.06.2015
Сообщений: 3,266
17.09.2016, 19:22
Лучший ответ Сообщение было отмечено V-Alterman как решение

Решение

Цитата Сообщение от V-Alterman Посмотреть сообщение
Да, память внешняя.
тогда
Assembler
1
2
3
4
5
6
7
8
9
10
MOV R0,#15
MOVX A,@R0
RRC A
MOV R0,#8
M1:
MOVX A,@R0
RRC A
MOVX @R0,A
INC R0
CJNE R0,#16,M1
Как перед этим скопировать массив с адреса 0 на адрес 8 - думаю, сами догадаетесь. Только тут ещё внешний цикл надо вставить - сколько сдвигов то делать.
1
0 / 0 / 1
Регистрация: 16.10.2013
Сообщений: 93
17.09.2016, 19:27  [ТС]
Всем спасибо ещё раз. :3
0
 Аватар для Kukuxumushu
1624 / 806 / 146
Регистрация: 13.06.2015
Сообщений: 3,266
17.09.2016, 19:30
Лучший ответ Сообщение было отмечено V-Alterman как решение

Решение

С внешним циклом как-то так
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
MOV R0,#10h     ; сохраняем число сдвигов
MOVX A,@R0
MOV R1,A       ; в R1
MOV R0,#15     ; сохраняем выталкиваемый бит массива
MOVX A,@R0
RRC A          ; в С
M2:            ; внешний цикл сдвигов
MOV R0,#8      ; указатель в начало массива
M1:            ; цикл сдвига массива
MOVX A,@R0     ; читаем байт
RRC A          ; сдвигаем через С
MOVX @R0,A     ; пишем обратно
INC R0         ; инкремент указателя
CJNE R0,#16,M1 ; проверка на конец массива
DJNZ R1,M2     ; проверка на конец числа сдвигов
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.09.2016, 19:30
Помогаю со студенческими работами здесь

Произвести циклический сдвиг столбцов квадратной матрицы A[N] на K позиций вправо
Входные данные: Одно натуральное число N. Далее с новой строки N строк по N целых чисел в каждой. N не превышают десяти. Затем с новой...

Произвести циклический сдвиг элементов каждого столбца матрицы на один элемент вправо
2. Задан двумерный массив А, заполненный числами из интервала . Произвести циклический сдвиг элементов каждого столбца матрицы на один...

Дано целое число. Произвести циклический сдвиг этого числа вправо на четыре разряда
Здравствуйте! Условие задачи: "Дано целое число. Произвести циклический сдвиг этого числа вправо на четыре разряда." Я вот...

Произвести циклический сдвиг элементов массива вправо, при этом не затрагивая максимум и минимум
Ввести одномерный массив А вывести его. Произвести циклический сдвиг его элементов вправо при этом не затрагивая максимум и минимум.

Произвести циклический сдвиг элементов расположенных вне границ между максимумом и минимумом вправо
Помогите пожалуйста с задачей: Ввести одномерный массив A, вывести его. Произвести циклический сдвиг элементов расположенных вне...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru