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

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

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

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

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

textual
Листинг программы
LOCALS
 
.model small
 
.stack 100h
 
.data
        A       dw      -4, 10, -200, 300, -800, 1000, 6, -7765, 5599, 8888
        LenA    equ     ($-A)/2
        LoByte  db      LenA dup(?)
        HiByte  db      LenA dup(?)
        S       dw      ?
.code
 
main    proc
        mov     ax,     @data
        mov     ds,     ax
 
        ;Образовать из него два массива старших и младших байтов.
        lea     si,     A
        mov     cx,     LenA
        mov     di,     0
@@1:
        mov     ax,     [si]
        mov     LoByte[di], al
        mov     HiByte[di], ah
        add     si,     2
        add     di,     1
        loop    @@1
 
        ;В массиве старших байтов инвертировать все отрицательные числа
        ;и найти сумму S элементов полученного массива.
        lea     si,     HiByte
        mov     cx,     LenA
        mov     bx,     0       ;сумма
@@2:
        mov     al,     [si]
        or      al,     al
        jns     @@Positive
        not     al
        mov     [si],   al
@@Positive:
        cbw
        add     bx,     ax
        add     si,     1
        loop    @@2
        mov     S,      bx
 
 
 
        mov     ax,     4C00h
        int     21h
main    endp
 
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
Похожие ответы