Переписать все отрицательные числа из одного массива в другой - Assembler

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

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

Суть такая

Дан массив чисел со знаком. Нужно все отрицательные числа переписать в другой массив

Я нашла такое задание на этом форуме, но оно написано на MASM (?), а у меня DosBox. Весь форум я уже перелазила вдоль и поперек. Вставляю код, который нашла в одной из тем, может вам он поможет, мне не помог...
Листинг программы
  1. MASM
  2. MODEL SMALL
  3. .STACK 256
  4. .DATA
  5. mas_A db -4h, 78h, 34h, -67h, 67h, 34h, -23h, 87h, -34h, -6Eh
  6. len_mas_A=$-mas_A
  7. mas_B db len_mas_A dup (?)
  8. .code
  9. Start:
  10. mov ax,@data
  11. mov ds,ax
  12. xor si,si
  13. mov cx,len_mas_A
  14. m1:
  15. mov al,mas_A[si]
  16. cmp al,0
  17. jge m2
  18. mov mas_B[si],al
  19. m2:
  20. inc si
  21. loop m1
  22. Exit:
  23. mov ax,4c00h
  24. int 21h
  25. END Start
Я не знаю как это все называется по умному. пишется программа в блокноте, сохраняется .asm, компилируется в .bat. запускается через DosBox 0.74

Решение задачи: «Переписать все отрицательные числа из одного массива в другой»

textual
Листинг программы
  1. defseg mass,absolute=0800h 
  2.     seg mass
  3.     org 0800h      
  4. array   db 1,-12,3,-24,-5,36,7,-48,-9,50 ;массив загрузится начинася с 0800 ячейки
  5.     defseg pgm,absolute=0000h
  6.     seg pgm
  7.     org 0000h      ;новый массив расположиться, начиная с 0-го адреса памяти программ
  8.     mvi c,0        ;0 в регистр C
  9.     mvi d,10       ;10 в регистр D
  10.     lxi h,array    ;передать адрес ячейки массива 0800 в HL
  11. loop:                  ;повторять 10 раз цикл "для"                
  12.     add m          ;добавить элемент массива из HL в аккумулятор
  13.     js iseven      ;если отрицательное число в аккамуляторе то iseven
  14.     jns isnteven   ;если нет то isnoteven    
  15. iseven:
  16.     mov m,a        ;новое число из А в адрес HL, заменяем число
  17.     sub a          ;отчистка аккумулятора
  18.     inx h          ;повышаем на 1 адрес ячейки в регистре HL
  19.     dcr d          ;D=D-1
  20.     jnz loop       ;продолжает цикл loop пока не
  21. isnteven:
  22.     sub a          ;отчистка аккумулятора
  23.     inx h          ;повышаем на 1 адрес ячейки в регистре HL
  24.     dcr d
  25.     jnz loop
  26.     end

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

Вот список с пояснениями:

  1. defseg mass,absolute=0800h — Эта строка устанавливает сегмент и абсолютный адрес для переменной mass. Значение 0800h означает, что переменная mass будет расположена в памяти начиная с адреса 0800.
  2. seg mass — Эта строка устанавливает сегмент для переменной mass.
  3. org 0800h — Эта строка устанавливает абсолютный адрес для начала переменной mass.
  4. array db 1,-12,3,-24,-5,36,7,-48,-9,50 — Это строка объявляет переменную array как массив байтов, который будет содержать следующие значения: 1, -12, 3, -24, -5, 36, 7, -48, -9, 50.
  5. defseg pgm,absolute=0000h — Эта строка устанавливает сегмент и абсолютный адрес для переменной pgm. Значение 0000h означает, что переменная pgm будет расположена в памяти начиная с адреса 0000.
  6. seg pgm — Эта строка устанавливает сегмент для переменной pgm.
  7. org 0000h — Эта строка устанавливает абсолютный адрес для начала переменной pgm.
  8. mvi c,0 — Эта строка устанавливает значение 0 в регистр C.
  9. mvi d,10 — Эта строка устанавливает значение 10 в регистр D.
  10. lxi h,array — Эта строка передает адрес ячейки массива array в регистры HL.
  11. loop: — Эта строка начинает цикл, который будет повторяться 10 раз.
  12. add m — Эта строка добавляет элемент массива из регистров HL в аккумулятор.
  13. js iseven — Эта строка проверяет, является ли число в аккумуляторе отрицательным. Если это так, то управление передается метке iseven.
  14. jns isnteven — Эта строка проверяет, является ли число в аккумуляторе положительным или нулевым. Если это не так, то управление передается метке isnteven.
  15. iseven: — Эта строка начинается, если число в аккумуляторе отрицательное.
  16. mov m,a — Эта строка заменяет число в ячейке массива на новое число из аккумулятора.
  17. sub a — Эта строка очищает аккумулятор.
  18. inx h — Эта строка повышает адрес ячейки в регистре HL на 1.
  19. dcr d — Эта строка уменьшает значение в регистре D на 1.
  20. jnz loop — Эта строка продолжает цикл loop, пока не будет достигнуто условие окончания цикла.

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


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

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

10   голосов , оценка 4.2 из 5

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

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

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