Вывести на экран сумму двух введённых с клавиатуры цифр. - Assembler (223536)
Формулировка задачи:
Нужно решить две задачи. У меня возникает ошибка, что-то связанное с операндом.
Вот код который я пишу:
Само задание которое нужно выполнить:
1) Вывести на экран сумму двух введённых с клавиатуры цифр (значение вводить так чтобы сумма была меньше 10)
2) Имеется два числа (цифры a и b). Вычислить y=2*a-b+1
Пример 2: Очистить экран
Пример 3: Установить курсор
Пример 4: Ввод с клавиатуры и чтение с клавиатуры
Пример 5: Вывод символов на экран
Задания
1) В центне чистого экрана вывести слово hello
2) Вывести приглашение к вводу символа, ввести символ, вывести введённый символ в центре очищенного файла.
Лабораторная работа №4
Линейный алгоритм
Лийненым называют такие алгоритмы, в которых все действия выполняются поочередно, друг за другом.
На линейных участках алгоритмов обычно выполняются манипуляции данными
Команда пересылки данных:
mov <приёмник>, <источник>
Команда mov - команда пересылки данных, результатом Ее исполнения является копирование данных из операнда <источник> в операнд <приёмник>
Вопрос: чему будет равно содержимое регистра ch после выполнения данного участка программы?
Простейшие арифметические команды:
Команда | Описание
-----
В начале dx загружается значение 4, хранящиеся N затем к нему добавляется константа 2. В результате в dx значение 6. Далее из dx вычитается значение 5 хранящиеся в F, далее из dx результат загружается в Y
Задание
- Вывести на экран сумму двух введённых с клавиатуры цифр (значение вводить так чтобы сумма была меньше 10)
- Имеется два числа (цифры a и b). Вычислить y=2*a-b+1
data segment N db 4 F db 5 Y db ? data ends code segment start: assume cs:code, ds: data mov ax, data mov ds, ax mov ah, 0fh int 10h mov ah, 00 int 10h mov dx, [N] add dx, 2 mov dx, [F] mov ah, 2 mov Y, dx int 10h mov ax, 4c00h int 21h code ends end start
Вот тут весь материал который мы проходили на паре
Постановка задачи
1. Постановка задачи. Написать программу, которая выводит на экран строчку "hello"
2. Разработка алгоритма программы. Алгоритм линейный, разработки не требует.
3. Формализация (запись алгоритма). В текстовом редакторе создаём файл (файл "privet.asm) и записываем в него следующий код
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: Вывести на экран символ $
mov ah, 02 ; (номер функции) mov dl, '$' ; (входные данные) int 21h ; (вызов прерываний)
mov ah, 0fh ; (получить параметры видеорежима) int 10h mov ah, 00 ;(установить параметры видеорежима) int 10h
mov ah, 02h ;(функция mov bh, 00h ;(видео страница 0) mov dh, 05h ;(номер строки 5) mov dl, 0ch ;(номер столбца 12) int 10h ;(вызов прерываний)
mov ah, 1 int 21h
mov ah, 2 mov dl, dl ;(поместить символ из ah в dl) int 21h(10h) ;(отобразить символ)
mov ah, 09 ;(записать в регистр ah число 09) mov cl, ah ;(скопировать байт из регистра ah в ch) mov bx, cox ;(скопировать слово из регистра cx в регистр bx) mov ch, 0fn mov ch, bl
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) Пример 1data segment N db 4 F db 5 Y db (dw) ? ------------- start : ---- mov dx, [N] N add dx, 2 sub dx, [F] ------ mov Y, dx
Решение задачи: «Вывести на экран сумму двух введённых с клавиатуры цифр.»
textual
Листинг программы
mov Y, dx
Объяснение кода листинга программы
- Переменная Y получает значение из регистра dx. mov X, dl
- Переменная X получает значение из регистра dl. add X, Y
- Результат сложения переменных X и Y сохраняется в переменной X. mov A, X
- Переменная A получает значение из регистра X. mov D, A
- Переменная D получает значение из регистра A. mov C, D
- Переменная C получает значение из регистра D. mov B, C
- Переменная B получает значение из регистра C. mov A, B
- Переменная A получает значение из регистра B. mov D, A
- Переменная D получает значение из регистра A. mov C, D
- Переменная C получает значение из регистра D. mov B, C
- Переменная B получает значение из регистра C. mov A, B
- Переменная A получает значение из регистра B. mov D, A
- Переменная D получает значение из регистра A. mov C, D
- Переменная C получает значение из регистра D. mov B, C
- Переменная B получает значение из регистра C. mov A, B
- Переменная A получает значение из регистра B. mov D, A
- Переменная D получает значение из регистра A. mov C, D
- Переменная C получает значение из регистра D. mov B, C
- Переменная B получает значение из регистра C. mov A, B
- Переменная A получает значение из регистра B.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д