Важная информация
Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 11

Тема: умножения путем сложения (МАКРОСРЕДСТВА)

  1. #1 умножения путем сложения (МАКРОСРЕДСТВА) 
    Новичок
    Регистрация
    31.03.2014
    Сообщений
    2
    Сказал(а) спасибо
    0
    Поблагодарили 0 раз(а) в 0 сообщениях
    Написать программу умножения U на V путем сложения V самого с собой U раз. U, V - адреса памяти.
     

  2. #2  
    Супер модератор Аватар для >Quiet Snow<
    Регистрация
    11.04.2011
    Адрес
    Планета земля
    Сообщений
    3,931
    Сказал(а) спасибо
    1,842
    Поблагодарили 982 раз(а) в 840 сообщениях
    Записей в блоге
    1
    До макросредств и рабочих обёрток допилите сами... код элементарен.

    Код asm:
    ASM
      Xor ax, ax
      Mov cx, [U]
      Or cx, cx
      Js Ex
      Mov bx, [V]
         Re: Add ax, bx
             Dec cx
         Jnz Re
      Ex: Mov [R], ax
    END ASM


    Обёртка на FreeBasic (компилируем под консоль)
    Код FreeBasic:
    DIM U  AS USHORT   ' 16 бит / + / целое
    DIM V  AS USHORT   ' 16 бит / + / целое
    DIM R  AS USHORT   ' 16 бит / + / целое
     
    INPUT "Vvedite U: ", U
    INPUT "Vvedite V: ", V
     
    ASM
      Xor ax, ax
      Mov cx, [U]
      Or cx, cx
      Js Ex
      Mov bx, [V]
         Re: Add ax, bx
             Dec cx
         Jnz Re
      Ex: Mov [R], ax
    END ASM
     
    PRINT "Result = "; R
    SLEEP
    Обучение прикладному программированию(по skype), качественно, недорого, 18+, вопросы в личку.
    «Если вы ничего не сделаете, я уверяю вас, ничего и не произойдёт» © Жак Фреско
    Ограниченно модерирую.
     

  3. #3  
    Разбирающийся
    Регистрация
    30.01.2011
    Сообщений
    60
    Сказал(а) спасибо
    2
    Поблагодарили 50 раз(а) в 26 сообщениях
    >Quiet Snow<, а почему бы не использовать loop?

    Код :
      Xor ax, ax
      Mov cx, [U]
      Mov bx, [V]
         Re: Add ax, bx
         Loop Re
      Mov [R], ax

    Можно даже так:

    Код :
      Xor ax, ax
      Mov cx, [U]
      Mov bx, [V]
      Rep Add ax, bx
      Mov [R], ax
     

  4. #4  
    Гуру Аватар для Абадябер
    Регистрация
    09.12.2010
    Адрес
    Беларусь, Минск
    Сообщений
    1,219
    Сказал(а) спасибо
    302
    Поблагодарили 176 раз(а) в 144 сообщениях
    Записей в блоге
    5
    Цитата Сообщение от uav1606 Посмотреть сообщение
    >Quiet Snow<, а почему бы не использовать loop?
    Вполне можно, но процессоры начиная от Pentium выполнят вариант с dec-jnz немного быстрее
    Rep Add ax, bx
    Было бы здорово, но префикс rep работает только с цепочными командами, типа movs*, outs*, stos* и некоторыми другими. Складывать таким образом он не станет, к сожалению.
    Дружба-магия-радость!
     

  5. Пользователь сказал cпасибо:

    >Quiet Snow< (03.04.2014)

  6. #5  
    Разбирающийся
    Регистрация
    30.01.2011
    Сообщений
    60
    Сказал(а) спасибо
    2
    Поблагодарили 50 раз(а) в 26 сообщениях
    Да, Вы правы, забыл про эту особенность rep.
     

  7. #6  
    Супер модератор Аватар для >Quiet Snow<
    Регистрация
    11.04.2011
    Адрес
    Планета земля
    Сообщений
    3,931
    Сказал(а) спасибо
    1,842
    Поблагодарили 982 раз(а) в 840 сообщениях
    Записей в блоге
    1
    а почему бы не использовать loop?
    Можно Loop, для новичка будет нагляднее, просто раньше когда писал ЧИМ для спикера нужны были адски мизерные
    задержки для повышения битности звука, так вот Loop не подходил т.к. выполнялся заметно медленнее, было это дело
    ещё на покойном MMX 200MHz. С этих пор вычеркнул для себя данную инструкцию из списка используемых.

    Было бы здорово, но префикс rep работает только с цепочными командами, типа movs*, outs*, stos* и некоторыми другими.
    Спасибо Абадябер, что развеял мои предрассудки, а то уж хотел застрелиться, думал всю жизнь не знал про настолько
    крутую особенность ассемблера. ))) Ведь и не предполагал, что меня можно так наколоть На асме уже давно ничего
    не писал и вот решил немного размять мозг.
    Обучение прикладному программированию(по skype), качественно, недорого, 18+, вопросы в личку.
    «Если вы ничего не сделаете, я уверяю вас, ничего и не произойдёт» © Жак Фреско
    Ограниченно модерирую.
     

  8. #7  
    Новичок
    Регистрация
    31.03.2014
    Сообщений
    2
    Сказал(а) спасибо
    0
    Поблагодарили 0 раз(а) в 0 сообщениях
    ни как не смог разобраться как через макрос делать...
     

  9. #8  
    Супер модератор Аватар для >Quiet Snow<
    Регистрация
    11.04.2011
    Адрес
    Планета земля
    Сообщений
    3,931
    Сказал(а) спасибо
    1,842
    Поблагодарили 982 раз(а) в 840 сообщениях
    Записей в блоге
    1
    Цитата Сообщение от kill94 Посмотреть сообщение
    ни как не смог разобраться как через макрос делать...
    Почитайте справку MASM, также в книжке Пирогова в самом конце это было. Я сейчас уже не помню,
    но там не сложнее чем обычная процедура. Масма сейчас под рукой нет, а нерабочий код не пишу.
    Обучение прикладному программированию(по skype), качественно, недорого, 18+, вопросы в личку.
    «Если вы ничего не сделаете, я уверяю вас, ничего и не произойдёт» © Жак Фреско
    Ограниченно модерирую.
     

  10. #9  
    Новичок
    Регистрация
    15.03.2017
    Сообщений
    1
    Сказал(а) спасибо
    0
    Поблагодарили 0 раз(а) в 0 сообщениях
    Добрый день. Как раз по теме, никак не могу окончательно разобраться в коде
    Лабораторная по умножения двух чисел
    Movlw d'3'; пересылаем 3 в аккумулятор
    Movwf tempa; с аккумулятора в регистр
    Movlw d'5';пересылаем 5 в аккумулятор и там остаётся 5
    M1
    Addwf tempb , 0; слаживаем 5 и 3 и результат сохраняется в аккумуляторе
    Decf tempa, 1; вычитаем 3-1 и сохраняем результат в tempa
    Btfss STATUS, z; проверяем 0 в регистре. И пока tempa не будет 0 значение заносит в аккумулятор? Вот тут я и остановилась. Получается при прохождении первого цикла в аккумуляторе сохранилось значение 5+3, потом при втором цикле будет значение 5+3+2, и третий 5+3+2+1. Так? Или я все неправильно поняла?
    Вот на этом цикле я остановилась, не могу разобраться.
    И цикл заканчивается когда в tempa будет 0. Правильно?
    Movwf tempc; результат

    Заранее спасибо за ответ
     

  11. #10  
    Профи Аватар для Сионист
    Регистрация
    21.01.2016
    Адрес
    Галактика Млечный Путь
    Сообщений
    509
    Сказал(а) спасибо
    11
    Поблагодарили 21 раз(а) в 20 сообщениях
    А на спектруме это даже не префикс, а отдельная инструкция, включающая в себя и повторение, и саму операцию.
    Последний раз редактировалось >Quiet Snow<; 16.03.2017 в 01:11.
    Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на си.
     

Страница 1 из 2 12 ПоследняяПоследняя
Информация о теме
Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Ответов: 2
    Последнее сообщение: 24.05.2011, 04:37
Ваши права
  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •