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