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

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

  1. Mikem

    Mikem New Member

    Публикаций:
    0
    Регистрация:
    23 дек 2009
    Сообщения:
    1
    Помогите пожалуйста решить несколько задач на masm32. Очень надо - иначе недопуск к экзамену :\

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

    2. Дана строка. Если строка начинается с буквы А, вывести ее на экран, в противном случае вывести сообщение о неправильных данных

    3. Составить программу вычисления суммы первых 5-ти членов последовательности: x{n}=n*(n+2)*(n+3)

    4. Дан массив из 6 элементов. Подсчитать, сколько раз в нем встречается минимальное по величине число

    И если можно - с комментариями. Выручайте, очень прошу
     
  2. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    1)
    Код (Text):
    1. ;выбираем наименьшую из длин массивов (чтобы не уйти за пределы буфера)
    2. mov ecx, masA_len
    3. cmp ecx, masB_len
    4. jae no
    5. mov ecx, masB_len
    6. no:
    7. ;массивы A и B исходные, массив R результирующий
    8. mov esi, offset masA
    9. mov edi, offset masB
    10. mov ebx, offset masR
    11. ;длина результирующего массива
    12. xor edx, edx
    13. lp:
    14. ;пока не равно или ecx>0 сравниваем элементы массивов
    15. cld
    16. repnz cmpsb/w/d; в зависимости от длины элементов массивов оставить b,w или d (далее соответственно)
    17. jnz ne
    18. ;если нашли равные элементы записываем в результирующий массив и считаем количество элеметов в нем
    19. mov al/ax/eax, [esi-1/2/4]
    20. mov [ebx+edx/edx*2/edx*4], al/ax/eax
    21. inc edx
    22. ne:
    23. ;пока ecx>0 продолжаем мотать цикл
    24. test ecx, ecx
    25. jnz lp
    26. ;нашли все совпадения и выводим это на экран
    27. mov ebx, edx
    28. mov esi, offset masR
    29. ; буфер для результирующей строки
    30. mov edi, offset buffer
    31. aa:
    32. ;взять следующий элемент
    33. lodsb/w/d
    34. movzx eax, al/ax
    35. ;перевести число в строку и дописать его в буфер
    36. push eax
    37. push offset format_string
    38. push edi
    39. call wsprintfA
    40. add edi, eax
    41. add esp, 12
    42. dec ebx
    43. jnz aa
    44. ;вывести буфер на экран
    45. push MB_OK
    46. push offset caption
    47. push offset buffer
    48. push HWND_DESKTOP
    49. call MessageBoxA
    2
    Код (Text):
    1. ; проверить первый байт строки на равенство 'A'
    2. mov ebx, offset string
    3. cmp byte ptr [ebx], 'A'
    4. jz ok
    5. ; если не равен поменять ее на сообщение о не правильных данных
    6. mov ebx, offset error_message
    7. ok:
    8. ; вывести на экран
    9. push MB_OK
    10. push offset caption
    11. push ebx
    12. push HWND_DESKTOP
    13. call MessageBoxA
    3.
    Код (Text):
    1. ; число необходимых элементов последовательности
    2. mov ecx, 5
    3. ; массив с посчитанными элементами (64-битные значения)
    4. mov edi, offset buffer
    5. lp:
    6. ; получить номер иттерации (начиная с 0)
    7. lea eax, [ecx-5]
    8. neg eax
    9. ;посчитать n,n+2,n+3
    10. lea edx, [eax+2]
    11. lea ebx, [eax+3]
    12. ;n*(n+2)
    13. mul edx
    14. ;(n*(n+2)) * (n+3)
    15. mul ebx
    16. ;сохранить элементы в массив
    17. stosd
    18. mov eax, edx
    19. stosd
    20. ;мотать цикл
    21. loop lp
    4.
    Код (Text):
    1. ;массив с элементами
    2. mov esi, offset mas
    3. ;длина массива
    4. mov ecx, 6
    5. ;число совпадений
    6. xor eax, eax
    7. ;индекс минимального элемента
    8. mov edi, esi
    9. lp:
    10. ;сравнить минимальный с текущим
    11. push edi
    12. cmpsb/w/d
    13. pop edi
    14. ;если больше, то пропустить
    15. ja no
    16. ;если равен, то посчитать
    17. jz ok
    18. ;если меньше, то сбросить счетчик и посчитать
    19. xor eax, eax
    20. ok:
    21. inc eax
    22. no:
    23. ; мотать цикл
    24. loop lp
     
  3. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    З.Ы. на ошибки и опечатки проверяйте сами, но вопросы задавать можно
     
  4. Patch

    Patch New Member

    Публикаций:
    0
    Регистрация:
    3 янв 2010
    Сообщения:
    3
    помогите допуститься к экзамену. есть значит пару простых заданий по masm32, но я не пишу на нем(((
    №1:Напишите программу с использованием команды сдвига для умножения регистра AL на 12.
    ...остальные пока не могу выложить, позже будут
     
  5. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    mov ah, al
    shl al, 2
    shl ah, 3
    add al, ah
     
  6. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    mov ah, al
    shl al, 1
    add al, ah
    shl al, 2
     
  7. KeSqueer

    KeSqueer Сергей

    Публикаций:
    0
    Регистрация:
    19 июл 2007
    Сообщения:
    1.183
    Адрес:
    Москва
    И еще 3 варианта:
    Код (Text):
    1. shl     al, 2
    2. mov     ah, al
    3. shl     ah, 1 ; или add al, al или add al, ah
    4. add     al, ah
     
  8. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    KeSqueer
    в моем случае 1 вариант это al*8+al*4, а второй вариант (al*2+al)*4
    ваш же третий вариант лишь рекомбинация команд моего второго варианта (al*4*2)+al*4
     
  9. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    а вообще shl ax, 8/aad 12
     
  10. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    тоже вариант, но это без команды сдвига
    mov ah, al
    aad 11
     
  11. KeSqueer

    KeSqueer Сергей

    Публикаций:
    0
    Регистрация:
    19 июл 2007
    Сообщения:
    1.183
    Адрес:
    Москва
    max7C4
    Согласен с тем что это выполняет ту же задачу, но инструкции-то в другом порядке :)
    aad 12/aad 11 - MASM не позволяет указывать базу, разве что использовать макросы с db.
     
  12. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    насколько я помню masm32 позволял
     
  13. Patch

    Patch New Member

    Публикаций:
    0
    Регистрация:
    3 янв 2010
    Сообщения:
    3
    спасибо, еще такую если можно..
    Какое значение будет в DX после выполнения
    MOV DX,5
    STC
    MOV AX,10h
    ADC DX, AX.
     
  14. max7C4

    max7C4 New Member

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

    Patch New Member

    Публикаций:
    0
    Регистрация:
    3 янв 2010
    Сообщения:
    3
    спасибо выручил)))
     
  16. Dj_Maestro

    Dj_Maestro New Member

    Публикаций:
    0
    Регистрация:
    5 янв 2010
    Сообщения:
    4
    Добрый день!!! Нужна помощь в написании программы на С++ которая реализует роботу части алгоритма 2-го прохода ассемблера. Естественно за вознаграждение. Кто знает как как работает 2-х проходный ассемблер и умеет писать на С++ плз напишите на асю 354-342-918. Заранее благодарен!
     
  17. Asechka

    Asechka New Member

    Публикаций:
    0
    Регистрация:
    6 янв 2010
    Сообщения:
    1
    Доброго времени суток всем!

    Я была бы очень признательна, если бы Вы мне помогли вот с такой вещью..в асме я новичок..мне надо написать на нем аналог od linux'a под виндой. Что такое od я понимаю, а вот с чего начать, к сожалению не знаю.

    Буду весьма признательна за помощь)
     
  18. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    Dj_Maestro Для этого тут раздел COMMERCE есть. Или у вас с русским плохо?
     
  19. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    Asechka
    использовать сорцы od.
    для Винды переделывать скорее всего почти ничего не придётся, ибо crt.
     
  20. Oliger

    Oliger New Member

    Публикаций:
    0
    Регистрация:
    7 янв 2010
    Сообщения:
    2
    TASM

    Доброго времени суток! помогите решить задачу:

    Напишите программу, которая запрашивает дату между 1980 и 2099 годами. Программа должна определять день недели, соответствуещий дате, и выводить результат на экран.

    Вобщем идея такова: получаем дату с клавиатуры, устанавливаем ее как системную, узнаем какой это день недели при помощи функции 2fH прерывания INT 21h, потом возвращаем ранее сохраненную системную дату.

    Вот мой гавнокод, пока пытаюсь установить дату )) ниче не выходит :

    Код (Text):
    1. .model small
    2. .stack 100h
    3. .data
    4. dm db 3
    5. dr db ?
    6. d db 3 dup (?)
    7. m db 3,?,3 dup (?)
    8. g dw 5,?,5 dup (?)
    9. den db ?
    10. news db 0ah,0dh,'$'
    11. mes_d db 'vvedite den -> $'
    12. mes_m db 0ah,0dh,'vvedite mesyac -> $'
    13. mes_g db 0ah,0dh,'vvedite god -> $'
    14.  
    15. .code
    16. met:    mov ax, dgroup
    17.     mov ds, ax
    18.     mov ax, 0003h
    19.     int 10h
    20.  
    21.  
    22. mov dx, offset mes_d
    23. mov ah, 09h
    24. int 21h
    25.  
    26.  
    27. mov ah,0ah
    28. lea dx,dm
    29. int 21h
    30.  
    31. mov ax,0
    32. mov bx,0
    33. mov cx,0
    34. mov cl,dr
    35. mov di,0
    36.  
    37. n: mov bl, byte ptr d[di]  ; тут пытаюсь преобразовать строку
    38. sub bl, 30h-48
    39. mul d
    40. add ax,bx
    41. inc di
    42. loop n
    43.  
    44. mov bx, 2
    45. cwd
    46. div bx
    47.  
    48. mov cx,0
    49. mov dx,0
    50. mov den,al       ; как я понимаю преобразованная строка должна быть в АЛ ??? вот пока сдесь главный вопрос
    51. ;;;;;;;;;;;;;;;;;;;;;;;;;
    52. ;;;;;;;;;;;;;;;;;;;;;;;;;
    53. mov dx, offset mes_m
    54. mov ah,09h
    55. int 21h
    56.  
    57. mov dx, offset m
    58. mov ah,0ah
    59. int 21h
    60.  
    61.  
    62. mov dx, offset mes_g
    63. mov ah,09h
    64. int 21h
    65. mov dx, offset g
    66. mov ah, 0ah
    67. int 21h
    68.  
    69.  
    70.  
    71. mov dl,den ;set date
    72. mov dh, 07
    73. mov cx, 1998
    74. mov ah,2bh
    75. int 21h
    76.  
    77. ;mov ah,2ch ;get date
    78. ;int 21h
    79.  
    80.         mov ah, 08h
    81.     int 21h
    82.     mov ax, 4c00h
    83.     int 21h
    84. end met
    Жду помощи камрады! в долгу не останусь!! ICQ 808-968