1. Если вы только начинаете программировать на ассемблере и не знаете с чего начать, тогда попробуйте среду разработки ASM Visual IDE
    (c) на правах рекламы
    Скрыть объявление

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

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

  1. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.298
    Адрес:
    Ukraine
    Ребята, кто не хочет учиться, но сессия поджимает и надо как-то сдавать — пишите задания сюда, есть шанс, что вам помогут.

    Создание тем, касающихся лабораторных работ или других учебных заданий, в других местах запрещается. Темы будут удалены без предупреждения, авторы — занесены в "черный список".

    Прежде чем задавать свой вопрос, попробуйте поискать ответ на него по форуму, посмотреть в FAQ или в google. Если будет замечен вопрос, ответ на который есть на этом форуме, он будет удалён. Если вы наткнулись на схожую проблему, но она недостаточно была освещена, укажите, что вы нашли предыдущие обсуждения. И учитесь искать. Отговорки вида "я искал, но не нашёл" таковыми не считаются.

    По поводу оформления ваших вопросов.
    1. Каждый новый вопрос выделять заглавием, можно жирным, но только тему вопроса (пример: "Архивы (псевдо)", "как создать список в combobox"). Заглавия вида "Помогите чайнику написать программу =)" таковыми не считаются, придумайте что-нибудь более осмысленное, другим будет более удобно ориентироваться в вопросах.

    2. Оформляйте текст сообщения. Если приводите код, то выделяете его тегом [ code ]. Если цитируете, выделяйте цитату тегом [ quote ]. Большие цитаты сообщений (больше 1-2 строк) не допускаются и будут удалены.

    3. Избегайте лишних эмоций, проявляемых в длинных смайлах, больших буквах или большом количестве восклицательных знаков. Это затрудняет чтение ваших сообщений и вряд ли поможет вам.

    4. В каждом ответе указывается адресат, которому вы отвечаете. Ссылки на ответы других людей оформляются тегом [ url ].

    5. Транслит разрешён, но осмысление его другими лежит на вашей ответственности.


    Данные рекомендации дополняют Правила форума и являются обязательными для всех, кто оставляет сообщения в этой теме.

    Удачи.
     
  2. y(x)

    y(x) New Member

    Публикаций:
    0
    Регистрация:
    8 ноя 2006
    Сообщения:
    6
    почему число -1146901283528*12252240/8 не влазиет в __int64 ?
    printf("%I64dq",d[j].c*nok/(n-j+2)); дает 253149217793552080q хотя должно быть -1756513722761637840
    странно ведь оно меньше по модулю чем (2^64)/2
     
  3. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    y(x)
    Все должны верить на слово, что n-j+2 == 8, что массив d обьявлен как __int64 и т.д. ?
     
  4. r90

    r90 New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2005
    Сообщения:
    898
    потому что -1146901283528*12252240 не влазит:
    1146901283528*12252240 / 2^63 == 1.52353279537501502816, то есть
    1146901283528*12252240 > 2^63.
     
  5. y(x)

    y(x) New Member

    Публикаций:
    0
    Регистрация:
    8 ноя 2006
    Сообщения:
    6
    r90
    и что делать? хотя вроде -1146901283528*(12252240/8) дает верный результат...
    но другие значения не влазиют =)
    есть тип большого диапазона чем __int64?
     
  6. y(x)

    y(x) New Member

    Публикаций:
    0
    Регистрация:
    8 ноя 2006
    Сообщения:
    6
    Quantum
    ага =)
     
  7. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.298
    Адрес:
    Ukraine
    y(x)
    Возьми библиотеку для вычислений с большими числами, либо напиши свои алгоритмы, либо RtlExtendedIntegerMultiply/RtlExtendedLargeIntegerDivide.
     
  8. afybc

    afybc New Member

    Публикаций:
    0
    Регистрация:
    30 июн 2006
    Сообщения:
    73
    Головоломка на Prolog'е
    К берегу реки подошли 3 пары (мистер и миссис Смит, мистер и миссис Джонс и мистер и миссис Кейн). Им необходимо переправиться на другой берег. У берега оказалась двухместная лодка. Чтобы головоломка не решалась очень просто, мужья оказались настолько ревнивы, что не могут оставить свою половину на берегу в обществе других мужчин, а тем более переправляться на другой берег в лодке с другим мужчиной.

    Их жены также не могут оставить своих мужей в обществе других женщин, за которыми бы не приглядывали их мужи. В результате им приходится много работать веслом, чтобы переправиться на другой берег.

    С помощью поиска в пространстве состояний найти решение данной головоломки.

    Как говорится: "Помоги себе сам."
    Код (Text):
    1. % предикат хранит в виде факта список (множество) пар
    2. family(['Джонс','Кейн','Смит']).
    3.  
    4.  
    5. % предикат выдает истину, если список пуст
    6. empty([]).
    7.  
    8.  
    9. % предикат меняет положение лодки
    10. % inverse(A,B)
    11. % A - текущее положение лодки
    12. % B - положение лодки на противоположном берегу
    13. inverse(left,right).
    14. inverse(right,left).
    15.  
    16.  
    17. % предикат выдает множество мужчин/женщин на противоположном берегу
    18. inverseset(Set1,Set2):-
    19. family(Set),
    20. subtract(Set,Set1,Set2).
    21.  
    22.  
    23. % предикат описывает текущую ситуацию, а именно положение лодки и
    24. % кто из мужей и жен находится на берегу, где лодка
    25. % sostoyanie(НаКакомБерегуЛодка,
    26. %       МножествоМужейНаТомБерегуГдеЛодка,
    27. %       МножествоЖёнНаТомБерегуГдеЛодка)
    28.  
    29.  
    30. % предикат описывает недопустимые ситуации
    31. % dopustimo(sostoyanie(Boat,MSet,WSet))
    32. % Boat - положение лодки
    33. % MSet - МножествоМужейНаТомБерегуГдеЛодка,
    34. % WSet - МножествоЖёнНаТомБерегуГдеЛодка)
    35. dopustimo(sostoyanie(_,MSet,WSet)):-
    36. subtract(WSet,MSet,Set2), not(empty(Set2)),
    37. %если на берегу есть женщины без мужей
    38. subtract(MSet,WSet,Set3), not(empty(Set3)). %и есть чужие мужчины
    39.  
    40.  
    41. % предикат задает возможные варианты переправки
    42. % людей на противоположный берег
    43. % next(sostoyanie1, sostoyanie2)
    44. % sostoyanie1 - текущее состояние
    45. % sostoyanie2 - полученное состояние
    46.  
    47. % переправляем семейную пару
    48. next(sostoyanie(B1,MSet1,WSet1), sostoyanie(B2,MSet2,WSet2)):-
    49. member(X,MSet1), %выбираем некоторого мужчину
    50. member(X,WSet1), %проверяем, есть ли у него на берегу жена
    51. %переправляем их на противоположный берег
    52. inverseset(MSet1,MSet),
    53. %получаем множество мужчин на противоположном берегу
    54. merge_set(MSet,[X],MSet2), %добавляем к нему выбранного мужчину
    55. inverseset(WSet1,WSet),
    56. %получаем множество женщин на противоположном берегу
    57. merge_set(WSet,[X],WSet2), %добавляем к нему жену выбранного мужчины
    58. inverse(B1,B2). %меняем состояние лодки
    59.  
    60. % переправляем одного мужчину
    61. next(sostoyanie(B1,MSet1,WSet1), sostoyanie(B2,MSet2,WSet2)):-
    62. member(X,MSet1), %выбираем некоторого мужчину
    63. % переправляем его на противоположный берег
    64. inverseset(MSet1,MSet),
    65. % получаем множество мужчин на противоположном берегу
    66. merge_set(MSet,[X],MSet2), %добавляем к нему выбранного мужчину
    67. inverseset(WSet1,WSet2),
    68. % получаем множество женщин на противоположном берегу
    69. inverse(B1,B2). %меняем состояние лодки
    70.  
    71. % переправляем двух мужчин
    72. next(sostoyanie(B1,MSet1,WSet1), sostoyanie(B2,MSet2,WSet2)):-
    73. member(X,MSet1), %выбираем некоторого мужчину
    74. delete(MSet1,X,MSet), %удаляем его из множества
    75. member(Y,MSet), %выбираем еще одного мужчину
    76. % переправляем их на противоположный берег
    77. inverseset(MSet1,MSet01),
    78. merge_set(MSet01,[X],MSet02),
    79. merge_set(MSet02,[Y],MSet2),
    80. inverseset(WSet1,WSet2),
    81. inverse(B1,B2). %меняем состояние лодки
    82.  
    83.  
    84. % предикат выполняет поиск решения в пространстве состояний
    85. % find(State1,State2,List1,List2)
    86. % State1 - исходное (текущее) состояние
    87. % State2 - искомое состояние
    88. % List1 - список хранит состояния, пройденные при поиске решения от исходного
    89. %     до текущего состояния
    90. % List2 - найденное решение - список изменения состояний от %исходного до искомого
    91. find(State1,State1,List,List):- !.
    92. find(State1,State2,List,Res):-
    93. next(State1,sostoyanie(B2,MSet2,WSet2)),
    94. % выполняем одно из возможных перемещений лодки
    95. not(member(sostoyanie(B2,MSet2,WSet2),List)),
    96. %найденного состояния еще не было
    97. not(dopustimo(sostoyanie(B2,MSet2,WSet2))),
    98. %проверяем, получили ли допустимое состояние
    99. length(List,Len),
    100. Len<12,  %ограничиваем "глубину" поиска
    101. find(sostoyanie(B2,MSet2,WSet2),State2,[sostoyanie(B2,MSet2,WSet2)|List],Res). %продолжаем поиск
    102.  
    103.  
    104. % предикат запускает поиск решения
    105. find(Res):-
    106. family(Set),
    107. find(sostoyanie(left,Set,Set),   %исходное состояние
    108. sostoyanie(right,Set,Set),  %искомое состояние
    109. [sostoyanie(left,Set,Set)],List),
    110. reverse(List,Res).
    111.  
    112.  
    113. % предикат распечатывает найденное решение
    114. printl([]):-
    115. write('Все пары переправлены'),nl.
    116. printl([sostoyanie(Boat,MSet,WSet)|List]):-
    117. write('Лодка - '),
    118. write(Boat),
    119. write('  мужчины - '),
    120. write(MSet),
    121. write('  женщины - '),
    122. write(WSet),nl,
    123. printl(List).
    124.  
    125.  
    126. % запускает поиск решения и выводит результат на экран
    127. start:-
    128. find(Res),
    129. printl(Res).
     
  9. Trunk

    Trunk New Member

    Публикаций:
    0
    Регистрация:
    18 ноя 2006
    Сообщения:
    1
    Ввод многозначного десятичного числа
    Требуется использовать функцию:
    Код (Text):
    1. mov  ah , 1
    2. int    21h
    Она возвращает ASCII-код числа... Как получить само число?
    Учитывая, что символы вводятся в AL как сделать следующее:
    Код (Text):
    1. Y =  Y* X  +  An
    Y - вводимое число
    X = 10
    An - цифры вводимого числа

    Спасибо.
     
  10. CT

    CT New Member

    Публикаций:
    0
    Регистрация:
    17 окт 2006
    Сообщения:
    72
    Trunk


    Из аски - кода получить ЦИФРУ(заметь, не число!) просто - аски код представляет собой цифру, к которой прибавлено 30h поэтому получить можно так - and AL,0Fh, только предварительно нужно убедиться, что в AL находится число между 30h и 39h.

    Остальное написано в элементарных учебниках по ассемблеру.
     
  11. CBR_R

    CBR_R New Member

    Публикаций:
    0
    Регистрация:
    11 окт 2006
    Сообщения:
    2
    Проблема такого рода: нужно получить звук из звуковухи под DOS, при программировании DSP контролеера зв. карты через порты 220h- 22Еh - прога работает, но только под виндой, под DOS - молчит. Может проблема с портами? autoexec.bat - set blaster A220 и т.д. - прописывал. Звуковуха встроенная, realtek 850 (AC'97). Если у кого есть литература по вопросу программирования звуковых карт на асме, поделитесь пожалуйста (только кроме Зубкова, там уже смотрел).
     
  12. Naivni4eL

    Naivni4eL New Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2006
    Сообщения:
    1
    Нужна помощь. Не определился еще с темой дипломной.
    Дипломная не слишком мощная, третий курс только. Специальность - Выч маш.
    То, что выбирал, разнесли на защите темы. Теперь срок остался один день. Местность сельская, сложность в актуальности и новизне. Причем не слишком сложная нужна тема:)).
    На вас надежда.
     
  13. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.303
    Адрес:
    Fryazino
    CBR_R
    Лучше чем у Зубкова я описания не встричал. Что касается realtek зайти на сайты Intel и realtek скачать документацию. Также изучить чужии исходники( Menuet и Linux и др). Я бы начал с поиска в гугле информацию на эту тему. Ты не первый кто с такими проблемами сталкивлся, так что ответ сможешь найти.
    Заглянул на сайт realtek, там пишут что встроенные карты не содержат SB, а строчка 'BLASTER=Axxx Dx Ix Pxxx'. относится только к виндоус для того чтобы драйвер смог сэмулировать SB для дос приложений.
     
  14. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    Pavia
    Разве МенуэтОС поддерживает AC97? Там SB16 максимум поддерживается, afaik. Даже РеактОС нативно со звуком ещё не дружит. Другое дело - КолибриОС!!!
     
  15. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.303
    Адрес:
    Fryazino
    Quantum
    Судя по сайту Menuet 64 должна поддерживать
    07.11.2005 0.21 Audio wave player, programming example & mixer
    Audio driver for ac97 ( /fd/1/driver/ )
     
  16. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    Quantum
    а колибриОС разве не на MenuetOS построена?
     
  17. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    Pavia
    64ую я не тестил - не знаю. Но если в ней есть драйвер с 2005го года, то странно, что в 32й его нет. Кстати, кто-нибудь тестил этот драйвер? Или это как в Реактосе, где звук как бы есть, но на самом деле его вовсе нет? :)

    n0name
    Это больной вопрос. Скажу лишь, что в Колибри с недавних пор появился полноценный ac97 драйвер by Serge.
     
  18. Polly

    Polly New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2006
    Сообщения:
    5
    Работа с последовательностью чисел

    Здрасте.
    Значит так. В текстовом файле лежит некая последовательность чисел. Нужно:
    1. Найти сумму всех чисел
    2. Найти максимальное число
    3. Вывести на экран среднее арифметическое СУММЫ и МАКСИМАЛЬНОГО

    Помогите,пожалуйста, с процедурами нахождения суммы и максимального.
     
  19. spencer

    spencer New Member

    Публикаций:
    0
    Регистрация:
    15 авг 2005
    Сообщения:
    277
    Polly
    нахождение суммы
    Код (Text):
    1.      xor ebx, ebx
    2.              mov ecx, xxx           ;xxx - количество суммируемых чисел
    3. l1:          mov eax, [edi+ecx]
    4.              add ebx, eax
    5.              loop l1
    в edi - адрес последовательности чисел, предпологается что они уже лежат там в нужном формате и занимают по 4 байта каждое...
     
  20. Polly

    Polly New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2006
    Сообщения:
    5
    spencer

    спасибо большое, эту процедуру мы ещё вчера вечером кое-как придумали... главная проблема состоит в том, что в файле числа находятся через пробелы и энтеры... так вот нужно как-то сделать,чтобы прога понимала это и считывала правильно =( и ещё, максимальное число, я так понимаю, нужно находить через цикл со сравнением,а вот постороить его не могу... отсутствие практики с самого лета очень хорошо сказывается на мозгах ....