Форум программистов, компьютерный форум, киберфорум
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.68/65: Рейтинг темы: голосов - 65, средняя оценка - 4.68
0 / 0 / 0
Регистрация: 29.03.2015
Сообщений: 16
1

Сложение двух чисел, введенных с клавиатуры

06.06.2015, 08:56. Показов 13143. Ответов 8
Метки нет (Все метки)

Помогите, пожалуйста, с задачей по ассемблеру. Нужно сложить два числа введенных с клавиатуры и вывести их на экран. (П.с. Есть похожие программы, но это не то. Хотелось бы программу полностью и с комментариями. Буду благодарна)
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.06.2015, 08:56
Ответы с готовыми решениями:

Сложение двух вещественных чисел, введённых с клавиатуры
Помогите, пожалуйста! Очень надо просто сдать. Мне нужна подобная программа...

Вывести на экран сумму двух введенных с клавиатуры двузначных чисел
Вывести на экран сумму двух введенных с клавиатуры двузначных чисел (вводить посимвольно функцией...

Как сделать конкатенацию двух строк, введенных с клавиатуры?
или хотя б как узнать реальную длину строки после ввода? enter там будет? можна узнать длину если...

Сумма чисел, введенных с клавиатуры
Здравствуйте. В общем, задание такое: ввести два числа с клавиатуры и вычислить их сумму (TASM)....

8
176 / 114 / 25
Регистрация: 18.05.2015
Сообщений: 485
06.06.2015, 17:39 2
1. берем запрашиваем пользователя ввести строку (числа)
2. переводим строку в число
3. делаем арифметические операции
4. переводим число в строку
5. показываем результат на экране
0
0 / 0 / 0
Регистрация: 29.03.2015
Сообщений: 16
06.06.2015, 19:10  [ТС] 3
Спасибо конечно, но я не знаю как это реализовать в коде..
0
176 / 114 / 25
Регистрация: 18.05.2015
Сообщений: 485
06.06.2015, 20:36 4
легко, пиши на почту ,решим
0
22 / 22 / 28
Регистрация: 22.05.2015
Сообщений: 55
06.06.2015, 21:56 5
Лучший ответ Сообщение было отмечено Nancy как решение

Решение

TASM

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
.model small                  
.stack 16h                    
.data  
msgA db 'Enter A = ', '$ '
msgB db 13,10,'Enter B = ', '$ '
msg5 db 13,10,'Result X = ', '$ '               
msg label byte
maxnum db 6 
reallen db ?
numfld db 5 dup(30h)
mult10 dw 0
ascval db 5 dup(30h),'$'             
  x  dw  ?
  a  dw  0
  b  dw  0
c dw 0
  z dw 0
u dw 0
 
.code                        
start: mov ax, @data          
       mov ds, ax   
       mov ah,9
       lea dx, msgA ; Сообщение "Enter A = "
       int 21H;
 
       mov ah,0AH
       lea dx,msg
       int 21H   
       call asbin ; Ввод числа с клавиатуры
       mov ax,z
       mov a,ax
 
       mov ah,9
       lea dx, msgB ; Сообщение "Enter B = "
       int 21H;
 
       mov ah,0AH
       lea dx,msg
       int 21H   
       call asbin ; Ввод числа с клавиатуры
       mov ax,z
       mov b,ax
 
    
       mov ah,9
       lea dx, msg5 ; Сообщение "Result X = "
       int 21H;       
   
   
       mov bx, dx
       mov cx, ax             
 
       xor dx,dx
       mov ax, a         
       add ax,b ; Складываем 2 числа                
       mov x, ax
 
 
call outp ; Вывод результата на экран 
     
       mov ah, 4ch ; Выйти из программы            
       int 21h     
                  
asbin proc ; Процедура ввода с клавиатуры
       mov mult10,0001
       mov z,0
       mov cx,10
       lea si,numfld-1
       mov bl,reallen
       sub bh,bh
b20:
       mov al,[si+bx]
       and ax,000fh
       mul mult10
       add z,ax
       mov ax,mult10
       mul cx
       mov mult10,ax
       dec bx
       jnz b20
       ret
asbin  endp
 
outp proc ; Процедура вывода на экран
       mov cx,10                ; система счисления
       lea si, ascval+4         ; Установка указателя на конец массива ascval
       mov ax, x                ; Результат х занести в ax
c20:   cmp ax,10                ; Сравнить результат с числом 10
       jb c30                   ; Если меньше то преобразовывать не надо
        xor dx,dx   ; Очистка регистра dx для команды деления
       div cx                   ; Делим на 10
       or dl, 30h               ; Преобразование остатка к ASCII коду
       mov [si], dl             ; Занесение остатка от деления в массив ascval
       dec si                   ; Перемещение указателя массива на 1 байт влево
       jmp c20                  ; Переход на начало для преобразования след. цифры
c30:   or al, 30h               ; Если остаток меньше 10, то вывод результата на экран
       mov [si], al             ; дисплея командами (см. ниже)
       lea dx, ascval           ; Загрузка адреса массива
       mov ah, 9                ; Вызов 9-ой функции MS-DOS 
       int 21h
       ret                      ; Возврат в головную программу из п/программы
outp endp               ; Конец процедуры
 
 
end start
2
176 / 114 / 25
Регистрация: 18.05.2015
Сообщений: 485
06.06.2015, 23:25 6
LegchylinIlya,
молоток, уже сделал
я только был на 2/3 объема, хотел мудрил чтобы было в eax, потом подумал, наверно зря, такое точно засекут
0
0 / 0 / 0
Регистрация: 29.03.2015
Сообщений: 16
07.06.2015, 10:58  [ТС] 7
Спасибо огромное вам!!))
0
5 / 5 / 1
Регистрация: 20.09.2015
Сообщений: 85
03.05.2017, 10:27 8
Я вот так сделал. MASM32:
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
.486
.model flat, stdcall
option casemap: none
 
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
include \masm32\include\masm32.inc
include \masm32\include\debug.inc
 
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\masm32.lib
includelib \masm32\lib\debug.lib
 
.data
 
BufSize = 9h ; размер массива вводимых байтов
X BYTE 4 DUP(?) ; захват памяти под массив ввода
Y BYTE 4 DUP(?) ; захват памяти под массив ввода
Z BYTE 5 DUP (0) ; сумма
S byte '+' ; символ суммы для вывода
E byte '=' ; символ равенства для вывода
outHandle DWORD 0 ; дескриптор стандартного устройства вывода
bytesWritten DWORD ? ; число выведенных байтов
inHandle DWORD 0 ; дескриптор стандартного устройства ввода
bytesRead DWORD ? ; число введённых байтов
Q BYTE ? ; одиночный символ массива ввода
.code
start:
 
INVOKE GetStdHandle, STD_INPUT_HANDLE   ; получение дескриптора
mov inHandle, eax           ; сохранение дескриптора в памяти
;INVOKE GetConsoleMode, inHandle, offset X  ; сохранение флагов
;mov al,X
INVOKE ReadConsole, inHandle, offset X, BufSize, offset bytesRead, 0
INVOKE ReadConsole, inHandle, offset Y, BufSize, offset bytesRead, 0
CLC ; сброс флага переноса CF
MOV esi,Lengthof X-1 ; смещение мл. байта слагаемого
MOV edi,esi
inc edi ; длина суммы на 1 байт больше длины слагаемого
MOV ecx,Lengthof X ; счётчик цикла
M: ; начало цикла
MOV ah,0 ; освобождение места для возможного переноса
MOV al,X[esi] ; загрузка байта первого слагаемого
ADD al,Y[esi] ; сложение двух байтов и переноса
AAA ; ASCII-коррекция после сложения
PUSHF
OR al,30h ; получение ASCII-кода цифры суммы
POPF
MOV Z[edi],al ; сохранение цифры суммы в памяти
DEC esi ; смещение следующего байта слагаемых
DEC edi ; смещение следующего байта суммы
LOOP M
cmp ah,1
ja D
jb B  ; получение ASCII-кода старшей цифры суммы
D:
or ah, 30h
MOV Z[edi],ah ; сохранение старшей цифры суммы в памяти
B:
MOV Z[edi],ah ; сохранение старшей цифры суммы в памяти
INVOKE GetStdHandle, STD_OUTPUT_HANDLE
mov outHandle ,eax
INVOKE WriteConsole, outHandle, offset X, lengthof X, offset bytesWritten,0
INVOKE WriteConsole, outHandle, offset S, lengthof S, offset bytesWritten,0
INVOKE WriteConsole, outHandle, offset Y, lengthof Y, offset bytesWritten,0
INVOKE WriteConsole, outHandle, offset E, lengthof E, offset bytesWritten,0
INVOKE WriteConsole, outHandle, offset Z, lengthof Z, offset bytesWritten,0
 
INVOKE GetStdHandle, STD_INPUT_HANDLE
mov inHandle,eax
INVOKE ReadConsole, inHandle, offset Q, 1, offset bytesRead, 0
INVOKE ExitProcess,0
END start
0
3182 / 1755 / 471
Регистрация: 28.02.2015
Сообщений: 3,569
03.05.2017, 11:00 9
Drovosek01, Вы на дату смотрели?
Тема уже не актуальна.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.05.2017, 11:00

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Вывести на экран сумму двух введенных с клавиатуры цифр (результат заведомо меньше 10)
Имеется два числа (цифры) a и b. Вычислить y = 2a - b + 1. Компилятор Dos, тип приложения tasm 1.4

Найти разность введенных с клавиатуры чисел со знаком.
Добрый вечер.Может кто поможет с моей задачей. Найти разность введенных с клавиатуры чисел со...

Вывести на экран сумму двух любых введенных с клавиатуры цифр (сумма может быть больше 10)
Как вывести числа больше 10?. Компилятор Dos Box, Tasm 1.4

Программа сложения двух чисел, введенных с клавиатуры.
Уважаемые программисты помогите вот с какой задачей. Как написть на Ассемблере программу сложения...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.