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

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

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

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

Задание:

Ввести два целых числа. Вычислить сумму этих чисел, если первое число меньше второго, в противном случае – их разность. У меня возникли проблемы с тем, как проверить, какое число большее, а какое меньшее. Понимаю, что нужно использовать cmp, но пока не представляю, как его сюда вписать. У меня пока что получилось ввести два числа и вычислить их сумму.
data    segment
a   dw ?        ;место в памяти для введенного числа
b   dw ?
str1    db 'Sum is $'   ;сообщение, предваряющее вывод суммы
data    ends
stack1  segment stack
    dw 32 dup (?)
stack1  ends
code    segment
    assume ss:stack1, ds:data, cs:code
    extrn read:near, writer:near
start:  mov ax, data
    mov ds, ax
    call read   ;вводим первое число, оно попадает в ах
    mov a, ax   ;сохраняем его в переменной а
    call read   ;вводим второе число, оно попадает в ах
    add ax, a   ;находим сумму, результат помещается в ах
    mov bx, ax  ;сохраним значение суммы в bx
    mov ah, 9   ;выводим строку-сообщение
    lea dx, str1
    int 21h
    mov ax, bx  ;восстанавливаем в ах значение суммы
    call writer     ;и выводим сумму чисел на экран
    mov ah, 4ch
    mov al, 0
    int 21h
code    ends
    end start
Буду безумно благодарна)

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

textual
Листинг программы
       call  read          ;вводим первое число, оно попадает в ах
       mov   [a],ax        ;сохраняем его в переменной а
       call  read          ;вводим второе число, оно попадает в ах
       cmp   [a],ax        ;сравниваем их
       jb    @add          ;переход, если первое меньше второго!
       sub   [a],ax        ;иначе: вычитание,
       jmp   @prn          ;  ..и уходим на вывод результата
@add:  add   ax, [a]       ;находим сумму, результат помещается в ах
@prn:  push  ax            ;запомним результат..
 
       mov   ah, 9         ;выводим строку-сообщение
       lea   dx, str1
       int   21h
 
       pop   ax            ;восстанавливаем в ах значение суммы
       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
Похожие ответы