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

Вывести на экран сумму двух введенных с клавиатуры двузначных чисел

18.12.2016, 00:11. Показов 8754. Ответов 14

Вывести на экран сумму двух введенных с клавиатуры двузначных чисел (вводить посимвольно функцией 01 прерывания 21h, значение вводить так, чтобы сумма была меньше 100). для решения задачи применить команды десятичной арифметики
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.12.2016, 00:11
Ответы с готовыми решениями:

Вывести на экран сумму двух введённых с клавиатуры цифр.
Нужно решить две задачи. У меня возникает ошибка, что-то связанное с операндом. Вот код который я...

Вывести на экран сумму двух введённых с клавиатуры цифр.
Помогите пожалуйста решить данную задачу. Задание: 1) Вывести на экран сумму двух введённых с...

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

Вывести на экран произведение двух введенных с клавиатуры чисел (debug.exe)
Добрый вечер . Помогите ,пожалуйста , написать программу , которая выводит на экран произведение...

14
1624 / 792 / 239
Регистрация: 26.05.2012
Сообщений: 2,887
18.12.2016, 15:41 2
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
.386
 
.data
msg1 db 'first number: $'
msg2 db 'second number: $'
msg3 db 'first + second = $'
dig1 db ?,?
dig2 db ?,?
 
.stack 
db 255 dup(?)
 
.code
start:
mov ax,@data
mov ds,ax
mov es,ax
 
mov ah,09h
lea dx,msg1
int 21h
 
lea di,dig1
mov cx,2
one:
mov ah,01h
int 21h
 
and al,11001111b
 
stosb
loop one
 
mov ah,02h
mov dl,0Ah
int 21h
 
mov ah,02h
mov dl,0Dh
int 21h
 
mov ah,09h
lea dx,msg2
int 21h
 
lea di,dig2
mov cx,2
two:
mov ah,01h
int 21h
 
and al,11001111b
 
stosb
loop two
 
mov al,byte ptr [dig1]
mov bl,10
mul bl
add al,byte ptr [dig1+1]
 
mov dl,al
 
mov al,byte ptr [dig2]
mov bl,10
mul bl
add al,byte ptr [dig2+1]
 
add al,dl
 
aam
 
or ax,3030h
 
xchg dx,ax
xchg dh,dl
 
push dx
 
mov ah,02h
mov dl,0Ah
int 21h
 
mov ah,02h
mov dl,0Dh
int 21h
 
mov ah,09h
lea dx,msg3
int 21h
 
pop dx
 
mov ah,02h
int 21h
 
xchg dh,dl
 
mov ah,02h
int 21h
 
mov ah,4Ch
mov al,00h
int 21h
end start
0
0 / 0 / 0
Регистрация: 01.12.2016
Сообщений: 30
18.12.2016, 15:52  [ТС] 3
proc3nt, Какой смысл в твоем сообщение ? Я здесь написал весь материал по которому нужно сделать и написал что мне нужно сделать, по какой причине вы почистили мою тему? И зачем надо было удалять фотографию, в правилах ничего на счет этого не было сказано.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
30913 / 20227 / 7884
Регистрация: 22.10.2011
Сообщений: 35,106
Записей в блоге: 6
18.12.2016, 15:54 4
Milve,
Правила Форума:
5.18 Запрещено размещать задания и решения в виде картинок и других файлов с их текстом.
- это называется ничего не сказано?
0
0 / 0 / 0
Регистрация: 01.12.2016
Сообщений: 30
18.12.2016, 15:59  [ТС] 5
volvo, В каком месте на картинке было задание или же решение? Там был материал который я не мог написать в данную тему из-за того что у вас отсутствует таблица. И еще, зачем нужно было чистить весь материал который был описан здесь?
0
0 / 0 / 0
Регистрация: 01.12.2016
Сообщений: 30
18.12.2016, 16:48  [ТС] 6
Помогите решить задачу:
1)
Нужно вывести на экран сумму двух введенных с клавиатуры двузначных чисел
Данную задачу нужно решить по тому материалу который написан чуть ниже.
Мой код который нужно до конца доработать:
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
data segment ;описание сегмента данных
data ends ;конец сегмента данных
 
code segment ;начало сегмента кода
start: ;метка start - начало нашей программы
    assume cs:code, ds: data ;директива компилятора
    mov ax, data ;настройка сегмента данных
    mov ds, ax ;
;--------------Очищаем экран--------------
    mov ah, 0fh ;получить параметры видеорежима
    int 10h ;
    mov ah, 00 ;установить параметры видеорежима
    int 10h ;
;--------------Вводим первый символ--------------
    mov ah, 01 ;ввод с клавиатуры и чтение с клавиатуры
    int 21h ;ввод с клавиатуры и чтение с клавиатуры
    sub al, 30h ;переводим символ в число
    mov bl, al ;запоминаем первое число в bl
    aam
;--------------Вводим второй символ--------------
    mov ah, 01 ;ввод с клавиатуры и чтение с клавиатуры
    int 21h ;ввод с клавиатуры и чтение с клавиатуры
    sub al, 30h ;переводим символ в число
    add al, bl ;сложить первое со вторым. результат в al
    aam
;--------------Выводим символ на экран--------------
    add al, 30h ;перевести число в символ
    mov ah, 02 ;номер функции
    mov dl, al ;поместили сивол из al в dl
    int 21h ;вызов прерываний
    
    mov ax, 4c00h ;функция завершения программы
    int 21h ;завершаем программу
code ends ;конец сегмента кода
end start ;конец программы с точкой входа start
Материал по которому нужно сделать задачу


Практика №1
Постановка задачи


1. Постановка задачи. Написать программу, которая выводит на экран строчку "hello"
2. Разработка алгоритма программы. Алгоритм линейный, разработки не требует.
3. Формализация (запись алгоритма). В текстовом редакторе создаём файл (файл "privet.asm) и записываем в него следующий код

Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
1) data segment (описание сегмента данных)
2) mes db 'Hello!$' (строка для вывода на экран. '$' -признак конца строки)
3) data ends (конец сегмента данных)
4)
5) code segment (начало сегмента кода)
6) start: (метка start - начало нашей программы  )
7) assume cs:code, ds: data (директива компилятора)
8) mov ax, data (настройка сегментов данных)
9) mov ds, ax
10)
11) mov ah, 9 (функция №9 - вывод строки на экран)
12) lea dx, mes (берём адрес строки)
13) int 21h (вызов прерывания для вывода строки)
14)
15) mov ax, 4c00h (функция завершения программы)
16) int 21h (завершаем программу)
17) code ends (конец сегмента кода)
18) end start (конец программы с точки входа start)
4. Компиляция программы tasm privet.asm
5. Компановка программы tlink privet.obj
6. Запуск privet.exe

Описание программы privet.asm
Строки 1-3 программы privet.asm содержит описание сегмента данных. Сегмент данных - область память, в которой будет храниться данные для наших программ.
Строки 5-17 - это код программы, её исполняемая часть.
В 8 и 9 строках выполняется настройка сегмента данных программы.
Строки 11-13 - вывод строки на экран при помощи функции №9 прерывания 21h
15 и 16 строки - стандартное завершение программы.
После символа ";" пишутся комментарии, они не обрабатываются компилятором.
Переход на новую строку. mes db 'Выводим строку и переходим на новую..', 10, 13, '$'

Лабораторная работа №3
Применение функции DOS и BIOS.


Пример 1: Вывести на экран символ $
Assembler
1
2
3
mov ah, 02 (номер функции)
mov dl, '$' (входные данные)
int 21h (вызов прерываний)
Пример 2: Очистить экран
Assembler
1
2
3
4
mov ah, 0fh (получить параметры видеорежима)
int 10h
mov ah, 00 (установить параметры видеорежима)
int 10h
Пример 3: Установить курсор
Assembler
1
2
3
4
5
mov ah, 02h (функция
mov bh, 00h (видео страница 0)
mov dh, 05h (номер строки 5)
mov dl, 0ch (номер столбца 12)
int 10h (вызов прерываний)
Пример 4: Ввод с клавиатуры и чтение с клавиатуры
Assembler
1
2
mov ah, 1
int 21h
Пример 5: Вывод символов на экран
Assembler
1
2
3
mov ah, 2
mov dl, dl (поместить символ из ah в dl)
int 21h(10h) (отобразить символ)
Лабораторная работа №4
Линейный алгоритм


Линейным называют такие алгоритмы, в которых все действия выполняются поочередно, друг за другом.
На линейных участках алгоритмов обычно выполняются манипуляции данными
Команда пересылки данных:
mov <приёмник>, <источник>
Команда mov - команда пересылки данных, результатом Ее исполнения является копирование данных из операнда <источник> в операнд <приёмник>
Assembler
1
2
3
4
5
mov ah, 09 (записать в регистр ah число 09)
mov cl, ah (скопировать байт из регистра ah в ch)
mov bx, cx (скопировать слово из регистра cx в регистр bx)
mov ch, 0fh
mov ch, bl
Вопрос: чему будет равно содержимое регистра ch после выполнения данного участка программы?

Простейшие арифметические команды:

Команда Описание
add <слагаемое 1>, <слагаемое 2> Записать в операнд <слагаемое 1> значение суммы обоих операндов
inc <операнд> Увеличить <операнд> на единицу
sub <операнд 1>, <операнд 2> Записать в операнд <операнд 1> значение разности операндов
dec <операнд> Уменьшить <операнд> на единицу
mul <сомножитель 2> Умножает <сомножитель1> на <сомножитель 2> если <сомн2> - байт, то <сомн1> - регистр al (результат-слово в ax); Если <сомн2> - слово, то <сомн1> - регистр ax (результат - двойное слово в dx:ax)
div <делитель> Делит <делимое> на <делитель> если <делитель> - байт, то <делимое> - регистр ax (результат - частное в al, остаток в ah); если <делитель> - слово, то <делимое> - регистр овая пара dx:ax (результат - частное в ax, остаток в dx)

Пример 1
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
data segment
N db 4
F db 5
Y db (dw) ?
-------------(тут должен быть код)
start :
----(тут должен быть код)
mov dx, [N] N
add dx, 2
sub dx, [F]
------(тут должен быть код)
mov Y, dx
-----(тут должен быть код)
В начале dx загружается значение 4, хранящиеся N затем к нему добавляется константа 2. В результате в dx значение 6. Далее из dx вычитается значение 5 хранящиеся в F, далее из dx результат загружается в Y

Лабораторная работа №5
Десятичная арифметика


Команды десятичной арифметики

Рассматриваемые ниже команды предназначены для работы с неупакованными BCD-числами. Изучите их работу по приведенным в таблице примерам.
Остальной материал будет изображен на фото
0
Миниатюры
Вывести на экран сумму двух введенных с клавиатуры двузначных чисел  
Модератор
Эксперт по электронике
7522 / 3710 / 1456
Регистрация: 01.02.2015
Сообщений: 11,547
Записей в блоге: 2
18.12.2016, 17:52 7
Таблица присутствует. Только пользоваться ею не очень просто и не очень удобно. По тэгам она напоминает таблицу из разметки html, только скобки не угловые, а квадратные.

Добавлено через 4 минуты
Milve, по поводу претензий к proc3nt
Цитата Сообщение от Milve Посмотреть сообщение
Какой смысл в твоем сообщение ? Я здесь написал весь материал по которому нужно сделать и написал что мне нужно сделать
Раз вы видите различия в оформлении - изменяйте в своё удовольствие это пресловутое оформление. Код останется неизменным.

А так, с вашей требовательностью - желаю стать большим начальником (без знаний и умения их нарабатывать) - будете требовать точного исполнения пожеланий. Мир на глазах улучшится.
0
Модератор
Эксперт по электронике
7522 / 3710 / 1456
Регистрация: 01.02.2015
Сообщений: 11,547
Записей в блоге: 2
18.12.2016, 17:59 8
Milve, ни мне, ни тому, кто вам поможет не нужны справочные материалы из методички вашего учебного заведения. Вижу вашу программу, постановку задачи. Что не получается, вызывает затруднения.
Цитата Сообщение от Milve Посмотреть сообщение
Мой код который нужно до конца доработать:
Это ни о чём не говорит. На форуме ежедневно размещается 20 тем. Чтобы ответить каждому, требуется не менее часа (поиск документации, примеров, написание нового кода). Это помимо основной работы, на которой так же дают "домашние задания".

Вот я не знаю, что в вашей программе не так. И не буду вчитываться в очередную порцию кода, выясняя, что вы не доделали.
-------------------------------------
Подытоживая.
Что в вашей программе не так?
0
0 / 0 / 0
Регистрация: 01.12.2016
Сообщений: 30
20.12.2016, 13:25  [ТС] 9
Задача не решена
0
Модератор
Эксперт по электронике
7522 / 3710 / 1456
Регистрация: 01.02.2015
Сообщений: 11,547
Записей в блоге: 2
20.12.2016, 16:48 10
Milve, вы плохой ученик. Причина - хороший ученик начал бы искать строки соответствия в двух исходниках. И заменил бы директивы компилятора. К примеру
Assembler
1
2
data segment ;описание сегмента данных
data ends ;конец сегмента данных
и
Assembler
1
2
3
4
5
6
.data
msg1 db 'first number: $'
msg2 db 'second number: $'
msg3 db 'first + second = $'
dig1 db ?,?
dig2 db ?,?
Видимо, нужно "засунуть одно в другое"
Assembler
1
2
3
4
5
6
7
data segment ;описание сегмента данных
msg1 db 'first number: $'
msg2 db 'second number: $'
msg3 db 'first + second = $'
dig1 db ?,?
dig2 db ?,?
data ends ;конец сегмента данных
И по остальным двум сегментам аналогично.

Поверьте, после ответа на вопрос
Цитата Сообщение от ФедосеевПавел Посмотреть сообщение
Что в вашей программе не так?
Цитата Сообщение от Milve Посмотреть сообщение
Задача не решена
Вы не дождётесь ни одного ответа. Т.к. не умеете общаться и игнорируете вопросы.
0
0 / 0 / 0
Регистрация: 01.12.2016
Сообщений: 30
20.12.2016, 18:18  [ТС] 11
ФедосеевПавел, Я не игнорировал ваш вопрос. Он был просто задан не корректно, думаете я обращал на то что у вас было после черточек ? Мне показалось что эта была простая подпись, а не вопрос.
Цитата Сообщение от ФедосеевПавел Посмотреть сообщение
Что в вашей программе не так?
Я не могу сделать так чтобы мои символы записывались в виде двухзначных чисел. Тот код который мне написал proc3nt, мне ничего не дал. Там много кодов которых я не проходил по учебному материалу, и искать значения я не вижу смысла, ибо по другому их реализовать не смогу. Мне нужно использовать все то что мне дали в методичке.
0
ФедосеевПавел
20.12.2016, 21:22
  #12

Не по теме:

Milve, стараюсь подобрать нейтральные выражения.
Передам смысл. Раз вы с начального этапа ничего не можете понять, даже с таким разжёванным материалом, то ассемблер - не для вас. Зачёт и экзамен всё равно будете сдавать "по особенному" (назову это так). Какая высокая идея подгонять код под ваши знания?

0
0 / 0 / 0
Регистрация: 01.12.2016
Сообщений: 30
20.12.2016, 21:40  [ТС] 13
ФедосеевПавел, С каким таким разжёванным материалом? Тут совсем ничего не понятно, что да как делать, даже примера нету. Как я по вашему должен делать? Я знаю что ассемблер это не мою, смысл это повторять? Вот вместо того чтобы унизить и тому подобное, лучше помогли.
0
Модератор
Эксперт по электронике
7522 / 3710 / 1456
Регистрация: 01.02.2015
Сообщений: 11,547
Записей в блоге: 2
20.12.2016, 21:41 14
Лучший ответ Сообщение было отмечено Milve как решение

Решение

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
data segment ;описание сегмента данных
data ends ;конец сегмента данных
 
code segment ;начало сегмента кода
start: ;метка start - начало нашей программы
    assume cs:code, ds: data ;директива компилятора
    mov ax, data ;настройка сегмента данных
    mov ds, ax ;
;--------------Очищаем экран--------------
    mov ah, 0fh ;получить параметры видеорежима
    int 10h ;
    mov ah, 00 ;установить параметры видеорежима
    int 10h ;
;--------------Вводим первый символ--------------
    mov ah, 01 ;ввод с клавиатуры и чтение с клавиатуры
    int 21h ;ввод с клавиатуры и чтение с клавиатуры
    sub al, 30h ;переводим символ в число
    mov bh, al ;запоминаем первую цифру первого числа в bh
;--------------Вводим второй символ--------------
    mov ah, 01 ;ввод с клавиатуры и чтение с клавиатуры
    int 21h ;ввод с клавиатуры и чтение с клавиатуры
    sub al, 30h ;переводим символ в число
    mov ah, bh
    mov bx, ax ;запоминаем первое число в bx
;--------------Вводим третий символ--------------
    mov ah, 01 ;ввод с клавиатуры и чтение с клавиатуры
    int 21h ;ввод с клавиатуры и чтение с клавиатуры
    sub al, 30h ;переводим символ в число
    mov ch, al ;запоминаем первую цифру первого числа в ch
;--------------Вводим четвёртый символ--------------
    mov ah, 01 ;ввод с клавиатуры и чтение с клавиатуры
    int 21h ;ввод с клавиатуры и чтение с клавиатуры
    sub al, 30h ;переводим символ в число
    mov ah, ch
 
    add ax, bx ; складываем два неупакованных BCD числа
    aaa
    mov bx, ax ; сохраняем результат в bx
;--------------Выводим символ на экран--------------
    mov al, bh
    add al, 30h ;перевести число в символ
    mov ah, 02 ;номер функции
    mov dl, al ;поместили сивол из al в dl
    int 21h ;вызов прерываний
;--------------Выводим символ на экран--------------
    mov al, bl
    add al, 30h ;перевести число в символ
    mov ah, 02 ;номер функции
    mov dl, al ;поместили сивол из al в dl
    int 21h ;вызов прерываний
 
    mov ax, 4c00h ;функция завершения программы
    int 21h ;завершаем программу
code ends ;конец сегмента кода
end start ;конец программы с точкой входа start
1
0 / 0 / 0
Регистрация: 01.12.2016
Сообщений: 30
20.12.2016, 21:46  [ТС] 15
ФедосеевПавел, Спасибо за решение!
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.12.2016, 21:46

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

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

Вывести на экран сумму и среднее арифметическое последовательности положительных чисел, введенных с клавиатуры
Доброго времени суток. Помогите пожалуйста с написанием программы. &quot;Найти и вывести на экран...

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

Среди N любых чисел, введённых с клавиатуры, определить количество двузначных чисел
Среди N любых чисел, введённых с клавиатуры, определить количество двузначных чисел.


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

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

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