0 / 0 / 0
Регистрация: 28.06.2016
Сообщений: 3
1

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

28.06.2016, 17:49. Показов 4604. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!
Задание: Ввести два целых числа. Вычислить сумму этих чисел, если первое число меньше второго, в противном случае – их разность.

У меня возникли проблемы с тем, как проверить, какое число большее, а какое меньшее. Понимаю, что нужно использовать cmp, но пока не представляю, как его сюда вписать.
У меня пока что получилось ввести два числа и вычислить их сумму.
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
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
Буду безумно благодарна)
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.06.2016, 17:49
Ответы с готовыми решениями:

[tasm] Вычислить сумму чисел
Добрый день) возник вопрос. Мне нужно вычислить сумму чисел, которая записана по указанному адресу,...

Массив: Вычислить сумму элементов главной диагонали и сумму элементов первого столбца, найти их разность
помогите пожалуйста. Задать с клавиатуры матрицу размером 4*4. Вычислить сумму элементов главной...

TASM: найти сумму положительных элементов массива двухбайтовых знаковых чисел
данная программа считает сумму ненулевых элементов массива однобайтовых чисел без знака и результат...

Найти сумму и разность двух чисел, введенных пользователем (emu8086)
Честно говоря, я даже не знаю, что с этим делать. Вообще, у меня задание довольно простое, написать...

4
Эксперт Hardware
Эксперт Hardware
5444 / 1983 / 362
Регистрация: 29.07.2014
Сообщений: 2,898
Записей в блоге: 4
28.06.2016, 19:31 2
Лучший ответ Сообщение было отмечено mshf как решение

Решение

mshf, переменная "b" у тебя для чего задана? Почему в неё ничего не кладётся?
Нужно в строке(17) сохранить второе число в переменную "b", а дальше сравнивать эти/две переменные через CMP. Теперь, в зависимости от результата сравнения, можно будет перейти на участок сложения/вычитания

Добавлено через 11 минут
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
       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
0 / 0 / 0
Регистрация: 28.06.2016
Сообщений: 3
28.06.2016, 21:23  [ТС] 3
R71MT, спасибо огромное!

У меня получилось немного криво с разностью, но, думаю, подойдет.
Итоговый вариант:

Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
data    segment
    a   dw ?        ;место в памяти для введенного числа
str1    db 'Result 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   ;вводим второе число, оно попадает в ах
    cmp ax, a   ;сравниваем их
    jae @add        ;если первое меньше второго, переходим
    sub ax, a   ;иначе вычитание
    jmp @prn
@add:   add ax, a   ;находим сумму, результат помещается в ах
@prn:   push ax
        mov ah, 9   ;выводим строку-сообщение
        lea dx, str1
        int 21h
pop ax
        call writer  ;и выводим результат на экран
        mov ah, 4ch
    mov al, 0
    int 21h
code    ends
        end start
0
Эксперт Hardware
Эксперт Hardware
5444 / 1983 / 362
Регистрация: 29.07.2014
Сообщений: 2,898
Записей в блоге: 4
28.06.2016, 21:35 4
Цитата Сообщение от mshf Посмотреть сообщение
cmp ax, a * ;сравниваем их
..а что, переменную "а" в скобки не надо брать чтоли? Так-же берётся адрес переменной, а не её значение
0
0 / 0 / 0
Регистрация: 28.06.2016
Сообщений: 3
28.06.2016, 21:38  [ТС] 5
R71MT, оу, не знала, исправила)
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.06.2016, 21:38
Помогаю со студенческими работами здесь

[TASM] Определить минимальную разность между соседними элементами массива
Добрый вечер. Есть задание: задан массив двухбайтовых чисел без знака. Определить минимальную...

Вычислить сумму или разность чисел в троичной системе счисления
Числа в позиционной троично-симметричной системе счисления (Зс) записываются с использованием трех...

Вычислить сумму или разность двух чисел в зависимости от их соотношения
Составить программу, вычисляющую сумму или разность двух чисел, в зависимости от соотношения этих...

Найти сумму или разность двух комплексных чисел
Программа считает сумму или разность двух комплексных чисел void soucet(double a, double b, double...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru