|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
16.11.2018, 14:27 | #1 |
Пользователь
Регистрация: 22.02.2015
Сообщений: 24
|
Неупакованные числа
Доброго времени суток. Несколько дней пытаюсь разобраться в неупакованных числах, а точнее в их делении, но никак не могу понять как это работает.
В общем, имеется число, например "4159h". Оно в неупакованном виде, т.е. "04010509h" Чтобы его разделить, мне нужно поместить старшую часть (0401h) в DX, а младшую (0509h) в AX, тогда при делении на CX должен получиться какой нибудь результат. Есть операция aad которую нужно использовать перед делением для корректировки, но она работает только для регистра AX. А как быть с DX? Я не понимаю как это работает, при попытке деления получаю "Divide Error". Объясните пожалуйста |
17.11.2018, 09:22 | #2 |
Участник клуба
Регистрация: 16.06.2011
Сообщений: 1,428
|
в столбик нужно делить, как на бумажке..
но в данном примере, после 'aad' всё делимое вмещается у тебя в слово(АХ), поэтому можно обойтись малой кровью - например: Код:
только мов'ить в старшую часть EAX уже не получится, поэтому нужны сдвиги слов влево: shl eax,16
Нашедшего выход - затаптывают первым..
|
17.11.2018, 09:31 | #3 |
Участник клуба
Регистрация: 16.06.2011
Сообщений: 1,428
|
вообще-то так не пойдёт.. тут только в столбик
Нашедшего выход - затаптывают первым..
|
17.11.2018, 13:11 | #4 |
Пользователь
Регистрация: 22.02.2015
Сообщений: 24
|
Еще, наверно, можно число запаковать, тогда оно бы поместилось в регистр AX и его можно было бы спокойно разделить. Так как передо мной стоит задача обработать числа в неупакованном виде, а точнее найти их среднее арифметическое через подпрограмму, а как именно я это сделаю значения не имеет.
|
17.11.2018, 13:51 | #5 |
Пользователь
Регистрация: 22.02.2015
Сообщений: 24
|
Решение найдено
DX - старшая AX - младшая BX - делитель Код:
|
17.11.2018, 16:31 | #6 |
Участник клуба
Регистрация: 16.06.2011
Сообщений: 1,428
|
..найдено - это хорошо, только причём здесь упомянутые BCD?
складывать и вычитать их можно в любом виде, а вот делить и умножать - только неупакованные! Вот пример деления распакованного, на его-же длинну в байтах: Код:
Нашедшего выход - затаптывают первым..
|
21.11.2018, 16:10 | #7 |
Пользователь
Регистрация: 22.02.2015
Сообщений: 24
|
|
21.11.2018, 18:46 | #8 |
Участник клуба
Регистрация: 16.06.2011
Сообщений: 1,428
|
..то в столбик, по принципу "деление-вычитанием"
лично мне это никогда не нужно было (и врядли пригодится), поэтому и не вникал. Но когда-то подымалась тут тема - поищи..
Нашедшего выход - затаптывают первым..
|
21.11.2018, 18:48 | #9 |
Участник клуба
Регистрация: 16.06.2011
Сообщений: 1,428
|
однако если делитель 9 и меньше, то делимое может быть практически любой длинны
Нашедшего выход - затаптывают первым..
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
дан двумерный массив пользователь вводит натуральные числа,массив размером N на M .Все числа из которых можно извлечь корень извлекаются все числа меньше нуля заменяются их модулем | qqq`` | Паскаль, Turbo Pascal, PascalABC.NET | 9 | 02.10.2017 17:11 |
Создать программу,имеющая процедуру,кторая в производном текстовом файле,которая имеет слова и числа,изменяющая все числа числа,ме | Fingergod | Паскаль, Turbo Pascal, PascalABC.NET | 0 | 13.12.2012 20:08 |
Задачи в ТурбоПаскаль: найти числа Армстронга и просуммировать числа в последовательности номера которых простые числа | Lena1808 | Помощь студентам | 1 | 17.05.2012 08:00 |
Задані цілі числа від 1 до 100.Надрукувати в порядку зростання усі числа що можна подати у вигляді 7*i*j+j+3, де i,j - цілі числа. | Саша513 | Паскаль, Turbo Pascal, PascalABC.NET | 0 | 16.05.2012 18:45 |
Получить неупакованные данные | Voody | Работа с сетью в Delphi | 4 | 08.09.2009 20:33 |