Разработка программного обеспечения
Разработка программы, вызываемой из DOS, которая выполняет ввод с клавиатуры двух 4-значных шестнадцатеричных чисел, которые записываются в качестве содержимого регистров BP и DI. Вывод на экран содержимого регистров в виде шестнадцатеричных чисел.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | презентация |
Язык | русский |
Дата добавления | 16.12.2018 |
Размер файла | 206,2 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Лабораторная работа N 2
регистр программа число экран
Задание
Р а з р а б о т а й т е программу, вызываемую из DOS, которая выполняет:
1) ввод с клавиатуры двух 4-значных шестнадцатеричных чисел, которые записываются в качестве содержимого регистров BP и DI;
2) вывод на экран содержимого регистров, заполненных на шаге 1, в виде шестнадцатеричных чисел;
3) вывод на экран содержимого регистров, заполненных на шаге 1, в виде десятичных чисел;
4) вывод на экран содержимого регистров, заполненных на шаге 1, в виде двоичных чисел.
Пример информации на экране:
ВВЕДИТЕ СОДЕРЖИМОЕ РЕГИСТРА BP AD56<Enter>
ВВЕДИТЕ СОДЕРЖИМОЕ РЕГИСТРА DI 7F09<Enter>
ЧИСЛА В ШЕСТНАДЦАТЕРИЧНОЙ СИСТЕМЕ
(BP) = AD56 (DI) = 7F09
ЧИСЛА В ДЕСЯТИЧНОЙ СИСТЕМЕ
(BP) = 44374 (DI) = 32521
ЧИСЛА В ДВОИЧНОЙ СИСТЕМЕ
(BP) = 1010110101010110 (DI) = 0111111100001001
Выполнение
В рамках задания было разработано 4 программы:
главная программа (lab2.asm ) и 4 подпрограммы (ПП), вызываемые из главной:
HEXIN2, SH16, OUTINT, SHBIN.
HEXIN2 - выполняет ввод числа в шестнадцатеричном виде и помещает его в AX.
SH16 - выполняет вывод из регистра AX в шестнадцатеричном виде,
DECOUT- выполняет вывод из регистра AX в десятичном виде,
SHBIN - выполняет вывод из регистра AX в двоичном виде.
В главной программе есть процедура print, компилируемая вместе с ней;
print выводит строку символов на экран.
Дерево программ имеет вид:
lab2.asm + ПП print |
|
HEXIN2.asm |
|
SH16.asm |
|
OUTINT.asm |
|
SHBIN.asm |
Файловая структура имеет вид
lab2.asm |
main1 + print |
|
lab2-3pp.asm |
HEXIN2.asm |
|
SH16.asm |
||
OUTINT.asm |
||
SHBIN.asm |
||
lab2.obj |
||
lab2-3pp.obj |
||
lab2.com |
Имеется 2 модуля типа OBJ, компонуемые в единый файл с именем: LAB2.COM.
В файле lab2.asm и lab2.obj содержится главная процедура main1 и ПП print, а также все текстовые строки, выводимые на экран.
В lab2-3pp.asm, lab2-3pp.obj содержатся четыре ПП - HEXIN2.asm, SH16.asm, OUTINT.asm, SHBIN.asm.
Компоновка производится командной строкой: tlink /t lab2.obj+lab2-3pp.obj.
Результатом является исполняемый файл lab2.com
Блок-схема алгоритма главного модуля
lab2.asm
Блок-схема алгоритма ПП HEXIN2.asm
Блок-схема алгоритма ПП SH16.asm
Блок-схема алгоритма ПП SHBIN.asm
Блок-схема алгоритма ПП outint.asm
Тексты программ
Текст програмы LAB2.ASM
; lab2.asm
MODEL TINY
Code_seg SEGMENT PUBLIC 'CODE'
ASSUME CS:Code_seg, DS:Code_seg
ORG 100h
EXTRN hexin2:near, sh16:near, outint:near, shbin:near
Start:
main1 proc near
LEA DX, sobbp ; приглашение к вводу числа в регистр BP
call print
call hexin2 ; ввод числа в 16-ричном виде
mov bp,ax ; запоминание введенного числа в BP
LEA DX, snl ; переход на новую строку
call print
LEA dx,sobdi ; приглашение к вводу числа в регистр DI
call print
call hexin2 ; ввод числа в 16-ричном виде
mov di,ax ; запоминание введенного числа в DI
;HEX
LEA DX, sob1bp
call print
mov ax,bp
call sh16 ; вывод BP в 16-ричном виде
LEA DX, sob1di
call print
mov ax,di
call sh16 ; вывод DI в 16-ричном виде
;
; DEC
LEA DX, sob1bp
call print
mov ax,bp
call OUTINT ; вывод BP в десятичном виде
LEA DX, sob1di
call print
mov ax,di
call OUTINT ; вывод DI в десятичном виде
; BIN
LEA DX, sob1bp
call print
mov ax,bp
call shbin ; вывод BP в двоичном виде
LEA DX, sob1di
call print
mov ax,di
call shbin ; вывод DI в двоичном виде
mov ax,0; ожидание нажатия клавиши
int 16h
; выход из программы в DOS
int 20h
ret
main1 endp
print PROC NEAR ; процедура вывода строки на экран
push ax
push dx
MOV AH, 9h ; Функция вывода строки
; LEA DX, Text ; DX адрес строки
INT 21h ; Вывод строки
pop dx
pop ax
ret
print ENDP
sobbp db 'Vvedite soderzhimoe registra BP > $'
sobdi db 'Vvedite soderzhimoe registra DI > $'
sob1bp db 13,10,' (BP) = $'
sob1di db ' (DI) = $'
snldb 13,10,'$'
Code_seg ENDS
ENDStart
Текст ПП HEXIN2.ASM
;hexin2 ( вводит 4 16-ричные знака. (A-F)ТОЛЬКО НА ВЕРХНЕМ РЕГИСТРЕ!)
MODEL TINY
;Подпрограмма ввода чисел в 16-ричном виде
Code_seg SEGMENT PUBLIC
ASSUME CS:Code_seg
ORG 100h
hexin2 proc near
PUBLIC hexin2
push bx
push dx
push cx
push si
xor BX,BX ;Очистим вспомогательный регистр
mov si,4 ;счетчик вводимых знаков
inpt: mov AH,08h ;Функция ввода символа без эхо
int 21h
cmp AL,13 ;Клавиша Enter?
je done ;
cmp AL, '0' ;Меньше 'О'?
jb inpt ;Да, на повторение ввода
cmp AL,'9' ;Не больше '9'?
jbe ok ;Да, введена цифра
cmp AL,'F' ;Больше 'F'?
ja inpt ;Да, на повторение ввода
cmp AL,'A' ;Меньше 'A'
jb inpt ;Да, на повторение ввода
ok:DEC SI
JL inpt
mov AH,02h ;Введено разумное,
mov DL,AL ;Выведем символ на экран
int 21h
cmp AL,'9' ;Введена цифра?
ja letter ;Буква!
sub AL,'0' ;Введена цифра, преобразуем в число
and AX,0Fh ;Замаскируем остальные биты
jmp addd ;Ha продолжение
letter: sub AL,55 ;Введена буква, преобразуем в число
and AX,0Fh ;Замаскируем остальные биты
addd: mov CL,4 ;Умножим предыдущий результат
sal BX,CL ;на 16 сдвигом на 4 бита влево
or BX,AX ;Добавим новую цифру
jmp inpt ;Будем вводить дальше
done: mov AX,BX ;В AХ - результат = введенное число
pop si
pop cx
pop dx
pop bx
ret
hexin2 endp
Code_seg ENDS
END
Текст ПП SH16.ASM
; sh16.asm вывод в 16-ричном виде нас экран из АХ
Code_seg SEGMENT PUBLIC
ASSUME CS:Code_seg
ORG 100h
sh16proc near
PUBLIC sh16
; в AX число для перевода
; Начинаем перевод числа AX в строку
movcl,16-4 ; 16-битный регистр, будем выводить по 4 бита (0..F)
xchgdx,ax ; Сохраняем число в DX
Repeat:
movax,dx ; Восстанавливаем число в AX
shrax,cl ; Сдвигаем на CL бит вправо
andal,0Fh ; Получаем в AL цифру 0..15
addal,'0' ; Получаем в AL символ цифры
cmpal,'9' ; Проверяем цифру
jbeDigit09 ; Прыгаем, если это цифра 0..9
addal,'A'-('9'+1) ; Иначе (для A..F) корректируем ее
Digit09:pushax
pushdx
movah,02h
movdl,al
int21h ; Выводим символ в AL на экран
pop dx
pop ax
subcl,4 ; Уменьшаем CL на 4 для следующей цифры
jncRepeat ; Если знаковый CL >= 0, то повторяем
; Выходим из программы
ret
sh16endp
Code_seg ENDS
END
Текст ПП SHBIN.ASM
; shbin
MODEL TINY
Code_seg SEGMENT PUBLIC
ASSUME CS:Code_seg
ORG 100h
; в AX число для перевода
shbinproc near
PUBLIC shbin
; Начинаем перевод числа AX в битовую строку
movcl,16-1 ;16-битный регистр, будем выводить по 4 бита (0..F)
xchgdx,ax ; Сохраняем число в DX
Repeat:
movax,dx ; Восстанавливаем число в AX
shrax,cl ; Сдвигаем на CL бит вправо
andal,1 ; выделяем младший бит
addal,'0' ; Получаем в AL символ
pushax
pushdx
movah,02h
movdl,al
int21h ; Выводим символ в AL на экран
pop dx
pop ax
subcl,1 ; Уменьшаем CL на 1 для следующей цифры
jncRepeat ; Если CF не равен 1, то повторяем
; Выходим из программы
ret
shbinendp
Code_seg ENDS
END
Текст ПП outint.asm
;outint.asm
outint proc near ; процедура вывода числа в 10-ичном виде из ax со знаком
public outint
push cx
push bx
push dx
; Проверяем число на знак.
; test ax, ax
; jns oi1
; Если оно отрицательное, выведем минус и оставим его модуль.
; mov cx, ax
; mov ah, 02h
; mov dl, '-'
; int 21h
; mov ax, cx
; neg ax
; Количество цифр будем держать в CX.
oi1:
xor cx, cx
mov bx, 10 ; основание сс. 10 для десятеричной и т.п.
oi2:
xor dx,dx
div bx
; Делим число на основание сс. В остатке получается последняя цифра.
; Сразу выводить её нельзя, поэтому сохраним её в стеке.
push dx
inc cx
; А с частным повторяем то же самое, отделяя от него очередную
; цифру справа, пока не останется ноль, что значит, что дальше
; слева только нули.
test ax, ax
jnz oi2
; Теперь приступим к выводу.
mov ah, 02h
oi3:
pop dx
; Извлекаем очередную цифру, переводим её в символ и выводим.
add dl, '0'
int 21h
; Повторим ровно столько раз, сколько цифр насчитали.
loop oi3
pop dx
pop bx
pop cx
ret
outint endp
Приложение 1
Файл lab2.com
Приложение 2
Скриншот выполнения программы
Вывод: программа работает правильно.
Размещено на Allbest.ru
...Подобные документы
Разработка ввода с клавиатуры и вывода на экран монитора данных с помощью стандартных функций printf и scanf. Ввод количества материальных точек. Работа с линейным списком. Хранение содержимого списка в блоке ячеек памяти с последовательными адресами.
курсовая работа [176,8 K], добавлен 18.01.2016Составление программы сортировки по возрастанию массив из 20 шестнадцатеричных чисел, просматривающей все исходные числа во внешней памяти и выбирающей самое большое число. Блок-схема алгоритма работы программы. Таблица команд и число их выполнения.
курсовая работа [23,1 K], добавлен 24.05.2015Разработка программы обработки числовых последовательностей с кодом на языке Pascal, которая должна выполнять функции ввода количества чисел с клавиатуры, перебора всех возможных сочетаний элементов, определения их сумм и вывода информации на экран.
практическая работа [432,0 K], добавлен 09.04.2010Создание программы для выполнения простейших математических функций с применением языка программирования ObjectPascal. Проектирование графического интерфейса Калькулятора двоичных и шестнадцатеричных систем. Описание алгоритма на естественном языке.
курсовая работа [115,4 K], добавлен 19.05.2014Разработка программы, которая выполняет удаление элементов внешних таблиц, а также очистку файлов, вывод таблиц на экран. Описание программного продукта. Выбор языка программирования. Схема информационных потоков. Комплект поставки и инсталляция.
курсовая работа [180,0 K], добавлен 09.03.2009Ввод данных в ячейки, редактирование содержимого. Автозаполнение формулами, ввод чисел. Выделение диапазона ячеек и операции над ними. Вычисления в электронных таблицах. Абсолютные и относительные ссылки. Электронная ведомость начисления зарплаты.
контрольная работа [217,1 K], добавлен 19.04.2011Участие регистров ввода-вывода в работе периферийных устройств. Отражение состояния периферийных устройств в состоянии разрядов регистров состояния. Перечень имен и номеров регистров ввода-вывода, управления и состояния микроконтроллеров разных типов.
курсовая работа [171,2 K], добавлен 22.08.2010Разработка программы, которая выявляет в прямоугольной матрице все подматрицы, состоящие только из m-значных целых чисел. Использование компилируемого языка программирования общего назначения C/C++. Обработка алгоритмов, кодирование программных средств.
курсовая работа [980,1 K], добавлен 05.03.2015Формирование устойчивой последовательности псевдослучайных чисел с использованием метода "середины квадрата". Разработка программы для определения среднего значения чисел, среднего значения квадратов чисел и дисперсии для последовательности из 20 чисел.
лабораторная работа [1,4 M], добавлен 21.01.2015Редактирование в трехмерном пространстве. Команды редактирования, способы изменения значений параметров. Ввод и редактирование содержимого ячеек. Рабочие книги и листы. Ввод текста, чисел, исправление, формулы. Создание презентации в режиме структуры.
контрольная работа [151,7 K], добавлен 22.02.2011Изучение языка низкого уровня ассемблер для написания примера программы для 16 битного приложения. Разработка и реализация алгоритма поднесения чисел к степени чисел над полем за основанием 2 (mod 2). Иллюстрация техники создания DOS приложения.
курсовая работа [33,3 K], добавлен 08.11.2011Процедура ввода исходных данных в программу, вывод результатов работы программы на экран. Принцип организации хранения логически связанных наборов информации в виде файлов. Параметры характеристики файла, способы обращения к нему, соглашения по типу.
реферат [14,5 K], добавлен 06.12.2011Ввод и вывод чисел при помощи подключаемого модуля IO. Особенности работы с одномерными и двухмерными массивами. Тестирование состояние флагов. Рринципы и навыки работы с компилятором и отладчиком. Разработка схемы алгоритма программы на языке ассемблер.
курсовая работа [1,3 M], добавлен 02.12.2009Структурная схема микроконтроллера, процесс разработки принципиальной схемы и программного обеспечения. Конфигурирование регистров аналого-цифрового преобразователя. Код программы на языке Assembler, конфигурирование регистров внешних прерываний.
курсовая работа [267,5 K], добавлен 08.06.2019Разработка программы для выполнения арифметических операций с комплексными числами. Разработка эскизного проекта. Диаграмма последовательностей и классов. Разработка и описание программы. Разработка программного кода и руководства пользователя.
курсовая работа [1,2 M], добавлен 25.11.2011Разработка программы, которая создает в отдельном потоке случайный массив целых чисел в заданном диапазоне и выводит на экран эти числа. Описание общего алгоритма, интерфейс программы. Методы решения и алгоритмы задач, реализуемых каждым потоком.
курсовая работа [372,6 K], добавлен 17.04.2014Написание программы для генерации случайных чисел, в которой реализуются возможности генерации абсолютно случайных чисел. Приложение на языке С/С++. Описание узла, содержащего данные; функций и методов работы; чтения данных из памяти и вывода их на экран.
курсовая работа [172,4 K], добавлен 23.05.2012Разработка программы на языке VBA для управления деятельностью птицеводческой фермы, которая вводит исходные данные, выполняет расчеты и выводит на экран расчет данных по уходу за гусями и показатели оценки эффективности организации птицеводства.
курсовая работа [1,8 M], добавлен 19.04.2011Разработка схемы базы данных для хранения журнала событий холодильника. Передача содержимого журнала в компьютер, подсоединенный к специальному гнезду на корпусе холодильника. Концептуальное и логическое проектирование программы встроенного процессора.
курсовая работа [1,9 M], добавлен 20.11.2020Разработка игровой программы "Frag the monster", которая осуществляет вывод на экран случайным образом врагов, основного игрока и дополнительных объектов (оружия). Обоснование выбора языка программирования - С++. Интерфейс и принцип работы программы.
курсовая работа [3,2 M], добавлен 27.12.2011