Вывести количество четных символов в массиве из 20 чисел. (Код есть) - Assembler

Узнай цену своей работы

Формулировка задачи:

Добрый день, товарищи! Нужно вывести количество четных символов в массиве из 20 чисел. Код есть, но почему то, когда я запускаю батник создается только *LST *MAP, а *EXE файла нет. В чем проблема, кто подскажет? Буду очень благодарен! В ассемблере разбираюсь не очень хорошо
Листинг программы
  1. DATA SEGMENT ; Открыть сегмент данных
  2. MAS DW 1,2,-3,4,5,6,7,-8,9,10,11,-12,13,14,15,-16,17,18,19,20 ; Определить массив из 20 чисел
  3. N DW (?) ; Определить байтовую переменную N
  4. N_ASCII DB 'Kolichestvo chetnih chisel v massive ='; Определить массив символов
  5. DATA ENDS ; Закрыть сегмент данных
  6. STK SEGMENT ; Открыть сегмент стека
  7. DB 100 DUP (?) ; Определить стек длиной 100 байт
  8. STK ENDS ; Закрыть сегмент стека
  9. ASSUME DS:DATA, CS:CODE, SS:STK ; Задать соответствия сегментов
  10. CODE SEGMENT ; открыть сегмент кода
  11. START:
  12. MOV AX, DATA ; инициализировать
  13. MOV DS, AX ; сегментный регистр DS
  14. MOV CX, 20 ; Задать счетчик для цикла
  15. MOV SI, 00 ; Задать счетчик для массива MAS
  16. MOV DI, 00 ; Занести в BL значение 0
  17. MET1:
  18. MOV AX, MAS[SI] ; Занести в AX SI-ый элемент массива
  19. MAS
  20. AND AX, 1 ; логическое AND для числа и единицы
  21. ADD SI, 2 ; SI := SI + 2, Элемент массива MAS +1
  22. CMP AX, 0 ; Сравнить значение остатка с 0
  23. JZ MET2 ; Если остаток равен 0, перейти к MET2
  24. LOOP MET1 ; CX := CX - 1, перейти к метке MET1
  25. JMP EXIT ; перейти к метке EXIT
  26. MET2:
  27. ADD DI, 01 ; Добавить единицу к BL
  28. SUB CX, 01 ; Отнять от CX единицу
  29. CMP CX, 00 ; Сравнить CX c 00
  30. JZ EXIT ; Если счетчик цикла =0, перейти к EXIT
  31. JMP MET1 ; Вернуться к метке MET1
  32. EXIT:
  33. MOV N, DI ; N := (DI)
  34. CMP DI, 10 ; сравнить N и число 10
  35. JC MET3 ; если (DI) < 10 перейти к MET3
  36. MOV AX, N ; занести значение N в AX
  37. MOV BL, 10 ; Занести в BL делитель равный 10
  38. DIV BL ; разделить (AX) на 10
  39. MOV DH, AH ; Занести в DH остаток от деления
  40. ADD AX, 30H ; Получить из числа символ
  41. MOV N_ASCII[39], AL ; занести в N_ASCII
  42. ADD DH, 30H ; Получить из числа символ
  43. MOV N_ASCII[40], DH ; занести в N_ASCII
  44. MOV N_ASCII[41], '$' ; добавить к N_ASCII конец строки
  45. MOV AH,09h ; вывести N_ASCII
  46. MOV DX, offset N_ASCII ; указав смещение в DX
  47. INT 21h ; на экран
  48. EXIT2:
  49. MOV AX, 4C00H ; Корректно завершить
  50. INT 21H ; программу
  51. MET3:
  52. MOV AX, DI ; занести значение DI в AX
  53. ADD AX, 30H ; Получить из числа символ
  54. MOV N_ASCII[39], AL ; добавить к N_ASCII конец строки
  55. MOV N_ASCII[40], '$' ; добавить к N_ASCII конец строки
  56. MOV AH,09H ; вывести N_ASCII
  57. MOV DX, offset N_ASCII ; указав смещение в DX
  58. INT 21h ; на экран
  59. JMP EXIT2 ; перейти к метке EXIT2
  60. CODE ENDS ; закрыть сегмент кода
  61. END START
И как добавить мой текст, который я хочу вывести перед ответом?
Точнее, нужно добавить все числа, которые были использованы.

Решение задачи: «Вывести количество четных символов в массиве из 20 чисел. (Код есть)»

textual
Листинг программы
  1. inc count   ;увеличиваем счетчик четных чисел
  2.  
  3. skip:       ;метка skip      
  4. loop check  ;переход к загрузке следующего элемента массива, пока не будут пройдены все элементы            
  5.  
  6. mov ax,count;помещаем количество найденных четных чисел в регистр ax        
  7. mov bx,10   ;будем откалывать цифры от количества в десятичной системе счисления
  8. xor cx,cx   ;обнуление регистра cx, в котором будет накапливаться количество цифр в количестве найденных
  9. give:       ;метка give
  10. xor dx,dx   ;обнуляем старшую часть делимого, т.к. деление будет происходить dx:ax на bx
  11. idiv bx     ;делим, после деления: в регистре ax - частное, в регистре dx - остаток (отколотая цифра)
  12. push dx     ;пихаем отколотую цифру в стек
  13. inc cx      ;увеличиваем количество отколотых цифр
  14.  
  15. or ax,ax    ;проверяем частное на равность нулю
  16. jnz give    ;если не равно нулю, то дальше будем откалывать
  17.  
  18. mov ah,09h  ;функция вывода сообщения на консоль
  19. lea dx,msg  ;загружаем адрес строки-подсказки
  20. lea dx,msg1 ;эта строка здесь совсем не к месту!!!
  21. int 21h     ;прерывание, чтобы функция выполнилась
  22.  
  23. mov ah,02h  ;функция вывода символа на консоль
  24. get:        ;метка get
  25. pop dx      ;достаем из стека крайнюю отколотую цифру
  26. add dl,30h  ;преобразуем цифру в ASCII-код
  27. int 21h     ;прерывание, чтобы функция выполнилась
  28. loop get    следующей отколотой цифре

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 3.923 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы