Найти сумму максимального и минимального/ сумму двух максимальных/ суммы двух минимальных - 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 выполняет следующие действия:

  1. Организует ввод строки с помощью функции int 21h, ah=9.
  2. Перемещает введенную строку в регистр dx.
  3. Перемещает строку из регистра dx в регистр si.
  4. Делит слово (считает байт) из регистра si и помещает результат в регистр ax.
  5. Делит слово (считает байт) из регистра si и помещает результат в регистр bx.
  6. Повторяет шаг 4 для каждого символа строки.
  7. Вычисляет сумму цифр в регистрах ax и bx, перемещая их в регистр cx.
  8. Повторяет шаг 7 для каждого символа строки.
  9. Выводит сообщение с просьбой ввести строку.
  10. Выводит строку ввода.
  11. Повторяет шаги 3-10 для каждого символа строки.
  12. Вычисляет сумму цифр в регистрах ax и bx, перемещая их в регистр cx.
  13. Выводит сумму в регистре cx.
  14. Выполняет функцию int 21h, ah=4Ch для выхода из программы. Список переменных:
  15. si — содержит байты вводимой строки.
  16. dx — содержит байты вводимой строки.
  17. cx — содержит сумму цифр в регистрах ax и bx.
  18. bx — содержит сумму цифр в регистрах ax и bx.
  19. ax — содержит сумму цифр в регистрах ax и bx.
  20. inpbuf — содержит строку для ввода.
  21. req — содержит сообщение, запрашивающее ввод строки.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 3.9 из 5
Похожие ответы