![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#11 |
Пользователь
Регистрация: 20.09.2010
Сообщений: 38
|
![]()
Если любой длины и столбиком.. то думаю проще работать с неупаковаными BCD.
Хитрый у вас препод. Да и в сопроцессор любой длины число тоже не запихать. Интересная задачка. Попробую помочь. Складывают и умножают BCD обычными командами сложения и умножения, только делают десятичную коррекцию после операции. Например, часть алгоритма может быть такой: Алгоритм позволяет умножить неупакованое BCD число любой длины на одноразрядное BCD число. Код:
di - на второй множитель. В CX длина первого множителя. Строка результата записывается по адресу [BX] задом наперед. Что для дальнейшего сложения промежуточных результатов даже удобнее. Преобразовать число из ASCII в неупакованое BCD проще простого: Код:
SI указывает на начало ASCII числа. Результат записывается на место исходного числа. Последний раз редактировалось Vergo; 22.10.2010 в 17:21. |
![]() |
![]() |
![]() |
#12 | |
Регистрация: 18.10.2010
Сообщений: 7
|
![]() Цитата:
byte ptr[si] - это указывает на наше число любой длины. byte ptr [di] - это наше то самое одноразрядное BCD число. Если я хочу умножить на число большего разряда(в частности на само себя), то я организовываю ещё один цикл, содержащий в себе вот этот кусок кода. А вот для работы с этими числами, точнее как их вводить, что бы процессору было понятно, что это именно двоично-десятичное число, а не двоичное, я не совсем разобрался. |
|
![]() |
![]() |
![]() |
#13 |
Пользователь
Регистрация: 20.09.2010
Сообщений: 38
|
![]() Код:
Сейчас ограничитель стоит на 30 разрядов. Если этого недостаточно - нужно изменить значение переменной size_n. Наверняка это очередной велосипед..причем достаточно корявенький, шлифовать некогда было ![]() И еще, отрицательные числа я тут не учитывал. Думаю можно сделать проверку на ввод отрицательного числа в момент ввода значений и не усложнять из-за этого всю процедуру. Извиняюсь за скудность комментов,.. засыпаю уже ![]() |
![]() |
![]() |
![]() |
#14 |
Регистрация: 18.10.2010
Сообщений: 7
|
![]()
Премного благодарен.
У меня как-то и самого простого, но что бы работало как надо не получилось. Сейчас буду разбираться. |
![]() |
![]() |
![]() |
#15 |
Пользователь
Регистрация: 20.09.2010
Сообщений: 38
|
![]()
Есть неплохой эмулятор для отладки подобных программ - Emu8086.
Только для него шапку программы нужно немного изменить. Он символ "=" не понимает почему-то. Начало будет выглядеть так: Код:
|
![]() |
![]() |
![]() |
#16 |
Регистрация: 18.10.2010
Сообщений: 7
|
![]()
Извиняюсь за некрасивое и долгое отсутствие. За то время пока делал эту лабораторную успел сделать 2 курсовых досрочно.
Вот исходный код с которым я успешно защитился. Можно было сделать проще и эффективнее, но мне уже просто было не до этого. Потому получился такой очень страшный. Код:
|
![]() |
![]() |
![]() |
#17 |
Регистрация: 18.10.2010
Сообщений: 7
|
![]()
Продолжение
Код:
|
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Умножение | panuta | Microsoft Office Excel | 3 | 31.05.2010 17:42 |
С теорией я разобрался незнаю как реализовать | Valerii | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 2 | 26.01.2010 15:35 |
Умножение | KoBRaAndrey | Общие вопросы Delphi | 4 | 03.10.2009 12:23 |
умножение | PAWLO1993 | Паскаль, Turbo Pascal, PascalABC.NET | 4 | 29.07.2008 18:55 |
помогите с теорией в паскале | Vitas1234 | Помощь студентам | 1 | 25.05.2008 17:55 |