Студентам с вопросами о лабораторных работах сюда

Тема в разделе "WASM.BEGINNERS", создана пользователем IceStudent, 11 ноя 2006.

  1. FredDurst

    FredDurst New Member

    Публикаций:
    0
    Регистрация:
    2 ноя 2008
    Сообщения:
    1
    День добрый..
    Нужна ваша помощь в написании небольшой проги..
    Лаба в универе.. по-моему реально элементарная штука, но мы толком ничего не учили и сделать не можем..
    Вот условие:
    Создать программу суммирования двух чисел X и Y. Результат суммы присвоить числу Z. Вывести Z на экран

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

    Помогите пожалуйста написать. Использую tasm5+
    Заранее благодарен
     
  2. only

    only New Member

    Публикаций:
    0
    Регистрация:
    21 окт 2008
    Сообщения:
    147
    8_rpamm
    FPU
     
  3. Liam

    Liam New Member

    Публикаций:
    0
    Регистрация:
    3 ноя 2008
    Сообщения:
    7
    Помогите с лабой пожалуйста. Вот задание:
    Дано 16-битное число (двоичное), найти серию максимальной длины, состоящую из одних нулей.
     
  4. Ra!N

    Ra!N New Member

    Публикаций:
    0
    Регистрация:
    26 окт 2006
    Сообщения:
    111
    переформулировать можно?
     
  5. Liam

    Liam New Member

    Публикаций:
    0
    Регистрация:
    3 ноя 2008
    Сообщения:
    7
    Ну, т.е. дано число (объявлено в коде), например 101000010100110. Здесь 4 нуля стоят рядом - это максимальное кол-во рядом стоящих нулей. Вот это кол-во и нужно подсчитывать в коде и куда-нибудь записать это кол-во.
     
  6. Ra!N

    Ra!N New Member

    Публикаций:
    0
    Регистрация:
    26 окт 2006
    Сообщения:
    111
    Liam
    в Warren "Алгоритмические трюки для программистов" параграф 6.2 было такое, миллион способов - от лобовых до супердзенских.
     
  7. t00x

    t00x New Member

    Публикаций:
    0
    Регистрация:
    15 фев 2007
    Сообщения:
    1.921
    Liam
    например теми инструкциями процессора, которые работают с "carry flag",- jc, jnc, adc, shr, shl, rcl, rcr, и т.д.
     
  8. Ra!N

    Ra!N New Member

    Публикаций:
    0
    Регистрация:
    26 окт 2006
    Сообщения:
    111
    Liam
    t00x
    ну да, самый простой вариант - например сдвигать поразрядно число x вправо, проверять текущий бит на 0 или 1 с помощью (x & 1) а потом просто среди всех последовательностей нулей выбрать наибольшую. Простое, но не очень красивое решение. Красивые в Уоррене можно найти.
     
  9. nobodyzzz

    nobodyzzz New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2005
    Сообщения:
    475
    так Уорена еще не обзывали =)))
     
  10. Ra!N

    Ra!N New Member

    Публикаций:
    0
    Регистрация:
    26 окт 2006
    Сообщения:
    111
    тьфу, я имел ввиду Warren (Уоррен), низнаю почему-то моя память вернула Waller (Уоллер). Простите :)
     
  11. Liam

    Liam New Member

    Публикаций:
    0
    Регистрация:
    3 ноя 2008
    Сообщения:
    7
    Спасибо. А там же весь код на С написан. Мне бы на асме примеры посмотреть...
     
  12. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    берешь IDA и... о чудо. откомпилированный код на С превращается в асм!
     
  13. Ra!N

    Ra!N New Member

    Публикаций:
    0
    Регистрация:
    26 окт 2006
    Сообщения:
    111
    не язык главное! там могли бы и на паскале, и на ассемблере-Z80 и на MIX написать - главное алгоритм! Просто каждый автор выражает алгоритм так, как ему удобней.
    суть лобового варианта я уже описал
    Код (Text):
    1.   mov ax,[x]
    2. next_bit:
    3.   test ax,1
    4.   jz count_zeros
    5.   shr ax,1
    6.   jmp next_bit
    7. count_zeros:
    8.   <считаем длину 0-ой цепочки (тоже по 1 биту прокручиваем),
    9. когда встретится бит 1, то сравниваем полученную длину с min_len,
    10. если больше, то заменяем min_len. Идем к next_bit. Еще, конечно
    11. надо проверять сколько битов уже просмотрели, когда будет 16
    12. то  все, результат будет min_len>
    13.  
    14. min_len db 0
     
  14. nobodyzzz

    nobodyzzz New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2005
    Сообщения:
    475
    Liam
    вообщем накидал он нечего делать =)
    Код (Text):
    1.       rdtsc
    2.       xor edx, edx
    3.       xor ecx, ecx
    4. @@:   shr eax, 1
    5.       jz @F
    6.       sbb ebx, ebx
    7.       not ebx
    8.       and ebx, 1
    9.       add edx, ebx
    10.       test ebx, ebx
    11.       jnz @B
    12.       cmp ecx, edx
    13.       cmovb ecx, edx
    14.       xor edx, edx
    15.       test eax, eax
    16.       jnz @B
    17. @@:
    вроде работает
     
  15. Ra!N

    Ra!N New Member

    Публикаций:
    0
    Регистрация:
    26 окт 2006
    Сообщения:
    111
    nobodyzzz
    угу, только Liam'у вроде надо на 16 битах. Но вообще менять мало - убрать "e" у регистров, и заменить cmovb.
     
  16. KozzyKoder

    KozzyKoder New Member

    Публикаций:
    0
    Регистрация:
    4 окт 2008
    Сообщения:
    12
    Как в Линукс ввести строчку с клавиатуры? Компилятор GCC. Как выделять память для этого?
     
  17. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    ну cmovb не нада убирать, она и на 16 битных регистрах работает
     
  18. meduza

    meduza New Member

    Публикаций:
    0
    Регистрация:
    15 авг 2008
    Сообщения:
    212
    max7C4
    только на P6+

    KozzyKoder
    gets(), память - можно в стеке, можно malloc'ом
     
  19. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    meduza
    во время 9-12 поколения процов стыдно говорить о 1-5, хотя и забывать не стоит
    я конечно же понимаю, что мои проги должны выполняться на большинстве моих компов, но не на всех т.к. выдержать совместимость с брендовым x80186 или i486DX2 довольно сложно.
     
  20. meduza

    meduza New Member

    Публикаций:
    0
    Регистрация:
    15 авг 2008
    Сообщения:
    212
    max7C4
    согласен, но у Liam'а это просто лаба в универе, а насколько я знаю, там до сих пор пишут программы для 286-х или около того (если на асме)