Найти среднее из трех заданных чисел - Assembler
Формулировка задачи:
Дано три числа найти среднее из них
Решение задачи: «Найти среднее из трех заданных чисел»
textual
Листинг программы
_STACK segment para stack db 1024 dup(?) _STACK ends _DATA segment A dw 12 B dw -25 C dw -10 Result dw ? CrLf db 0Dh, 0Ah, '$' _DATA ends _TEXT segment assume cs:_TEXT, ds:_DATA, ss:_STACK main proc ;инициализация сегментного регистра данных mov ax, _DATA mov ds, ax mov ax, [A] mov bx, [B] mov cx, [C] cmp ax, bx jle m1 xchg ax, bx m1: cmp bx, cx jle m2 xchg bx, cx m2: cmp ax, bx jle m3 xchg ax, bx m3: mov [Result], bx ;завершение программы mov ax, 4C00h int 21h main endp _TEXT ends end main
Объяснение кода листинга программы
- В коде используется сегментная модель памяти, поэтому каждый сегмент (stack, data, text) имеет свой собственный сегментный регистр (ss, ds, es).
- Сначала происходит инициализация сегментного регистра данных в сегмент данных.
- Затем происходит загрузка трех чисел в регистры ax, bx и cx.
- Происходит сравнение чисел в регистрах ax и bx, и если число в регистре ax меньше числа в регистре bx, то происходит обмен этих чисел местами.
- Затем происходит сравнение чисел в регистрах bx и cx, и если число в регистре bx меньше числа в регистре cx, то происходит обмен этих чисел местами.
- Последнее сравнение - между числами в регистрах ax и bx. Если число в регистре ax меньше числа в регистре bx, то происходит обмен этих чисел местами.
- Результат (наибольшее число из трех) сохраняется в переменной Result.
- Код завершается командой int 21h, которая вызывает функцию завершения программы.