Даны 2 массива: массив слов MS и массив байтов MB - Assembler
Формулировка задачи:
Даны 2 массива: массив слов MS и массив байтов MB. Разделить со знаком попарно MS/MB и образовать массивы частных (MCH) и остатков (MO). Определить сумму элементов MCH и число элементов массива MO, в коде которых имеется "1" в 7-ом бите. Выяснить знак полученной суммы.
В ассемблере почти не разбираюсь, попыталась сделать хоть что то с помощью того, что есть в интернете. Но так и не смогла понять, как определить знак суммы и число элементов массива MO, в коде которых имеется "1" в 7-ом бите. К тому же я даже не уверена в правильности того, что сделала на данный момент:
Пожалуйста, помогите разобраться с этими вопросами. Буду очень благодарна!
LOCALS .model small .stack 100h .data Len equ 7 ; длина массивов MS dw 5,23,1,-17,32,25,9 ; массив слов MB db 1,2,13,41,-15,-16,22 ; массив байтов MCH dw Len dup(?) ; массив частных MO dw Len dup(?) ; массив остатков .code main proc mov ax, @data ; Разделить со знаком попарно MS/MB и образовать массивы частных и остатков lea si,MS ; si - указатель на массив MS lea di,MB ; di - указатель на массив MB mov bx,0 ; bx - индекс в массивах остатков и частных mov cx,len ; длина массивов @@For1: push bx mov al,[di] cbw mov bx,ax mov ax,[si] cwd add si,2 ; увеличение на один элемент массива MS add di,1 ; увеличение на один элемент массива MB idiv bx ; знаковое деление pop bx mov MCH[bx],ax mov MO[bx],dx add bx,1 ; увеличение на один элемент массива MO или MCH loop @@For1 ; Определение суммы элементов массива частных mov al,0 ; сумма элементов массива mov cx,Len ; длина массива lea si,MCH @@For2: add al,[si] add si,1 ; увеличение на один элемент массива MCH loop @@For2 main endp end main
Решение задачи: «Даны 2 массива: массив слов MS и массив байтов MB»
textual
Листинг программы
LOCALS .model small .stack 100h .data Len equ 7 ; длина массивов MS dw 5,23,1,-17,32,25,9 ; массив слов MB db 1,2,13,41,-15,-16,22 ; массив байтов MCH dw Len dup(?) ; массив частных MO dw Len dup(?) ; массив остатков N dw ? ; число положительных элементов Positive db ‘Positive’,0Dh,0Ah,’$’ Negative db ‘Negative’,0Dh,0Ah,’$’ .code main proc mov ax, @data ; Разделить со знаком попарно MS/MB и образовать массивы частных и остатков lea si,MS ; si - указатель на массив MS lea di,MB ; di - указатель на массив MB mov bx,0 ; bx - индекс в массивах остатков и частных mov cx,Len ; длина массивов @@For1: push bx mov al,[di] cbw mov bx,ax mov ax,[si] cwd idiv bx ; знаковое деление pop bx mov MCH[bx],ax mov MO[bx],dx add si,2 ; увеличение на один элемент массива MS add di,1 ; увеличение на один элемент массива MB add bx,1 ; увеличение на один элемент массива MO или MCH loop @@For1 ; Определение суммы элементов массива частных mov ax,0 ; сумма элементов массива mov cx,Len ; длина массива lea si,MCH @@For2: add al,[si] add si,2 ; увеличение на один элемент массива MCH loop @@For2 ; Подсчёт количества элементов MO, у которых в 7-м бите единица mov N,0 ; переменное для хранения количества элементов @@For4: test MO[si],1000000b jz @@For3 ; если 0, то не инкрементируем N inc N @@For3: add si,2 ; переходим на следующий элемент loop @@For4 ; Проверка знака суммы элементов массива частных MCH or al,al js @@Negative mov ah,09h lea dx,Positive int 21h jmp @@End @@Negative: mov ah,09h lea dx,Negative int 21h @@End: mov ax,4C00h int 21h main endp end main
Объяснение кода листинга программы
- Объявление переменных и констант:
Len
- константа, значение 7MS
- массив данных типа слов (dw) с элементами 5, 23, 1, -17, 32, 25, 9MB
- массив байтов (db) с элементами 1, 2, 13, 41, -15, -16, 22MCH
- массив слов (dw) длиной Len для хранения частныхMO
- массив слов (dw) длиной Len для хранения остатковN
- переменная для хранения количества положительных элементовPositive
- строкаPositive
с символом новой строки и конечным нулемNegative
- строкаNegative
с символом новой строки и конечным нулем
- Разделение со знаком попарно MS/MB и формирование массивов частных и остатков:
- Указатели:
si
- массив MS,di
- массив MB bx
- индекс в массивах остатков и частных- Цикл разделения с использованием деления с остатком и сохранением результатов в массивы MCH и MO
- Указатели:
- Определение суммы элементов массива частных:
ax
- переменная для хранения суммы элементов массива- Цикл для нахождения и добавления элементов массива MCH к переменной
ax
- Подсчёт количества элементов MO, у которых в 7-м бите единица:
- Цикл для проверки каждого элемента массива MO и подсчёта количества элементов, у которых седьмой бит равен 1
- Проверка знака суммы элементов массива частных MCH:
- Проверка знака суммы элементов массива MCH и вывод сообщения
Positive
илиNegative
в зависимости от этого
- Проверка знака суммы элементов массива MCH и вывод сообщения
- Завершение программы:
- Вызов прерывания для завершения программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д