Вывести количество четных символов в массиве из 20 чисел. (Код есть) - Assembler
Формулировка задачи:
Добрый день, товарищи! Нужно вывести количество четных символов в массиве из 20 чисел. Код есть, но почему то, когда я запускаю батник создается только *LST *MAP, а *EXE файла нет. В чем проблема, кто подскажет? Буду очень благодарен! В ассемблере разбираюсь не очень хорошо
DATA SEGMENT ; Открыть сегмент данных MAS DW 1,2,-3,4,5,6,7,-8,9,10,11,-12,13,14,15,-16,17,18,19,20 ; Определить массив из 20 чисел N DW (?) ; Определить байтовую переменную N N_ASCII DB 'Kolichestvo chetnih chisel v massive ='; Определить массив символов DATA ENDS ; Закрыть сегмент данных STK SEGMENT ; Открыть сегмент стека DB 100 DUP (?) ; Определить стек длиной 100 байт STK ENDS ; Закрыть сегмент стека ASSUME DS:DATA, CS:CODE, SS:STK ; Задать соответствия сегментов CODE SEGMENT ; открыть сегмент кода START: MOV AX, DATA ; инициализировать MOV DS, AX ; сегментный регистр DS MOV CX, 20 ; Задать счетчик для цикла MOV SI, 00 ; Задать счетчик для массива MAS MOV DI, 00 ; Занести в BL значение 0 MET1: MOV AX, MAS[SI] ; Занести в AX SI-ый элемент массива MAS AND AX, 1 ; логическое AND для числа и единицы ADD SI, 2 ; SI := SI + 2, Элемент массива MAS +1 CMP AX, 0 ; Сравнить значение остатка с 0 JZ MET2 ; Если остаток равен 0, перейти к MET2 LOOP MET1 ; CX := CX - 1, перейти к метке MET1 JMP EXIT ; перейти к метке EXIT MET2: ADD DI, 01 ; Добавить единицу к BL SUB CX, 01 ; Отнять от CX единицу CMP CX, 00 ; Сравнить CX c 00 JZ EXIT ; Если счетчик цикла =0, перейти к EXIT JMP MET1 ; Вернуться к метке MET1 EXIT: MOV N, DI ; N := (DI) CMP DI, 10 ; сравнить N и число 10 JC MET3 ; если (DI) < 10 перейти к MET3 MOV AX, N ; занести значение N в AX MOV BL, 10 ; Занести в BL делитель равный 10 DIV BL ; разделить (AX) на 10 MOV DH, AH ; Занести в DH остаток от деления ADD AX, 30H ; Получить из числа символ MOV N_ASCII[39], AL ; занести в N_ASCII ADD DH, 30H ; Получить из числа символ MOV N_ASCII[40], DH ; занести в N_ASCII MOV N_ASCII[41], '$' ; добавить к N_ASCII конец строки MOV AH,09h ; вывести N_ASCII MOV DX, offset N_ASCII ; указав смещение в DX INT 21h ; на экран EXIT2: MOV AX, 4C00H ; Корректно завершить INT 21H ; программу MET3: MOV AX, DI ; занести значение DI в AX ADD AX, 30H ; Получить из числа символ MOV N_ASCII[39], AL ; добавить к N_ASCII конец строки MOV N_ASCII[40], '$' ; добавить к N_ASCII конец строки MOV AH,09H ; вывести N_ASCII MOV DX, offset N_ASCII ; указав смещение в DX INT 21h ; на экран JMP EXIT2 ; перейти к метке EXIT2 CODE ENDS ; закрыть сегмент кода END START
И как добавить мой текст, который я хочу вывести перед ответом?
Точнее, нужно добавить все числа, которые были использованы.
Решение задачи: «Вывести количество четных символов в массиве из 20 чисел. (Код есть)»
textual
Листинг программы
inc count ;увеличиваем счетчик четных чисел skip: ;метка skip loop check ;переход к загрузке следующего элемента массива, пока не будут пройдены все элементы mov ax,count;помещаем количество найденных четных чисел в регистр ax mov bx,10 ;будем откалывать цифры от количества в десятичной системе счисления xor cx,cx ;обнуление регистра cx, в котором будет накапливаться количество цифр в количестве найденных give: ;метка give xor dx,dx ;обнуляем старшую часть делимого, т.к. деление будет происходить dx:ax на bx idiv bx ;делим, после деления: в регистре ax - частное, в регистре dx - остаток (отколотая цифра) push dx ;пихаем отколотую цифру в стек inc cx ;увеличиваем количество отколотых цифр or ax,ax ;проверяем частное на равность нулю jnz give ;если не равно нулю, то дальше будем откалывать mov ah,09h ;функция вывода сообщения на консоль lea dx,msg ;загружаем адрес строки-подсказки lea dx,msg1 ;эта строка здесь совсем не к месту!!! int 21h ;прерывание, чтобы функция выполнилась mov ah,02h ;функция вывода символа на консоль get: ;метка get pop dx ;достаем из стека крайнюю отколотую цифру add dl,30h ;преобразуем цифру в ASCII-код int 21h ;прерывание, чтобы функция выполнилась loop get ;к следующей отколотой цифре
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д