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 ; ..и выводим сумму чисел на экран
Объяснение кода листинга программы
- Вводим первое число, оно попадает в AX.
- Сохраняем его в переменной A.
- Вводим второе число, оно попадает в AX.
- Сравниваем их.
- Если первое меньше второго, то переходим к шагу 6.
- Вычитаем второе число из первого и результат сохраняем в переменной A.
- Переходим к шагу 10.
- Если первое больше или равно второму, то переходим к шагу 9.
- Складываем второе число с первым и результат сохраняем в переменной A.
- Запоминаем результат.
- Выводим строку-сообщение.
- Задаем адрес строки-сообщения в регистре DX.
- Выводим строку-сообщение на экран с помощью команды INT 21h.
- Восстанавливаем в AX значение суммы.
- Выводим сумму чисел на экран с помощью функции writer.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д