В одномерном массиве заменить отрицательные элементы нулями - Assembler
Формулировка задачи:
В одномерном массиве заменить отрицательные элементы нулями.Подсчитать число замен. Массив задать в сегменте данных или ввести с клавиатуры. Почти готова . Но не работает. Пишет ерунду. Кто подскажет? Уже запутался.
Листинг программы
- ;В одномерном массиве заменить отрицательные элементы нулями.
- ;Подсчитать число замен.
- ;Массив задать в сегменте данных или ввести с клавиатуры.
- MASM
- MODEL small
- STACK 256
- .data
- mes db 0ah,0dh,'Массив- ','$'
- massiv db 2,-3,4,5,-6,7,8,9,2,4;исходный массив
- .code
- main:
- mov ax,@data; заносим данные
- mov ds,ax; в ds
- xor ax,ax ;обнуление ax
- mov cx,10 ;значение счетчика цикла в cx
- mov si,0 ;индекс начального элемента в cx
- go: ; приступим к оброботке
- mov al,massiv[si] ; заносим в первый символ массива
- test al,al; сравнение с нулем число массива
- jns show; если не отрицательное то переход на метку show
- mov byte ptr massiv[si],0 ;если отрицательное то заменить на ноль
- inc si ;продвижение к следующему
- ;элементу массива
- ;вывод на экран получившегося массива
- mov cx,10; счетчик массива
- mov si,0; ???
- mov ah,09h; ???
- lea dx,mes ; вывод сообщения массива
- int 21h
- show:
- mov ah,02h ;функция вывода значения из al на экран
- mov dl,massiv[si]
- add dl,30h ;преобразование числа в символ
- int 21h
- inc si; переход к следующему числу
- loop show; метка
- exit:; выход из программы
- mov ax,4c00h ;стандартный выход
- int 21h
- end main ;конец программы
Решение задачи: «В одномерном массиве заменить отрицательные элементы нулями»
textual
Листинг программы
- model small
- .stack 256
- data segment para public 'data' ;объявление сегмента данных
- mas db 3,-1,2,-4,-2,-4,5,-8,4,3; данный массив, неупакованное BCD-число
- num = $ - mas; ;размер массива в байтах
- message db 'nashli otricatelnoe i zamenili na null $',0ah,0dh ; сообщение если есть отрицательное число
- count db 0; счетчик замен присваем начальное значение 0
- data ends; конец данных
- code segment ; сам код
- assume cs:code, ds:data
- start:; начало программы
- mov ax,data; заносим данные в ах, далее
- mov ds,ax; занести в ds данные ax;
- lea bx,mas;берём в bx адрес первого элемента
- mov cx,num;счетчик цикла
- obrabotka: ; метка обработка
- cmp byte ptr [bx],0; сравниваем элемент с нулем
- jg neotric; если bx больше и не равно 0
- ;то есть положительное число то переходим на метку neotric
- mov byte ptr[bx],0; проведем замену отрицательного числа на ноль
- inc count; считаем количесвто замен отрицательных чисел на ноль
- ;если не отрицательное
- neotric:
- inc bx; переход к следующему элементу (размер элемента = 1 байту)
- loop obrabotka; идем на метку obrabotka
- ;вывод количесвто замен на ноль
- mov ah,09h ;вывод сообщения, если нашли отрицательное число
- lea dx, message ; сообщение nashli otricatelnoe i zamenili na null
- int 21h; прирывание для вывода на экран
- mov al, count ; заносим данные счетчика в регистр AL
- aam ;двоичное число преобразуем в неупакованное BCD число
- or ax, 3030h ; преобразуем в символы ASCII
- xchg al, ah ; меняем местами
- int 29h ; выводим на экран
- mov al, ah
- int 29h
- int 21h
- mov ah,4Ch
- int 21h
- code ends; конец кода
- end start; конец программы
Объяснение кода листинга программы
- Объявление сегмента данных.
- Объявление массива в сегменте данных.
- Вычисление размера массива в байтах.
- Объявление переменной для подсчета количества замен.
- Начало программы.
- Загрузка сегмента данных в регистр AX.
- Загрузка адреса первого элемента массива в регистр BX.
- Загрузка размера массива в регистр CX.
- Организация цикла по всем элементам массива.
- Внутри цикла проверка на ноль.
- Если элемент не равен нулю, то замена на ноль.
- Увеличение счетчика замен.
- Выход из цикла.
- Вывод сообщения, если были найдены отрицательные числа.
- Вывод количества замен на ноль.
- Преобразование двоичного числа в неупакованное BCD число.
- Преобразование неупакованного BCD числа в символы ASCII.
- Вывод результата на экран.
- Завершение работы программы.
- Код завершения работы программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д