Микропроцессор Кр580ВМ80

Тема в разделе "WASM.ASSEMBLER", создана пользователем serega919394, 15 окт 2010.

  1. serega919394

    serega919394 New Member

    Публикаций:
    0
    Регистрация:
    15 окт 2010
    Сообщения:
    11
    Здраствуйте, уважаемые форумчане! Наверняка этот вопрос уже оговаривался раньше, но 45 страниц это слишком много. Подскажите пожалуйста, необходимо составить программу вычисления функции у = √х1*х2, как это сделать? Я знаю методы сдвига, вычитания для замены деления, насчет корня есть методы вычитания нечетных чисел, а также формула ньютона. Может кто-нибудь знает какие-либо книги на эту тему.
    Заранее Благодарен.
     
  2. s_d_f

    s_d_f New Member

    Публикаций:
    0
    Регистрация:
    15 май 2008
    Сообщения:
    342
    Метод касательных, описан в очень многих учебниках высшей математики. Ничего там сложного нет. Твое уравнение можно свести к нахождению корней уравнения
    (y^2)/(x2^2)-x1=0
    Производная (2*y)/(x2^2)=0

    Только не запутайся, переменная здесь y, а в примерах учебников обычно x везде ставят и x1,x2 это константы, которые за ранее должны указываться.
     
  3. serega919394

    serega919394 New Member

    Публикаций:
    0
    Регистрация:
    15 окт 2010
    Сообщения:
    11
    Спасибо. Но мне не надо преобразовывать функцию. Может быть вы знаете какие-нибудь книги по МП Кр580ВМ80?
     
  4. Tronix

    Tronix Member

    Публикаций:
    0
    Регистрация:
    10 сен 2010
    Сообщения:
    122
    Это аналог Intel 8080 микропроцессора. Стремная штука конечно с непривычки, но придрачиться за пару часов можно после x86. Умножение x1 на x2 - в первом приближении это сложение x1 с самим собой x2 число раз. ИнтелЪ рекомендует для обнобайтных чисел такую процедуру:
    [​IMG]
     
  5. s_d_f

    s_d_f New Member

    Публикаций:
    0
    Регистрация:
    15 май 2008
    Сообщения:
    342
    Про процессор этот в первый раз слышу. Если тебе нужен ассемблер этого процессора, то это в первую очередь документацию смотреть надо.

    И что значит?
     
  6. Tronix

    Tronix Member

    Публикаций:
    0
    Регистрация:
    10 сен 2010
    Сообщения:
    122
    Я так понял, что автору нужно что-то типа:
    Код (Text):
    1. jmp start
    2. x1 db 5
    3. x2 db 3
    4. y db ?
    5. start:
    6. ;y=sqrt(x1*x2)
    7. ;здесь код
    8. end
     
  7. serega919394

    serega919394 New Member

    Публикаций:
    0
    Регистрация:
    15 окт 2010
    Сообщения:
    11
    Я просто не особо понял, что вы имели ввиду.
    В ассемблере 8080(Кр580ВМ80) нет команды sqrt- извлечение корня. Исходные числа для вычисления функции 2-х байтовые, двоичные.
     
  8. s_d_f

    s_d_f New Member

    Публикаций:
    0
    Регистрация:
    15 май 2008
    Сообщения:
    342
    serega919394,
    Если не разобрался с этим методом или решил другой использовать это еще не значит, что я здесь что-то не правильно понял. Тем более сам ранее писал вычисление корня только на 32-битном ассемблере x86 для длиных чисел используя метод касательных. Могу даже ссылку на архив с примерами дать.
     
  9. Tronix

    Tronix Member

    Публикаций:
    0
    Регистрация:
    10 сен 2010
    Сообщения:
    122
    Я знаю что ее там нет. Я этот псевдо-код привел для s_d_f, чтобы пояснить что требуется вообще.
     
  10. serega919394

    serega919394 New Member

    Публикаций:
    0
    Регистрация:
    15 окт 2010
    Сообщения:
    11
    Да, нужна ссылка.
    Спасибо
     
  11. Tronix

    Tronix Member

    Публикаций:
    0
    Регистрация:
    10 сен 2010
    Сообщения:
    122
    serega919394
    Вот умножение 2 байтных чисел: http://www.cyberforum.ru/assembler/thread76759.html?uri=/assembler/thread76759.html#post437197
     
  12. serega919394

    serega919394 New Member

    Публикаций:
    0
    Регистрация:
    15 окт 2010
    Сообщения:
    11
    Извините, опечатка вышла не знаю почему я так записал. На самом деле функция такая у = √х1/х2.
    Tronix Большое спасибо, умножение мне тоже пригодится.
     
  13. s_d_f

    s_d_f New Member

    Публикаций:
    0
    Регистрация:
    15 май 2008
    Сообщения:
    342
  14. serega919394

    serega919394 New Member

    Публикаций:
    0
    Регистрация:
    15 окт 2010
    Сообщения:
    11
    s_d_f Спасибо
     
  15. Tronix

    Tronix Member

    Публикаций:
    0
    Регистрация:
    10 сен 2010
    Сообщения:
    122
    Деление 16 битного числа на 16 битное тоже от Intel'я:

    reentrant program uses the B and C registers to hold the dividend and quotient, and the D and E register to held the divisor and remainder. The H and L registers are used to store data temporarily.
    [​IMG]
     
  16. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.787
    деление при помощи сдвигов, сложения и вычитания Алгоритм деления без восстановления
    умножение через сдвиги, сложения и вычитания здесьправда на ассемблере х86, но переделать под Кр580ВМ80 (i8080) можно, если постараться
     
  17. Tronix

    Tronix Member

    Публикаций:
    0
    Регистрация:
    10 сен 2010
    Сообщения:
    122
    А вот и вполне годная готовая либа для i8080. Умножение/деление и другие арифметические операции присутствуют в полном объеме.
     
  18. serega919394

    serega919394 New Member

    Публикаций:
    0
    Регистрация:
    15 окт 2010
    Сообщения:
    11
    Спасибо
     
  19. FatMoon

    FatMoon New Member

    Публикаций:
    0
    Регистрация:
    28 ноя 2002
    Сообщения:
    954
    Адрес:
    Russia
    Авангардный алгоритм вычисления квадратного корня вычитанием:

    Начинаем вычитать из числа нечетные числа, пока не получим отрицательное. Сколько операций вычитания - этому и равен корень. Приближенно. Если в последнем вычитании получаем 0 - значит корень получили точный. Иначе надо что-то сделать с остатком :) чтобы посчитать мантиссу.

    Например: 25
    -1 = 24
    -3 = 21
    -5 = 16
    -7 = 9
    -9 = 0
    --------
    5 нечетных чисел, квадратный корень=5, остаток=0, это верное и точное решение

    100:
    -1 = 99
    -3 = 96
    -5 = 91
    -7 = 84
    -9 = 75
    -11 = 64
    -13 = 51
    -15 = 36
    -17 = 19
    -19 = 0
    ----------------
    10 нечетных успешно вычли, остаток 0, точный корень=10

    алгоритм легко перекладывается на КР580ВМ80, поскольку не требует ни деления, ни умножения. Только немного математики, чтобы а) придумать как хранить числа с плавающей точкой и б) как усовершенствовать алгоритм для остатка (когда корень должен получится не целый).

    Как вариант, умножаем все на 10000 (до операции с корнем) - умножить на фиксированную константу проще простого сложением. А потом считаем 2 последних десятичных знака - после запятой.

    Пример: 8 -> 80000
    282 вычитания -> 2.82
     
  20. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    FatMoon
    Супер :)) сам придумал или где-то описано?
    Кстати это явно можно улучшить, уменьшив количество вычитаний по аналогии с делением.