В одномерном массиве заменить отрицательные элементы нулями - 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; конец программы

Объяснение кода листинга программы

  1. Объявление сегмента данных.
  2. Объявление массива в сегменте данных.
  3. Вычисление размера массива в байтах.
  4. Объявление переменной для подсчета количества замен.
  5. Начало программы.
  6. Загрузка сегмента данных в регистр AX.
  7. Загрузка адреса первого элемента массива в регистр BX.
  8. Загрузка размера массива в регистр CX.
  9. Организация цикла по всем элементам массива.
  10. Внутри цикла проверка на ноль.
  11. Если элемент не равен нулю, то замена на ноль.
  12. Увеличение счетчика замен.
  13. Выход из цикла.
  14. Вывод сообщения, если были найдены отрицательные числа.
  15. Вывод количества замен на ноль.
  16. Преобразование двоичного числа в неупакованное BCD число.
  17. Преобразование неупакованного BCD числа в символы ASCII.
  18. Вывод результата на экран.
  19. Завершение работы программы.
  20. Код завершения работы программы.

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


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

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

9   голосов , оценка 4 из 5
Похожие ответы