Обработка целочисленного массива. - Assembler (223076)

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

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

Создать массив из 10 слов. Образовать из него два массива старших и младших байтов. В массиве старших байтов инвертировать все отрицательные числа и найти сумму S элементов полученного массива. Байты массива младших байтов сдвинуть логически влево на один разряд и инвертировать отрицательные из них. В полученном массиве подсчитать число N байтов, меньших числа 50. Найти знаковое частное S/N и определить, имеется ли в коде остатка "0" в 4-ом бите. Покажите, пожалуйста, как создать эти два массива

Решение задачи: «Обработка целочисленного массива.»

textual
Листинг программы
  1. LOCALS
  2.  
  3. .model small
  4.  
  5. .stack 100h
  6.  
  7. .data
  8.         A       dw      -4, 10, -200, 300, -800, 1000, 6, -7765, 5599, 8888
  9.         LenA    equ     ($-A)/2
  10.         LoByte  db      LenA dup(?)
  11.         HiByte  db      LenA dup(?)
  12.         S       dw      ?
  13. .code
  14.  
  15. main    proc
  16.         mov     ax,     @data
  17.         mov     ds,     ax
  18.  
  19.         ;Образовать из него два массива старших и младших байтов.
  20.         lea     si,     A
  21.         mov     cx,     LenA
  22.         mov     di,     0
  23. @@1:
  24.         mov     ax,     [si]
  25.         mov     LoByte[di], al
  26.         mov     HiByte[di], ah
  27.         add     si,     2
  28.         add     di,     1
  29.         loop    @@1
  30.  
  31.         массиве старших байтов инвертировать все отрицательные числа
  32.         найти сумму S элементов полученного массива.
  33.         lea     si,     HiByte
  34.         mov     cx,     LenA
  35.         mov     bx,     0       ;сумма
  36. @@2:
  37.         mov     al,     [si]
  38.         or      al,     al
  39.         jns     @@Positive
  40.         not     al
  41.         mov     [si],   al
  42. @@Positive:
  43.         cbw
  44.         add     bx,     ax
  45.         add     si,     1
  46.         loop    @@2
  47.         mov     S,      bx
  48.  
  49.  
  50.  
  51.         mov     ax,     4C00h
  52.         int     21h
  53. main    endp
  54.  
  55. end     main

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

  1. Объявление переменных:
    • A - массив целых чисел (-4, 10, -200, 300, -800, 1000, 6, -7765, 5599, 8888).
    • LenA - количество элементов в массиве A.
    • LoByte - массив для хранения младших байтов.
    • HiByte - массив для хранения старших байтов.
    • S - переменная для хранения суммы элементов полученного массива.
  2. Переменные LOCALS, .model, .stack задают локальные переменные, модель памяти и размер стека соответственно.
  3. Переменная ds (data segment) инициализируется значением переменной ax для обращения к данным.
  4. Создание массивов старших и младших байтов:
    • Образование из массива A двух массивов старших и младших байтов.
  5. Инвертирование отрицательных чисел и нахождение их суммы в массиве старших байтов:
    • Инвертируются все отрицательные числа в массиве старших байтов.
    • Вычисляется сумма элементов полученного массива.
  6. Завершение программы с использованием инструкций завершения. Код обрабатывает массив целых чисел, создает массивы старших и младших байтов, инвертирует отрицательные числа в массиве старших байтов и находит их сумму.

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


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

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

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

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

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

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