TASM Вычислить сумму или разность чисел - Assembler

Узнай цену своей работы

Формулировка задачи:

Здравствуйте!

Задание:

Ввести два целых числа. Вычислить сумму этих чисел, если первое число меньше второго, в противном случае – их разность. У меня возникли проблемы с тем, как проверить, какое число большее, а какое меньшее. Понимаю, что нужно использовать cmp, но пока не представляю, как его сюда вписать. У меня пока что получилось ввести два числа и вычислить их сумму.
Листинг программы
  1. data segment
  2. a dw ? ;место в памяти для введенного числа
  3. b dw ?
  4. str1 db 'Sum is $' ;сообщение, предваряющее вывод суммы
  5. data ends
  6. stack1 segment stack
  7. dw 32 dup (?)
  8. stack1 ends
  9. code segment
  10. assume ss:stack1, ds:data, cs:code
  11. extrn read:near, writer:near
  12. start: mov ax, data
  13. mov ds, ax
  14. call read ;вводим первое число, оно попадает в ах
  15. mov a, ax ;сохраняем его в переменной а
  16. call read ;вводим второе число, оно попадает в ах
  17. add ax, a ;находим сумму, результат помещается в ах
  18. mov bx, ax ;сохраним значение суммы в bx
  19. mov ah, 9 ;выводим строку-сообщение
  20. lea dx, str1
  21. int 21h
  22. mov ax, bx ;восстанавливаем в ах значение суммы
  23. call writer выводим сумму чисел на экран
  24. mov ah, 4ch
  25. mov al, 0
  26. int 21h
  27. code ends
  28. end start
Буду безумно благодарна)

Решение задачи: «TASM Вычислить сумму или разность чисел»

textual
Листинг программы
  1.        call  read          ;вводим первое число, оно попадает в ах
  2.        mov   [a],ax        ;сохраняем его в переменной а
  3.        call  read          ;вводим второе число, оно попадает в ах
  4.        cmp   [a],ax        ;сравниваем их
  5.        jb    @add          ;переход, если первое меньше второго!
  6.        sub   [a],ax        ;иначе: вычитание,
  7.        jmp   @prn          ;  ..и уходим на вывод результата
  8. @add:  add   ax, [a]       ;находим сумму, результат помещается в ах
  9. @prn:  push  ax            ;запомним результат..
  10.  
  11.        mov   ah, 9         ;выводим строку-сообщение
  12.        lea   dx, str1
  13.        int   21h
  14.  
  15.        pop   ax            ;восстанавливаем в ах значение суммы
  16.        call  writer        ;  ..и выводим сумму чисел на экран

Объяснение кода листинга программы

  1. Вводим первое число, оно попадает в AX.
  2. Сохраняем его в переменной A.
  3. Вводим второе число, оно попадает в AX.
  4. Сравниваем их.
  5. Если первое меньше второго, то переходим к шагу 6.
  6. Вычитаем второе число из первого и результат сохраняем в переменной A.
  7. Переходим к шагу 10.
  8. Если первое больше или равно второму, то переходим к шагу 9.
  9. Складываем второе число с первым и результат сохраняем в переменной A.
  10. Запоминаем результат.
  11. Выводим строку-сообщение.
  12. Задаем адрес строки-сообщения в регистре DX.
  13. Выводим строку-сообщение на экран с помощью команды INT 21h.
  14. Восстанавливаем в AX значение суммы.
  15. Выводим сумму чисел на экран с помощью функции writer.

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


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

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

5   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы