Имеются два массива по 10 элементов. Сложить по модулю 2 биты 0 и 7. Результат во второй массив. - Assembler
Формулировка задачи:
Доброго времени суток. В универе получил задание написать прогу, но я совершенно не знаю ассемблера, а сдавать уже завтра
Имеются два массива. В каждом 10 элементов. Между 0 и 7 битом каждого элемента первого массива происходит сложение по модулю 2, результат записывается во второй массив. Буду крайне признателен
Решение задачи: «Имеются два массива по 10 элементов. Сложить по модулю 2 биты 0 и 7. Результат во второй массив.»
textual
Листинг программы
- .model small
- .386
- .data
- arr1 db 12,37,29,56,84,90,58,63,47,76
- arr2 db 10 dup(?)
- .stack
- db 255 dup(?)
- .code
- start:
- mov ax,@data
- mov ds,ax
- mov es,ax
- xor si,si
- lea di,arr2
- mov cx,10
- action:
- mov al,byte ptr arr1[si]
- mov ah, 0
- shl ax, 1
- shr al, 1
- xor al,ah
- and al, 1
- stosb
- inc si
- loop action
- mov ah,4Ch
- mov al,00h
- int 21h
- end start
Объяснение кода листинга программы
.model small .386 .data arr1 db 12,37,29,56,84,90,58,63,47,76 arr2 db 10 dup(?) .stack db 255 dup(?) .code start: mov ax,@data mov ds,ax mov es,ax xor si,si lea di,arr2 mov cx,10 action: mov al,byte ptr arr1[si] mov ah, 0 shl ax, 1 shr al, 1 xor al,ah and al, 1 stosb inc si loop action mov ah,4Ch mov al,00h int 21h end start В этом коде:
- Сначала мы объявляем два массива: arr1 и arr2.
- Затем мы задаем начальные значения регистрам.
- Мы используем цикл для прохождения по обоим массивам.
- Внутри цикла мы получаем байт из arr1, используя его как индекс.
- Мы сдвигаем этот байт вправо на 1 бит и сохраняем результат в AX.
- Затем мы сдвигаем результат вправо на 1 бит и сохраняем его в AL.
- Мы инвертируем AL и AND его с 1, чтобы получить только старший бит.
- Мы записываем этот старший бит в arr2.
- Мы повторяем шаги 4-8 для каждого элемента в массиве.
- В конце мы выводим сообщение об успешном выполнении программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д