Из массива чисел сформировать новый массив, в который должны войти нечетные числа - Assembler

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

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

Дан массив чисел Х = 0,3,-15,19,-26,49,-61,18,55,4. Необходимо сформировать новый массив Y в который должны войти нечетные числа. Сделал по примеру похожей программы, но что-то не правильно и не могу понять где

Решение задачи: «Из массива чисел сформировать новый массив, в который должны войти нечетные числа»

textual
Листинг программы
.386
.model  small         ; делаем exe-file
.stack  100h          ; 256-байт для стека

.data
array_x  db  0,3,-15,19,-26,49,-61,18,55,4
array_y  db  10 dup(0)

.code
      mov   ax,@data
      mov   ds,ax            ; настраиваем сегм.регистры
      mov   es,ax            ;   ..для строковых инструкций.

      lea   si,array_x       ; DS-SI для LODSB (чтение)
      lea   di,array_y       ; ES-DI для STOSB (запись)
      mov   cx,10            ; длина цикла
      xor   ah,ah            ; в AH будет кол-во найденых

m1:   lodsb                  ; AL = байт из DS:SI
      test  al,1             ; проверить мл.бит
      jz    m2               ; перейти, если нуль (число чётное)
      stosb                  ; иначе: сохранить AL в DI
      inc   ah               ; увеличить счётчик найденых
m2:   loop  m1               ; промотать СХ-раз...

      mov   ax,4c00h         ; выход в DOS!
      int   21h              ;
end

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

  1. .386 - идентификатор, указывающий на версию процессора.
  2. .model small - идентификатор, задающий модель памяти.
  3. .stack 100h - определение стека.
  4. .data - начало блока данных.
  5. array_x db 0,3,-15,19,-26,49,-61,18,55,4 - определение массива.
  6. array_y db 10 dup(0) - инициализация массива нулями.
  7. .code - начало блока кода.
  8. mov ax,@data - установка сегментного регистра для данных.
  9. mov ds,ax - установка сегментного регистра для стека.
  10. lea si,array_x - установка индекса для чтения из массива.
  11. lea di,array_y - установка индекса для записи в массив.
  12. mov cx,10 - инициализация счётчика цикла.
  13. xor ah,ah - инициализация счётчика найденных чисел.
  14. m1: lodsb - чтение байта из массива.
  15. test al,1 - проверка на чётность числа.
  16. jz m2 - переход на следующую итерацию цикла, если число чётное.
  17. stosb - запись найденного числа в массив.
  18. inc ah - увеличение счётчика найденных чисел.
  19. m2: loop m1 - переход на начало цикла.
  20. mov ax,4c00h - выход в DOS.
  21. int 21h - вызов функции DOS.

ИИ для рефератов и докладов


  • Экспорт Word по ГОСТу
  • Минимум 80% уникальности текста
  • Поиск релевантных источников в интернете
  • Готовый документ за 2 минуты

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

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