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.