Организация циклов - Assembler
Формулировка задачи:
Здравствуйте.
Переделайте, пожалуйста, программу.
Из (1) в (2).
1) Даны два массива слов А и B. Записать в результирующий массив С модули произведений соответствующих элементов массивов А и В.
2) Даны два массива байт А и B. Записать в результирующий массив С произведения соответствующих элементов массивов А и В.
Листинг программы
- Data Segment
- mas1 DW 2456,2455,2452,2453
- mas2 DW 2457,2412,2451,2543
- mas3 DD 4 DUP(?)
- data ends
- Code Segment
- START:
- assume cs:code, ds:data
- mov ax, data
- mov ds, ax
- mov SI,offset mas1
- mov DI,offset mas2
- mov BX,offset mas3
- mov CX,length mas3
- m1: mov AX,[SI]
- mul word ptr [DI]
- mov [BX],AX
- mov [BX]+2,DX
- add DI,2
- add SI,2
- add BX,4
- dec CX
- JNZ m1
- mov ax, 4c00h
- int 21h
- Code ends
- end start
Решение задачи: «Организация циклов»
textual
Листинг программы
- .model small
- .386
- .data
- mas1 db 246,245,242,243
- mas2 db 247,242,241,253
- mas3 dw 4 dup(?)
- .stack
- db 256 dup(?)
- .code
- start:
- mov ax,@data
- mov ds,ax
- mov si,offset mas1
- mov di,offset mas2
- mov bx,offset mas3
- mov cx,length mas3
- m1:
- mov al,byte ptr [si]
- mul byte ptr [di]
- mov byte ptr [bx],al
- mov byte ptr [bx+1],ah
- inc di
- inc si
- add bx,2
- dec cx
- jnz m1
- mov ah,4Ch
- mov al,00h
- int 21h
- end start
Объяснение кода листинга программы
- Создание модели сегмента данных: .model small
- Объявление переменных: .data
- Объявление стека: .stack
- Код программы: .code
- Начало выполнения программы: start:
- Переменные для хранения массивов: mas1, mas2, mas3
- Переменные для хранения индексов массивов: si, di, bx
- Длина массива mas3: mov cx,length mas3
- Цикл выполнения операции над массивами: m1:
- Чтение байта из массива mas1: mov al,byte ptr [si]
- Умножение этого байта на байт из массива mas2: mul byte ptr [di]
- Запись результата в массив mas3: mov byte ptr [bx],al
- Запись в массив mas3 суммы результата и его младшего слова: mov byte ptr [bx+1],ah
- Увеличение индекса для массива mas2: inc di
- Увеличение индекса для массива mas1: inc si
- Увеличение индекса для массива mas3 на 2: add bx,2
- Уменьшение счётчика цикла на 1: dec cx
- Проверка, что счётчик не равен нулю: jnz m1
- Вывод сообщения об успешном выполнении программы: mov ah,4Ch
- Завершение работы программы: mov al,00h
- Ввод-вывод данных: int 21h
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д