1 / 1 / 0
Регистрация: 11.12.2010
Сообщений: 5
|
||||||
1 | ||||||
[MCS-51] Создание знаковых 16-разрядных целых чисел и операции умножения на ASM-5111.12.2010, 19:07. Показов 6213. Ответов 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) Вижу, что при умножении младших следует учитывать сдвиг. Так ведь?
Научите кто как может) Спасибо заранее.
0
|
|
11.12.2010, 19:07 | |
Ответы с готовыми решениями:
1
Реализовать операции сложения, вычитания, умножения для целых знаковых 32-х разрядных чисел умножения знаковых чисел в формате 16х16 методом умножения в дополнительном коде с одним шагом коррекции Реализовать операцию умножения целых чисел m и n путем использования операции сложения AT90S1200. Умножение 4-х разрядных чисел на ASM |
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 | |
14.12.2010, 18:18 | |
Помогаю со студенческими работами здесь
2
Выяснить, образуют ли группу множество целых неотрицательных чисел относительно операции умножения?
Вывод знаковых чисел на экран после умножения Пример кольца: целых чисел, кратных данному натуральному числу n, операции сложения и умножения Разработать устройство умножения двух знаковых четырехразрядных чисел Схема умножения n-разрядных чисел Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |