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

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

  1. CrazyFun

    CrazyFun New Member

    Публикаций:
    0
    Регистрация:
    26 сен 2005
    Сообщения:
    129
    Yep
    ты там ещё это. не считаешь что каждый символ должен быть хотябы 1. т.е. твоя прога проглатывает как negbi так и bbggn. из второй комбинации нужное слово не составить..
     
  2. Yep

    Yep New Member

    Публикаций:
    0
    Регистрация:
    20 дек 2007
    Сообщения:
    11
    CrazyFun
    эту проблему решил подсчетом суммы всех символов.
    теперь такие варианты как bbggn не подходят:
    Код (Text):
    1. masm
    2. model small
    3. .stack 10h
    4. .data
    5.      yep db 10,13,'Yes$'
    6.      nope db 10,13,'No$'
    7.      inp db 6,6,6 dup(?) ;вводится только 5 символов
    8.  
    9. .code
    10. start:
    11.      mov ax, @data
    12.      mov ds, ax
    13.      mov es, ax
    14.      
    15.      cld                ; установить флаг направления в сторону увеличения адресов
    16.      mov AH,0Ah         ;ввод строки с клавиатуры          
    17.      mov dx, offset inp
    18.      int 21h
    19.      
    20.      lea si, inp     ; адрес первого элемента в SI
    21.      inc si ;пропускаем два первых байта
    22.      inc si
    23.      xor bl, bl ; обнуляем сумму совпадений
    24.      xor cl, cl ; обнуляем счетчик символов
    25.      xor dl, dl
    26. Next:
    27.     inc cl ; увеличиваем счетчик итераций
    28.     cmp cl, 6 ; проверили 5ть символов, когда будет 6той
    29.     je err_ ; то идем на ошибку, если ранее не ушли на успешное завершение
    30.     lodsb           ; загрузить символ строки s1 в регистр AL
    31.     add dl, al
    32.     sub dl, 90
    33.     cmp al, 98 ; сравнение с буквой b
    34.     je summ          ;переход если равны
    35.     cmp al, 101 ; сравнение с буквой e
    36.     je summ         ;переход если равны  
    37.     cmp al, 103 ; сравнение с буквой g
    38.     je summ         ;переход если равны
    39.     cmp al, 105 ; сравнение с буквой i
    40.     je summ           ;переход если равны
    41.     cmp al, 110 ; сравнение с буквой n
    42.     je summ
    43.     jmp Next
    44. summ:
    45. ;___Отладочнай информация
    46. ;   mov ah, 02h
    47. ;   mov dl, al
    48. ;   int 21h
    49. ;   mov ah, 02h
    50. ;   mov dl, 10
    51. ;   int 21h
    52. ;   mov ah, 02h
    53. ;   mov dl, 13
    54. ;   int 21h
    55. ;___Конец отладочной информации
    56.     inc bl ;увеличиваем сумму совпавших символов
    57.     cmp bl, 5 ; если сумма совпавших символов равна 5
    58.     je exit ; то выходим
    59.     jmp Next ;иначе идем на проверку вторго символа
    60.  
    61. err_: ;сообщение об ошибке
    62.      mov ah,09h
    63.      mov dx,offset nope
    64.      int 21h
    65.      
    66.      mov ah,4ch
    67.      int 21h
    68.  
    69. exit: ;сообщение об успешном завершении
    70.     cmp dl, 67
    71.     jne err_
    72.      mov ah,09h
    73.      mov dx,offset yep
    74.      int 21h
    75.      
    76.      mov ah,4ch
    77.      int 21h
    78.  
    79.  
    80.  
    81. end start
     
  3. meri

    meri New Member

    Публикаций:
    0
    Регистрация:
    20 дек 2007
    Сообщения:
    4
    Помогите с курсовой please!!!Разработать программу, выводящую информацию об аппаратных устройствах системы(процессоре,памяти, дисковых накопителях, видеоподсистеме и т.п).[/b]
     
  4. CrazyFun

    CrazyFun New Member

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

    RamMerLabs Well-Known Member

    Публикаций:
    0
    Регистрация:
    11 сен 2006
    Сообщения:
    1.426
    meri
    поиск по сайту. в статьях есть об определении инфы о проце, оперативе и винте, если я не ошибаюсь
     
  6. murder

    murder Member

    Публикаций:
    0
    Регистрация:
    3 июн 2007
    Сообщения:
    628
    2Yep
    замени 5 операций типа
    Код (Text):
    1. cmp al,xx
    2. je summ
    на что-то вроде
    Код (Text):
    1. bt dword[mnojestvo],eax
    2. jc summ
    2meri
    Информация о процессоре выдаётся командой CPUID

    Тактовая частота измеряется по формуле op/t, где
    op - количество операций (юзай rdtsc)
    t - время

    В общем смотри исходник на FASM`е
     
  7. Mikl_

    Mikl_ New Member

    Публикаций:
    0
    Регистрация:
    14 ноя 2006
    Сообщения:
    907
    Yep
    MOV ECX,5 ;длина цепочки
    MOV ESI,OFFSET BEGIN ;в DS:ESI адрес строки "begin"
    MOV EDI,offset inp+2 ;начинаем со второго символа
    REPE CMPSB ;сравнивать, пока равны
    JNZ err_ ;
    • • • ;действия, если элементы строки совпали
     
  8. Yep

    Yep New Member

    Публикаций:
    0
    Регистрация:
    20 дек 2007
    Сообщения:
    11
    murder
    Mikl__
    Работа уже сдана, но для себя учту. = )
     
  9. Trofimof

    Trofimof New Member

    Публикаций:
    0
    Регистрация:
    23 дек 2007
    Сообщения:
    3
    [​IMG]Парни! Может кто-то подскажет вот по этому заданию... Как быть, с чего начать...? Того, кто поможет, готов отблгодарить пивом :)
     
  10. Trofimof

    Trofimof New Member

    Публикаций:
    0
    Регистрация:
    23 дек 2007
    Сообщения:
    3
    И никто даже ничего сказать не может? :dntknw:
     
  11. prokaznica

    prokaznica New Member

    Публикаций:
    0
    Регистрация:
    25 дек 2007
    Сообщения:
    1
    У меня просьба ко всем парням на этом форуме кто прочтёт, я в асемблере ничего не понимаю и не смогу никогда
    можете помочь мне и написать небольшую прогармму на асемблере которая меняет назначения клавиш esc на пробел.помогите пожалуйста
    нужен допуск к экзамену
    un4given спрашивал про программу типа этой только у него Esc на Enter
    помогите пожалуйста очень прошу
     
  12. Razmus

    Razmus New Member

    Публикаций:
    0
    Регистрация:
    27 дек 2007
    Сообщения:
    2
    Уважаемые посетители форума!!! У меня просьба ко всем, я на асемблере пишу плохо(а точьнее почьти никак), помогите написать порограмки. Очень прошу!
    Определяет сумму негативных элементов с парными индексами в пределах каждой строки и столбика
    Получилось написать для позитивных элементов с парными индексами, но правда в одномерном масиве с двухмерными у меня проблема
    Код (Text):
    1. .386
    2. .model flat, stdcall
    3. option casemap :none
    4. include masm32.inc
    5. includelib masm32.lib
    6. include user32.inc
    7. includelib user32.lib
    8. includelib kernel32.lib
    9. include C:\MASM32\MACROS\strings.mac
    10. .data
    11. x   dw 1,2,3,-4,-5,6,0,7,8,0,5,8,3
    12. length_x= ($-x)/2      
    13. .data?
    14. Buffer  db 256 dup (?)
    15. .code
    16. start:
    17.     lea ebx,x          
    18.     xor ax,ax      
    19.     xor dx,dx      
    20.     xor esi,esi    
    21.     mov ecx,length_x       
    22. m1:
    23.     test esi,1 
    24.     jnz m2     
    25.     cmp word ptr [ebx+esi*2],0   
    26.     jle m2     
    27.     add ax, word ptr [ebx+esi*2]   
    28.     adc dx,0                       
    29. m2: inc esi    
    30.     loop m1    
    31.     push dx
    32.     push ax
    33.     pop ebx    
    34.     invoke CharToOem,\
    35.         $CTA0("Сума позитивных с парными индексами: "),\
    36.         ADDR Buffer
    37.     invoke StdOut, ADDR Buffer
    38.     invoke dwtoa,ebx, ADDR Buffer
    39.     invoke StdOut,ADDR Buffer
    40.     invoke StdIn,ADDR Buffer, LENGTHOF Buffer  
    41.     ret
    42. end start
    Поиск в ряде самого длинного предложения
    эта программа для подсчета количества слов может ее можно както модифицировать.
    Код (Text):
    1. .386
    2. .model flat, stdcall
    3. option casemap :none
    4. .data      
    5. Str 1db “ASM LOST. NTL NBA”, 0
    6. .code
    7. start:
    8. lea edi,str1
    9. mov ebx,edi        
    10. mov ecx,-1
    11. xor al,al
    12. repne scasb
    13. sub edi,ebx
    14. de cedi
    15. mov esi,edi
    16. lea edi,str1
    17. mov ecx,esi
    18. xor ebx,ebx
    19. mov al,” “
    20. @@: repne scasb
    21. Inc ebx
    22. Jmp @B
    23. Dec ebx
    24. ret
    25. end start
    Определяет среднее арифметическое негативных элементов массива
    тут совсем темный лес так как нада двухмерный массив.
    Заранее спасибо!!!
     
  13. Mikl_

    Mikl_ New Member

    Публикаций:
    0
    Регистрация:
    14 ноя 2006
    Сообщения:
    907
    Razmus
    Для начала определимся с терминами
    негативные элементы - это наверное элемнты, значение которых меньше нуля?
    элементы с парными индексами в пределах каждой строки и столбика - это что (по-русски пожалуйста) элементы с четными индексами, как в примере или элементы у которых i=j?
    пересекается с первой задачей - ищете отрицательные элементы, подсчитываете их число и сумму таких элементов, затем делите одно на другое и ответ готов. Для ассемблера задача работы с матрицами облегчается тем, что на самом деле двумерный массив представляет в памяти линейный т.е. матрица
    | a b с |
    | d e f | в памяти a b с d e f g h i поэтому поиск суммы отрицательных элементов
    | g h i |
    Код (Text):
    1.  mov ecx,n*m-1; количество элементов в матрице без первого элемента
    2. mov sum,0
    3. mov count,0
    4. mov edi,offset matrix; matrix - адрес первого элемента
    5. a1: mov al,[edi+ecx]; получаем очередной элемент
    6.      cmp al,0
    7.       jge a2; если больше или равно нулю - к следующему элементу
    8.       add sum,al
    9.       inc count
    10. a2: dec ecx; переходим к следующему элементу
    11.       jnz a1; если не первый элемент - начинаем все с начала
    12.       mov edx,0
    13.       mov eax,sum
    14.       idiv count; в EAX среднее арифметическое
    Наверное предложение это ряд символов ограниченных с одной стороны началом строки или точкой, а с другой стороны концом строки или точкой
    Код (Text):
    1. .data
    2. string db "Мама мыла Раму. Мама мыла Кришну. Харе Рама, харе Кришна. Харя Рамы шире Кришны."
    3. len_string equ $-string
    4. max dd 0
    5. addr_max dd string
    6. .code
    7.      mov al,'.'
    8.      mov ecx,len_string; в ЕСХ длина строки
    9.      mov edi,offset string; адрес первого символа строки
    10. a1: mov ebx,edi ; в ЕВХ адрес начала предложения
    11.       repne scasb ;будем искать символ точки или конец строки
    12.       mov edx,edi ; в edx адрес последнего символа предложения+1
    13.       sub edx,ebx; получили длину предложения+1
    14.       dec edx      
    15.       cmp edx,max
    16.       jbe a2
    17.       mov max,edx
    18.       mov addr_max,ebx
    19. a2: cmp ecx,0
    20.       ja a1; если просмотрели не всю строку - начинаем все с начала
     
  14. Yep

    Yep New Member

    Публикаций:
    0
    Регистрация:
    20 дек 2007
    Сообщения:
    11
    Вернулось все ко мне назад = (.
    теперь нужно переделать так. чтобы ограничения на ввоимую строку в 5 символов небыло. тоесть нужно чтобы прога проглатывала вот такие строки fdghbhefiugnhdiugsds. и сравнивать нужно введенную строку с эталонной.
    пока написал вот что (неработает):
    Код (Text):
    1. masm
    2. model small
    3. .stack 10h
    4. .data
    5.     yep db 10,13,'Yes$'
    6.     nope db 10,13,'No$'
    7.     et db 'begin$'
    8.     etlen = $ - et
    9.     len = $ - inp
    10.     inp db 50,?,50 dup(?) ; вводится только 5 символов
    11.  
    12. .code
    13. start:
    14.     mov ax, @data
    15.     mov ds, ax
    16.     mov es, ax
    17.      
    18.     cld         ; df в сторону увеличения адресов
    19.     mov AH,0Ah      ; ввод строки с клавиатуры          
    20.     mov dx, offset inp
    21.     int 21h
    22.      
    23.     lea si, inp ; адрес первого элемента в SI
    24.     inc si      ; пропускаем два первых байта
    25.  
    26.     mov di, offset et ; в di адрес первогоэлемента эталонной
    27.  
    28. xor bl, bl
    29. mov cl, len ; в cl длина введенной
    30. NEXT:
    31. cmp dl, cl ; если кол-во прошедших символов равно длине
    32. je end_ ; то выходим из этого цикла
    33.  
    34.  
    35. push ax
    36. push bx
    37. push cx
    38. push dx
    39. ; цикл по проверке всех символов эталонной с одним символом введенной
    40. mov cl, etlen
    41. xor dl, dl
    42. xor bl, bl
    43. COMP1:
    44. cmp dl, cl ; если кол-во прошедших символов равно длине
    45. je next ; то выходим из этого цикла
    46. mov al, [di] ; эталонный
    47. mov bl, [si] ; введенный
    48. inc di
    49. inc dl ;  счетчик прошедших символов
    50. cmp al, bl ; сравниваем элементы
    51. je summ ; если совпадают то идем на сумму
    52. jmp COMP1 ; если нет, то проверяем очередной символ
    53. pop dx
    54. pop cx
    55. pop bx
    56. pop ax
    57.  
    58. summ:
    59. add bl, 1
    60. cmp bl, cl ; если проверены
    61. je end_
    62. jmp next
    63.  
    64. end_:
    65. mov cl, etlen
    66. cmp bl, cl
    67. je exit
    68.  
    69.  
    70. err_: ;сообщение об ошибке
    71.      mov ah,09h
    72.      mov dx,offset nope
    73.      int 21h
    74.      
    75.      mov ah,4ch
    76.      int 21h
    77.  
    78. exit: ;сообщение об успешном завершении
    79.  
    80.      mov ah,09h
    81.      mov dx,offset yep
    82.      int 21h
    83.      
    84.      mov ah,4ch
    85.      int 21h
    86.  
    87.  
    88. end start
    Где у меня ошибка?
     
  15. CrazyFun

    CrazyFun New Member

    Публикаций:
    0
    Регистрация:
    26 сен 2005
    Сообщения:
    129
    яб использовал scasb для проверки есть ли нужные символы в строке. получится просто и ошибицо трудно.
     
  16. Yep

    Yep New Member

    Публикаций:
    0
    Регистрация:
    20 дек 2007
    Сообщения:
    11
    CrazyFun
    сейчас попробую. один день остался = (
     
  17. Yep

    Yep New Member

    Публикаций:
    0
    Регистрация:
    20 дек 2007
    Сообщения:
    11
  18. Razmus

    Razmus New Member

    Публикаций:
    0
    Регистрация:
    27 дек 2007
    Сообщения:
    2
    Mikl__
    Огромное спасибо за помощь!
    Но вынужден просить снова. Не могли бы вы более побробно расписать (Определить среднее арифметическое негативных элементов массива), а то что-то я не совсем разбираюсь в ней.
    я попробовал дописать но у меня не работает. подскажите в чем проблема.
    Код (Text):
    1. .386
    2. .model flat,stdcall
    3. option casemap :none
    4. .data
    5. x dw -1,2,3,-4
    6. n=($-x)/type x
    7.   dw 5,-6,7,-8,
    8.      9,10,-11,12
    9. m=($-x)/(n*type x)
    10. sum dd ?
    11. count dw ?
    12. matrix dw ?
    13. .code
    14. start:  
    15. mov ecx,n*m-1; количество элементов в матрице без первого элемента
    16. mov sum,0
    17. mov count,0
    18. mov edi,offset matrix; matrix - адрес первого элемента
    19. a1: mov eax,[edi+ecx]; получаем очередной элемент
    20.      cmp al,0
    21.       jge a2; если больше или равно нулю - к следующему элементу
    22.       add sum,eax
    23.       inc count
    24. a2: dec ecx; переходим к следующему элементу
    25.       jnz a1; если не первый элемент - начинаем все с начала
    26.       mov edx,0
    27.       mov eax,sum
    28.       idiv count; в EAX среднее арифметическое
    29.       ret
    30. end start
    (Определить сумму негативных элементов с парными индексами в пределах каждой строки и столбика)
    негативные элементы - это значение которых меньше нуля, а элементы с парными индексами в пределах каждой строки и столбика - это элементы с четными индексами, как в примере
    Заранее спасибо.
     
  19. unforgiven

    unforgiven New Member

    Публикаций:
    0
    Регистрация:
    15 дек 2007
    Сообщения:
    18
    хелп ми ))
    помогите на Clips прогу написать - сокобан
     
  20. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    unforgiven
    какое отношение Clips имеет к асму?
    Ты открой шаражку, принимай заказы на курсовые и дипломные(не родешиви), а
    делать мы будем, т.к. зачем тебе этим заниматься! Ты ж постить умеешь!!!
    Ты бы если что не понял и конкретно спросил тебе бы и ответили.
    А так тебе же просто перекантоваться на халяву надо;)