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

[MCS-51] Создание знаковых 16-разрядных целых чисел и операции умножения на ASM-51

11.12.2010, 19:07. Показов 6243. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Привет.
Я знаю, я наверно лезу с глупыми вопросами. Но порою хочется получить толковое разъяснение и принцип алгоритмов.

Прохожу курс программирования микроконтроллеров MCS-51 (atmel). Используется язык ASM-51.


Не могу четко осознать, как задавать 16-разрядные знаковые числа.

Знаю, что обычное (без знаковое) будет задаться 2мя регистрами (например R0 и R1), однако не понимаю этого.
Например:
23 dec=17 hex=0001 0111 (8 бит, так как используются 8битные регистры). Разве не достаточно 1 регистра?

Тем более сложно пойти дальше со знаковыми:
Как задавать знаковые числа в asm? Нужно использовать дополнительные ячейки данных (регистры?!)?




Отчего такие вопросы? Мне было дано задание: умножить 16-разрядное знаковое целое и 8-разрядное (равное 2^n, т.е. 2,4,8,16,32 и т.д.) при условии сохранения знака.

Не зная как задавать знаковые числа, а так же не понимая в чем ЗАПРОГРАММИРОВАННАЯ разница между 16ричными и 8ричными числами, в задании я только вижу умножение 2х чисел:

Шестнадцатеричное (R0 R1) * Восьмеричное (R2)
R0(0000 0000) R1(0000 0000) * R2(0000 0000)
Вижу, что при умножении младших следует учитывать сдвиг. Так ведь?
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
MOV R0,#FF
MOV R1,#FF
MOV R2,#FF
 
MOV A,R0
MOV B,R2
MUL AB
 
; СОХРАНЯЕМ ЗНАЧЕНИЯ "А" И "B" В СВОБОДНЫЕ РЕГИСТРЫ
 
MOV A,R1
MOV B,R2
MUL AB
А как дальше? Да и пример с без знаковыми =(

Научите кто как может)
Спасибо заранее.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.12.2010, 19:07
Ответы с готовыми решениями:

Реализовать операции сложения, вычитания, умножения для целых знаковых 32-х разрядных чисел
Помогите плиз.

умножения знаковых чисел в формате 16х16 методом умножения в дополнительном коде с одним шагом коррекции
«Resid.asm» ;Резидентный обработчик, образующий вместе с транзитной программой ;единый програмный...

Реализовать операцию умножения целых чисел m и n путем использования операции сложения
Реализовать операцию умножения целых чисел m и n путем использования операции сложения. Нужно...

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

1
1 / 1 / 0
Регистрация: 11.12.2010
Сообщений: 5
14.12.2010, 18:18  [ТС] 2
Так:

1) 16-разрядные и 8-разрядные. Как было упомянуто - различие только в количестве битов, т.е.: 16-разрядный нуждается в 2х регистрах по 8 бит, 8-разрядный - один регистр.
````````_______________``````_______________
16: R0 = |_|_|_|_|_|_|_|_| R1 = |_|_|_|_|_|_|_|_| , где старший регистр - R0, а младший R1.
```````_____________
8: R0 = |_|_|_|_|_|_|_|_|

Принцип перемножения этих двух чисел такой же, как умножение в столбик десятичных:
`````````х89
``````````_6
````````+ 54
`````````48
`````````534
````````````_______``________
```````````|старший| |младший|
``````````*``````````|8-ричное|
````````````||||||||||| ||||||||||||
+||||||||||| |||||||||||

||||||||||| ||||||||||| ||||||||||||

Догадались?
Старший из первого произведения (пятерочка из 54) складывается с младшим (восьмерочка из 48), ну а при переполнении (5+8=3 и 1 в уме) бит переполнения (переноса) добавляется к старшему последнего регистра (к четверочке из 48). В итоге получается: 54+48=534.
Вносим бит переноса в последний регистр при помощи команды ADDC

2) отрицательные числа в доп.коде - число в двоичном коде инвертированное и увеличенное на 1:
....4=0000 0100
.инв=1111 1011
...-4=1111 1100



Любопытный момент: 2,4,8,16,32,... Это сдвиг регистра:
2```00000010
4```00000100
8```00001000
16``00010000
32``00100000
64``01000000
128`10000000

Добавление от 13.12.2010 22:46:

ПС: Ах да!!!
Особенность:
MUL AB
При умножении регистров А и B (допустим) командой MUL следует учесть, что после операции в A записывается младший регистр произведения, а в B - старший регистр произведения.
Мда, не попадитесь)
0
14.12.2010, 18:18
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.12.2010, 18:18
Помогаю со студенческими работами здесь

Определение разницы чисел в MCS-51 (ASM)
Найти разницу чисел 4801 и 209. Число десятичных единиц старшего байта результата поместить в...

Выяснить, образуют ли группу множество целых неотрицательных чисел относительно операции умножения?
Здравствуйте можете помочь с заданием по алгебре? Выяснить, образуют ли группу множество целых...

Определение количества чисел в массиве на MCS-51 (ASM)
Вычислить количество чисел в массиве {Xi} меньших Z (Xi=0...255, Z=0...255, i=10) Добавлено...

Вывод знаковых чисел на экран после умножения
#fasm# ;Эта команда устанавливает значение программного счетчика в 100h, потому что при загрузке...

Пример кольца: целых чисел, кратных данному натуральному числу n, операции сложения и умножения
Пишу реферат на тему: "Пример кольца: целых чисел, кратных данному натуральному числу n, операции...

Разработать устройство умножения двух знаковых четырехразрядных чисел
Задание: разработать устройству умножения двух знаковых четырехразрядных чисел, согласно варианту...

Схема умножения n-разрядных чисел
Помогите пожалуйста спроектировать схему, умножающую двухбитовое число на трехбитовое. Результат...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru