Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.73/22: Рейтинг темы: голосов - 22, средняя оценка - 4.73
Shark2.1
0 / 0 / 0
Регистрация: 11.12.2010
Сообщений: 5
1

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

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

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

Прохожу курс программирования микроконтроллеров 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
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.12.2010, 19:07
Ответы с готовыми решениями:

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

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

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

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

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

1
Shark2.1
0 / 0 / 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
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.12.2010, 18:18

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

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

[TASM] Сравнение целых знаковых чисел
Здравствуйте, не мог бы кто-нибудь привести примеры сравнения целых знаковых чисел. Заранее спасибо.


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

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

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