Найти сумму максимального и минимального/ сумму двух максимальных/ суммы двух минимальных - Assembler
Формулировка задачи:
Помогите, пожалуйста, написать код для парочки задачек. Завтра к.р, а я полное дно в ассемблере.
1. В регистрах ebx ecx edx находятся числа. Найти сумму максимального и минимального/ сумму двух максимальных/ суммы двух минимальных.
2. Удалить из записи числа все чётные цифры.
3. Записать число наоборот.
По первой вот такой вариант. Но что то слишком мощно напортачил. Можно как-то уменьшить код?
_asm{ mov ebx, a; mov ecx, b; mov edx, c; cmp ebx, ecx; // сравниваем a и b jg l_bigger;// если a>b // если a<=b cmp ebx, edx;// a и с jg l_smaller;// a>c следов b=max // a<=с след a=min cmp ecx, edx; // b и с jg ll_smaller; // b>c следов b=max a=min // b<=с следов с=max a=min add ebx,edx;// a+c mov res, ebx; jmp exitt; //переход на конец программы l_bigger:// если a>b cmp ebx, edx; // a и с jg ll_bigger; // если a>c следов a=max // a<=с следов с=max b=min add ecx, edx; // b+c mov res, ecx; jmp exitt; //переход на конец программы ll_bigger:// a=max cmp edx, ecx;// c и b jg lll_bigger; // c>b следов b=min // c<=b следов с=min add ebx, edx; // a+c mov res, ebx; jmp exitt; //переход на конец программы lll_bigger:// a=max b=min add ecx, ebx;// b+a mov res, ecx; jmp exitt; //переход на конец программы l_smaller:// b=max c=min add ecx, edx;// b+c mov res, ecx; jmp exitt; //переход на конец программы ll_smaller:// b=max a=min add ecx, ebx;// b+a mov res, ecx; jmp exitt; //переход на конец программы exitt: }
Решение задачи: «Найти сумму максимального и минимального/ сумму двух максимальных/ суммы двух минимальных»
textual
Листинг программы
org 100h mov ah,9 mov dx, req int 21h mov ah, 0Ah mov dx, inpbuf int 21h mov si, dx lodsw mov di, si shr ax, 8 mov cx, ax mov bx, cx @@: lodsb push ax loop @B mov cx,bx @@: pop ax stosb int 29h loop @B mov ah, 4Ch int 21h req: db 'Enter string:$' inpbuf: db 0Ch, 0, 12 dup (?)
Объяснение кода листинга программы
Код на языке Assembler выполняет следующие действия:
- Организует ввод строки с помощью функции int 21h, ah=9.
- Перемещает введенную строку в регистр dx.
- Перемещает строку из регистра dx в регистр si.
- Делит слово (считает байт) из регистра si и помещает результат в регистр ax.
- Делит слово (считает байт) из регистра si и помещает результат в регистр bx.
- Повторяет шаг 4 для каждого символа строки.
- Вычисляет сумму цифр в регистрах ax и bx, перемещая их в регистр cx.
- Повторяет шаг 7 для каждого символа строки.
- Выводит сообщение с просьбой ввести строку.
- Выводит строку ввода.
- Повторяет шаги 3-10 для каждого символа строки.
- Вычисляет сумму цифр в регистрах ax и bx, перемещая их в регистр cx.
- Выводит сумму в регистре cx.
- Выполняет функцию int 21h, ah=4Ch для выхода из программы. Список переменных:
- si — содержит байты вводимой строки.
- dx — содержит байты вводимой строки.
- cx — содержит сумму цифр в регистрах ax и bx.
- bx — содержит сумму цифр в регистрах ax и bx.
- ax — содержит сумму цифр в регистрах ax и bx.
- inpbuf — содержит строку для ввода.
- req — содержит сообщение, запрашивающее ввод строки.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д