Даны три последовательности чисел. Составьте новую последовательность, каждый элемент которой определяется по правилу - Assembler
Формулировка задачи:
По теме: программирование переходов Даны три последовательности чисел а1, а2, ..., a9, b1, b2 ..., b9, с1, с2, ..., с9. Составьте новую последовательность d1, d2, …, d9, каждый элемент которой определяется по правилу di = max (аi, bi, сi), где i= 1,2, ...,9.
Решение задачи: «Даны три последовательности чисел. Составьте новую последовательность, каждый элемент которой определяется по правилу»
textual
Листинг программы
.model small .stack 200h .data CrLf db 0Dh, 0Ah, '$' msgResult db 'Result:', 0Dh, 0Ah, '$' msgPressAnyKey db 0Dh, 0Ah, 'Press any key to exit...', '$' Len equ 9 a dw 1, 4, 16, 64, 256, 1024, 4096, 16384, 17000 b dw -5, 25, 3, 65, -80, 99, -12, 7, 7787 c dw 2, 8, -55, 654, 87, 741, 9874, 251, 672 .data? d dw 9 dup(?) .code main proc ;инициализация сегментного регистра ds адресом сегмента данных mov ax, @data mov ds, ax ;основное действие mov cx, Len xor si, si for: mov ax, a[si] cmp ax, b[si] jl @@CmpC mov ax, b[si] @@CmpC: cmp ax, c[si] jl @@store mov ax, c[si] @@store: mov d[si], ax add si, 2 loop for ;ожидание нажатия любой клавиши mov ah, 09h lea dx, [msgPressAnyKey] int 21h mov ah, 00h int 16h ;завершение программы mov ax, 4C00h int 21h main endp end main
Объяснение кода листинга программы
В коде на языке Assembler даны три последовательности чисел: a, b и c. Задача состоит в том, чтобы для каждого элемента первой последовательности (a) найти соответствующий элемент в одной из двух других последовательностях (b или c) с помощью правила меньше или равно.
Список действий в коде:
- Инициализация сегментного регистра ds адресом сегмента данных.
- Основное действие:
- Переменная
cxинициализируется значениемLen(длина последовательности). - Переменная
siинициализируется нулевым значением (начало последовательности). - Используется цикл for для обработки каждого элемента последовательности
a. - Для каждого элемента последовательности
aвыполняется сравнение с соответствующим элементом последовательностиbиc. - Если элемент
aменьше или равен элементуb, то он заменяется на соответствующий элементc. - Значение элемента
aсохраняется в последовательностиd. - Переменная
siувеличивается на 2 (переход к следующему элементу).
- Переменная
- Ожидание нажатия любой клавиши с помощью функции int 21h.
- Завершение программы: возврат в DOS с кодом завершения 4C00h.
Полный список элементов и их значений:
CrLf- db 0Dh, 0Ah, '$'Result:- db 'Result:', 0Dh, 0Ah, '$'Press any key to exit..., 0Dh, 0Ah, '$'Len- equ 9a- dw 1, 4, 16, 64, 256, 1024, 4096, 16384, 17000b- dw -5, 25, 3, 65, -80, 99, -12, 7, 7787c- dw 2, 8, -55, 654, 87, 741, 9874, 251, 672d- dw 9 dup(?)