Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.06.2012, 12:22   #1
Shatodor
Новичок
Джуниор
 
Регистрация: 12.06.2012
Сообщений: 4
По умолчанию Деление двухбайтового числа на однобайтовое MCS-51

Доброго времени суток!
В процессе написания программы на ассемблере для микроконтроллера MCS-51 возникла необходимость делить беззнаковое двухбайтовое число на 20d. Попытки что либо найти в интернете провалились.
Пригодится любая помощь, будь то ассемблерный код или просто алгоритм.
Shatodor вне форума Ответить с цитированием
Старый 12.06.2012, 17:02   #2
Fatal Error
Пользователь
 
Аватар для Fatal Error
 
Регистрация: 20.05.2012
Сообщений: 58
По умолчанию

у тебя трудности с делением или не знаешь как делить два байта на один?
Fatal Error вне форума Ответить с цитированием
Старый 12.06.2012, 17:10   #3
Shatodor
Новичок
Джуниор
 
Регистрация: 12.06.2012
Сообщений: 4
По умолчанию

Для деления байта на байт в ассемблере MCS-51 есть команда DIV.
Проблема именно в том как использовать эту команду для деления двух байтов на один.
Shatodor вне форума Ответить с цитированием
Старый 12.06.2012, 17:19   #4
Fatal Error
Пользователь
 
Аватар для Fatal Error
 
Регистрация: 20.05.2012
Сообщений: 58
По умолчанию

хз чо у вас там с MCS-51, но в станадартно тасме под интел и амд див делит два байта на один, 4 байта на два, только так.
вот под интел:
Код:
mov ax, 1234h
mov bl, 0ah
div bl
а алгоритм таков: сперва делишь старший байт, сохраняешь результат (это старшая часть частного), затем младший байт делишь на байт и сохраняешь частное (это младшая часть)
Fatal Error вне форума Ответить с цитированием
Старый 12.06.2012, 17:19   #5
Fatal Error
Пользователь
 
Аватар для Fatal Error
 
Регистрация: 20.05.2012
Сообщений: 58
По умолчанию

хз чо у вас там с MCS-51, но в станадартно тасме под интел и амд див делит два байта на один, 4 байта на два, только так.
вот под интел:
Код:
mov ax, 1234h
mov bl, 0ah
div bl
а алгоритм таков: сперва делишь старший байт, сохраняешь результат (это старшая часть частного), затем младший байт делишь на байт и сохраняешь частное (это младшая часть)
Fatal Error вне форума Ответить с цитированием
Старый 12.06.2012, 17:31   #6
Shatodor
Новичок
Джуниор
 
Регистрация: 12.06.2012
Сообщений: 4
По умолчанию

Этот алгоритм сразу пришел мне в голову, но здесь возникает проблема в случае если старшая часть делимого меньше делителя.


Деление аккумулятора А на регистр B: DIV AB При выполнении операции деления целое от деления записывается в аккумулятор А, остаток от деления в регистр В.

Последний раз редактировалось Shatodor; 12.06.2012 в 17:35.
Shatodor вне форума Ответить с цитированием
Старый 12.06.2012, 17:35   #7
Fatal Error
Пользователь
 
Аватар для Fatal Error
 
Регистрация: 20.05.2012
Сообщений: 58
По умолчанию

да, точно, не подумал
Fatal Error вне форума Ответить с цитированием
Старый 12.06.2012, 17:49   #8
Fatal Error
Пользователь
 
Аватар для Fatal Error
 
Регистрация: 20.05.2012
Сообщений: 58
По умолчанию

а два байта на два байта делить можно на этом камне?
Fatal Error вне форума Ответить с цитированием
Старый 12.06.2012, 17:50   #9
Shatodor
Новичок
Джуниор
 
Регистрация: 12.06.2012
Сообщений: 4
По умолчанию

Нет, у него арифметика однобайтовая.
Shatodor вне форума Ответить с цитированием
Старый 12.06.2012, 18:06   #10
Fatal Error
Пользователь
 
Аватар для Fatal Error
 
Регистрация: 20.05.2012
Сообщений: 58
По умолчанию

хз как быть...
Fatal Error вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Деление числа без остатка grom333 Общие вопросы Delphi 6 18.01.2012 22:28
Длинная арифметика : деление (числа в string'е на число 256) Dima_Dima Общие вопросы Delphi 6 06.02.2011 20:39
Деление числа в ассемблере Настя22 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 9 23.01.2011 13:12
Деление длинных чисел на длинные числа Dr. Feelgood Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 05.06.2010 12:05
Деление числа на 20 с помощью сдвигов... maLoy*508 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 4 01.04.2008 02:36