Обработка целочисленного массива. - 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
двух массивов старших и младших байтов.
- Образование из массива
- Инвертирование отрицательных чисел и нахождение их суммы в массиве старших байтов:
- Инвертируются все отрицательные числа в массиве старших байтов.
- Вычисляется сумма элементов полученного массива.
- Завершение программы с использованием инструкций завершения. Код обрабатывает массив целых чисел, создает массивы старших и младших байтов, инвертирует отрицательные числа в массиве старших байтов и находит их сумму.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д