Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры Atmega AVR
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
Dashta
0 / 0 / 0
Регистрация: 06.11.2014
Сообщений: 32
1

Умножение двухбайтного на однобайтный прямой код (ATmega128, ASM)

06.11.2014, 18:12. Просмотров 1486. Ответов 9
Метки нет (Все метки)

Есть предмет телекоммуникации и то что нам читают на лекции ни как не связно с тем, что этот же преподаватель требует на лабах. Я его не виню, он уже старенький, но вот проблема, никак не могу понять что от меня вообще хотят и как это реализовать. Помогите пожалуйста. Студентка 5 курса. Специальность сети связи. Вот само задание:
Программа умножения двухбайтного прямого кода на однобайтный прямой код. Исходные данные находятся в ячейках памяти с адреса, заданного преподавателем, а результат поместить в следующие ячейки памяти. Результат представить в виде трехбайтного числа.

Добавлено через 5 минут
Исходные данные он не давал, поэтому можно взять любое число.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.11.2014, 18:12
Ответы с готовыми решениями:

Работа с USART ATMega128 (ASM)
Добрый вечер! Возникла небольшое недопонимание по программе. Программа вроде...

Нет контроля светодиодов по последовательному каналу (ASM, ATMega128)
.include "m128def.inc" ldi r16, 0b00011000 sts UCSR1B, r16 ldi r16, 0b110...

Работа с LCD LM016L-HD44780 (ATMega128, ASM, Proteus)
ЭТА ПРОГРАММА ВЫВОДИТ СТРОКУ НА ЖКИ(DB7-DB0 portA. RW-pb5, RS-pb4,E-pb7) и не...

Умножение чисел с косвенной адресацией (ASM 51)
Приветствую! Нужна помощь, изучаю ассемблер и не могу разобраться как написать...

AT90S1200. Умножение 4-х разрядных чисел на ASM
Здравствуйте! Столкнулся с проблемой. Нужно написать ПО на ассемблере...

9
Mikl___
Автор FAQ
13304 / 6377 / 629
Регистрация: 11.11.2010
Сообщений: 11,536
07.11.2014, 03:30 2
Dashta,
а старенький преподаватель вам не объяснял, что ассемблер -- машинно-ориентированный язык, сколько разных типов микропроцессоров -- столько и различных ассемблеров и догадываться, ЧТО конкретно тебе нужно нет ни времени ни желания
0
Dashta
0 / 0 / 0
Регистрация: 06.11.2014
Сообщений: 32
07.11.2014, 17:07  [ТС] 3
Спасибо, уже и не нужно, сама решила. Если вдруг кто будет искать такое то вот решение именно этой задачи.
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
.Device ATmega128
.include "m128def.inc"
 
ldi r16,$6D
ldi r17,$BA
ldi r18,$80
ldi r19,$7F
mul8_16:
mov r22,r16
mov r23,r17
and r22,r18
and r23,r18
eor r23,r22
and r16,r19
and r17,r19
clr r22
     mul  R16,R17  ;находим X*Y = R16*R17 и заносим его в   
     mov  R23,R0   ;старшие байты произведения R21:R20  
     mov R24, R1     
     add r24,r18
        
     ret
Добавлено через 5 часов 59 минут
только это однобайтный на однобайтный, для двухбайтного нужно просто однобайтное число умножить на старшую половину, потом на младшую половину а потом их сложить и записать как умножение на первую половину, сумма произведений, умножение на вторую половину
0
pyzhman
791 / 485 / 66
Регистрация: 15.05.2012
Сообщений: 2,744
07.11.2014, 17:54 4
Цитата Сообщение от Dashta Посмотреть сообщение
сама решила
Не верю!!!
0
Dashta
0 / 0 / 0
Регистрация: 06.11.2014
Сообщений: 32
07.11.2014, 20:27  [ТС] 5
Почему не верю то? У меня было чуть по-другому, все считало верно как на калькуляторе, но препод сказал что я не права и первый бит в прямом коде это знак, и я его не учла, пришлось переделывать. Но почему вы считаете что я эту достаточно простую задачу не смогла решить? Мне нужно было просто понять суть что от меня хотят вот и все. Это далеко не первая лаба на ассемблере (ATmega 128), просто до этого мы работали напрямую со схемой, выводили имена на дисплей, работали с диодами, а вот именно чтобы что-то считать не было, поэтому не был понятен алгоритм
0
paskal
450 / 299 / 28
Регистрация: 15.08.2011
Сообщений: 928
07.11.2014, 22:21 6
Цитата Сообщение от Dashta Посмотреть сообщение
Спасибо, уже и не нужно, сама решила.
Если вам нужно было умножение чисел в прямом коде, то зачем эти пляски:
Assembler
1
2
3
4
5
6
7
8
9
10
11
ldi r18,$80
ldi r19,$7F
mul8_16:
mov r22,r16
mov r23,r17
and r22,r18
and r23,r18
eor r23,r22
and r16,r19
and r17,r19
clr r22
Для умножения 2-х однобайтных чисел достаточно выполнить команду
Assembler
1
mul  R16,R17
Добавлено через 13 минут
Хотя я догадался.
Вы же не сказали что прямой код со знаком.
И еще. Вы говорили что исходные данные находятся в ячейке по адресу, а в вашем решении сделано по другому
1
Dashta
0 / 0 / 0
Регистрация: 06.11.2014
Сообщений: 32
07.11.2014, 22:24  [ТС] 7
могу объяснить, изначально так я и делала, но оказалось что преподаватель хочет чтобы в прямом коде были знаки, если первая 1 то отрицательное число, а если 0 то положительное, и он дал число 81 в 16тиричной системе, которое как оказалось в его понимании является в десятеричной -1, хотя калькулятор считает не так, поэтому сначала мы умножаем на 80 оба числа, это обнуляет их знаки (как он сказал), потом делаем последующие операции и потом складываем с 1F что дает нам знак числа, и потом только умножаем. Честно я не считаю данное задание корректным и правильным, но оно заработало так как он хотел и лаба была сдана. Теперь на защиту мне было выдано другое задание, и буду с ним разбираться: дан массив чисел N, обнулить ячейки с отрицательными числами и записать в них номера этих ячеек и посчитать кол-во преобразованных ячеек, поискала в инете и быстро ничего не нашла, поэтому придется искать углубление.

Добавлено через 1 минуту
Я сама до сегодняшнего дня не знала что прямой код со знаком он хочет, поэтому вот так.
0
pyzhman
791 / 485 / 66
Регистрация: 15.05.2012
Сообщений: 2,744
08.11.2014, 07:25 8
Молодец, прям-таки луч света.
0
ValeryS
Модератор
7444 / 5636 / 716
Регистрация: 14.02.2011
Сообщений: 19,192
Завершенные тесты: 1
14.11.2014, 00:22 9
Цитата Сообщение от Dashta Посмотреть сообщение
и он дал число 81 в 16тиричной системе, которое как оказалось в его понимании является в десятеричной -1,
странный дяденька
в прямом коде уже по моему никто не работает
как будем решать -1+1=0
0х81+0х01=0х82
при обратном то все просто
0хFF+0x01=0x00 идет переполнение и регистр сам обнулится
прямой по этой причине и отбросили, я про него только в старых книжках читал,даже забыл, что такой существует
0
Dashta
0 / 0 / 0
Регистрация: 06.11.2014
Сообщений: 32
14.11.2014, 10:43  [ТС] 10
Так преподавателю уже за 80)
0
14.11.2014, 10:43
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.11.2014, 10:43

Как выполнить умножение на Atmega 8535 (ASM)?
Можно перемножить числа следующим образом? ldi r17 2 ldi r18 3 mul r18, r17...

Код программы для электронных весов с мк ATMEGA128
Нужен код программы электронных весов с функцией ИМТ!!!!! Горит курсач, завтра...

Умножение Двухбайтного на Однобайтное
А+А*В,А-двухбайтное и В -однобайтное. С индексной адресацией в задании но как я...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru