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

В ячейки внутренней памяти данных 128h, 129h, 12ah занести число сотен, десятков, единиц числа 080h

08.11.2015, 17:26. Показов 2718. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день. Есть такое задание:
В ячейки внутренней памяти данных 128h, 129h, 12ah занести число сотен, десятков, единиц числа 080h.
Надо сделать на ассемблере под atmega128.
У меня получился такой код (я записывал в ячейки 80h 81h 82h, т.к. в ячейки по заданию, я не смог записать):
листинг
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
.def    drem8u=r15  ;остаток
.def    dres8u=r16  ;результат
.def    dd8u=r16  ;делимое
.def    dv8u=r17  ;делитель
.def    dcnt8u=r18  ;счетчик цикла
.def    dcnt8u2=r19  ;счетчик цикла
 
        ldi dd8u, 0x080
        ldi dv8u, 0x64
        ldi dcnt8u2,2
        ldi r26, 0x80
;*****div8u_c   
d8u_0:
        sub drem8u,drem8u   ;очистить остаток и перенос
        ldi dcnt8u,9    ;инициализировать счетчик цикла
        
d8u_1:  
        rol dd8u    ;делимое/результат сдвинуть влево
        dec dcnt8u  ;уменьшить на единицу счетчик цикла
        brne    d8u_2  ;переход, если не ноль
        
        
        st   X+, dres8u 
 
 
        dec dcnt8u2  ;уменьшить на единицу счетчик цикла
        breq    tp  ;переход, если не ноль
        
        ldi dd8u, 0x01C
        ldi dv8u, 0x0A
        rjmp d8u_0  ;выход из подпрограммы
tp:
        st X,drem8u
        ret
d8u_2: 
        rol drem8u  ;остаток сдвинуть влево
        sub drem8u,dv8u ;остаток= остаток - делитель
        brcc    d8u_3  ;если результат < 0
        add drem8u,dv8u ;восстановить остаток
        clc    ;сбросить перенос для  формирования результата
        rjmp    d8u_1  ;иначе
 
 
 
d8u_3: 
        sec  ;установить перенос для формирования результата
        rjmp    d8u_1  ;вернуться назад


Алгоритм его такой, сначала 80h делю на 64h
(128 на 100)
В R16 у меня получается 1, а в R15 1С
Далее я сохраняю R16 по адресу 80h

В следующем цикле 1С делю на 0А
в R16 получается 2, а в R15 8
вроде всё верно
После строчки
Assembler
1
st   X+, dres8u
, по адресу 81h должно записаться 2, но этого не происходит.
Далее переход на метку tp и вот тут после команды
Assembler
1
st X,drem8u
происходит запись 8 по адресу 82h (как и должно быть) и 2 по адресу 83h (а вот она должна быть по адресу 81h и записываться раньше туда)
никак не могу понять почему такое происходит.
Помогите пожалуйста.

Может кто подскажет лучший алгоритм выделения сотен,десятков, единиц?
Миниатюры
В ячейки внутренней памяти данных 128h, 129h, 12ah занести число сотен, десятков, единиц числа 080h  
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
08.11.2015, 17:26
Ответы с готовыми решениями:

Из четырехзначного числа получить: первое число - сумма тысяч и сотен, второе - десятков и единиц
Кто понимает Haskell решите задачу пожалуйста Из четырехзначного числа получить число суммированием цифр, первое число - сумма тысяч и...

В числе 4982 найти число тысяч, сотен, десятков и единиц
В числе 4982 найти число тысяч, сотен, десятков и единиц. Найти сумму и произведение цифр данного числа. Тема не может называться...

В числе 5672 найти число тысяч, сотен, десятков и единиц
1) В числе 5672 найти число тысяч, сотен, десятков и единиц. Найти сумму и произведение цифр данного числа. 2) Дано пятизначное число....

2
 Аватар для Витальич
1280 / 1185 / 175
Регистрация: 02.12.2013
Сообщений: 4,883
08.11.2015, 17:43
Цитата Сообщение от Korgen Посмотреть сообщение
записывал в ячейки 80h 81h 82h, т.к. в ячейки по заданию, я не смог записать
а что говорит талмуд по 128(ой)
The I/O memory space contains 64 addresses which can be accessed directly, or as the Data
Space locations following those of the Register file, $20 - $5F. In addition, the ATmega128 has
Extended I/O space from $60 - $FF in SRAM where only the ST/STS/STD and LD/LDS/LDD
instructions can be used.
1
0 / 0 / 0
Регистрация: 14.06.2012
Сообщений: 11
08.11.2015, 18:48  [ТС]
Спасибо. Помогло. Я пытался записать через R26:R27, через команду ST. Поменял на STS и прямые адреса, помогло. Ещё и в правильном порядке начал записывать.

А по самому алгоритму выделения сотен,десятков и единиц замечаний нет?
отредактированный код
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
.def    drem8u=r15  ;остаток
.def    dres8u=r16  ;результат
.def    dd8u=r16  ;делимое
.def    dv8u=r17  ;делитель
.def    dcnt8u=r18  ;счетчик цикла
.def    dcnt8u2=r19  ;счетчик цикла
.def    dcnt8u3=r20  ;счетчик цикла
 
        ldi dd8u, 0x080
        ldi dv8u, 0x64
        ldi dcnt8u2,1
        ldi dcnt8u3,1
d8u_0:
        sub drem8u,drem8u   ;очистить остаток и перенос
        ldi dcnt8u,9    ;инициализировать счетчик цикла
        
d8u_1:  
        rol dd8u    ;делимое/результат сдвинуть влево
        dec dcnt8u  ;уменьшить на единицу счетчик цикла
        brne    d8u_2  ;переход, если не ноль
        
        
        dec dcnt8u2  ;уменьшить на единицу счетчик цикла
        breq    tp  ;переход, если ноль
 
        dec dcnt8u3  ;уменьшить на единицу счетчик цикла
        breq    tp2  ;переход, если ноль
        
 
tp:
        sts  $0128, dres8u 
        ldi dd8u, 0x01C
        ldi dv8u, 0x0A
        rjmp d8u_0  ;выход из подпрограммы
tp2:
        sts  $0129, dres8u 
        sts  $012a, drem8u
        ret
d8u_2: 
        rol drem8u  ;остаток сдвинуть влево
        sub drem8u,dv8u ;остаток= остаток - делитель
        brcc    d8u_3  ;если результат < 0
        add drem8u,dv8u ;восстановить остаток
        clc    ;сбросить перенос для  формирования результата
        rjmp    d8u_1  ;иначе
 
 
 
d8u_3: 
        sec  ;установить перенос для формирования результата
        rjmp    d8u_1  ;вернуться назад
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
08.11.2015, 18:48
Помогаю со студенческими работами здесь

Дано трехзначное число определить количество сотен, десятков и единиц
Дано трехзначное число определить кол-во сотен,десятков и единиц.Помогите решить!

Необходимо найти количество единиц, десятков и сотен указанного числа
Дано трехзначное число. Необходимо найти количество единиц, десятков и сотен указанного числа. помогите решить эту задачку..

Программа определения кол-ва сотен, десятков, единиц в записи числа
Помогите, пожалуйста составить программу определения количества сотен, десятков и единиц в записи числа. Спасибо за внимание:p

Для введенного 4-хзначного числа определить количество тысяч, сотен, десятков и единиц
Как сделать эту del?

Найти все трехзначные числа, равные сумме квадрата цифры сотен и цифр десятков и единиц.
Найти все трехзначные числа, равные сумме квадрата цифры сотен и цифр десятков и единиц.


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru