СП - ЛР 7 (Готовая лаба №7)

2018-01-09СтудИзба

Описание файла

Файл "СП - ЛР 7" внутри архива находится в следующих папках: Готовая лаба №7, [СП] ЛР 7. Документ из архива "Готовая лаба №7", который расположен в категории "". Всё это находится в предмете "системное программирование" из 4 семестр, которые можно найти в файловом архиве МГТУ им. Н.Э.Баумана. Не смотря на прямую связь этого архива с МГТУ им. Н.Э.Баумана, его также можно найти и в других разделах. Архив можно найти в разделе "лабораторные работы", в предмете "системное программирование" в общих файлах.

Онлайн просмотр документа "СП - ЛР 7"

Текст из документа "СП - ЛР 7"

Согласовано:

Гапанюк Ю.Е.

"__"_____________2010 г.

Утверждаю:

Большаков С.А.

"__"_____________2010 г.

Лабораторная работа №7 по курсу

Системное программирование

"Ввод адреса – числа в шестнадцатеричном виде"

6

(количество листов)

ИСПОЛНИТЕЛЬ:

студент группы ИУ5-41

________________

Сидякин А.А.

"03" апреля 2010 г.



Москва - 2010

__________________________________________________________

Цель лабораторной работы:

Разработать и отладить программу на языке Ассемблер для ввода с клавиатуры четырёхразрядного числа и представления его в шестнадцатеричном и десятичном виде

Исходный текст программы:

; Лабораторная работа №7

;===============================================================================

prgr segment

assume CS:prgr,DS:data ; соответствие сегментных регистров

begin: mov AX,data ; сначала ES будет

mov DS,AX ; соответствовать сегменту data

mov AX,02h

int 10h

; элементы фен-шуя, всякие гритсы и инструкции

mov AH,09h

mov DX,offset fngsh8

int 21h

CALL CLRF

mov AH,09h

mov DX,offset fngsh1

int 21h

CALL CLRF

mov AH,09h

mov DX,offset fngsh2

int 21h

CALL CLRF

mov AH,09h

mov DX,offset fngsh6

int 21h

CALL CLRF

mov AH,09h

mov DX,offset fngsh3

int 21h

CALL CLRF

mov AH,09h

mov DX,offset fngsh7

int 21h

CALL CLRF

mov AH,09h

mov DX,offset fngsh6

int 21h

CALL CLRF

CALL CLRF

mov SI,0 ; это будет следить за максимум 4 символа на ввод

mov BX,0 ; я уже не помню, зачем его обнулять, пусть будет

inpr: CALL inpthex ; процедура ввода чисел построчно и посимвольно

write: cmp AL,27 ; если мы сюда попали после нажатия ESC

je close ; то завершить программу, пойдём в close

mov buf,BX ; скинем полученное число из регистра в слово

push BX

mov AH,40h

mov BX,1

mov CL,4

mov DX,offset inp ; это мы вывели что ввели, в 16-м виде

int 21h

mov AH,02h

mov DL,' ' ; пробел, для фен-шуя

int 21h

push AX ; схоронили всё, что можно

push BX ; можно было бы и через pusha,

push CX ; но компейлятор сказал, что мой...

push DX ; ...процессор такую команду не поддерживает

CALL hex2dec ; процiдурка получения 10-го числа

pop DX ; всё подняли, потому что popa и так далее

pop CX

pop BX

pop AX

push SI

mov SI,0

clr: mov inp[SI],32 ; потрём на нули, на всякий, в этой редакции...

inc SI ; уже неактуально, но в предыдущих надо было

loop clr

pop SI

pop BX

mov tmpbuf,BX ; во темповскую строку, но тоже уже неактуально...

CALL CLRF ; ...как в анекдоте про джедая, падавана и солнце

mov SI,0

jmp inpr

close: CALL CLRF

CALL CLRF

mov AH,09h

mov DX,offset msg

int 21h

CALL GETCH

mov AX,02h

int 10h

mov AH,09h

mov DX,offset fngsh4

int 21h

CALL CLRF

mov AH,09h

mov DX,offset fngsh5

int 21h

CALL CLRF

CALL CLRF

CALL GETCH

mov AX,02h

int 10h

mov AX,4C00h

int 21h

er: mov AH,02h

mov DL,' '

int 21h

mov AH,09h

mov DX,offset erro

int 21h

CALL CLRF

mov SI,0

jmp inpr

; ------------------------------------------------------------------------------

CLRF proc ; процедура переноса строки и возврата каретки

mov AH,02h

mov DL,10

int 21h

mov DL,13 ; символ возврата каретки

int 21h

RET

CLRF endp

; ------------------------------------------------------------------------------

GETCH proc ; процедура ввода символа

mov AH,01h

int 21h

RET

GETCH endp

; ------------------------------------------------------------------------------

hex2dec proc

; делим шестнадцатеричного на 10 до упора

mov CX,0 ; количество цифр в десятичном числе

xor AX,AX ; на всякий...

xor BX,BX ; ...случай обнуляем...

xor DX,DX ; ...содержимое регистров

mov AX,buf ; в AX исходное шестнадцатеричное слово

mov BX,10 ; основание системы счисления

dvsn: div BX ; делим AX на BX, результат в AX, остаток в DX

push DX ; скинули остаток в стек

xor DX,DX ; обнулили DX, иначе повлияет на деление

inc CX ; увеличили счётчик количества цифр в числе

test AX,AX ; если пока ещё делится нацело,

jnz dvsn ; то делим ещё раз

; вывод десятичного числа поциферно

mov AH,02h

ot: pop DX ; подняли первую цифру десятичного числа

add DX,'0' ; получили её ASCII-код

int 21h ; вывели на экран

loop ot ; повторять CX раз (по количеству цифр)

RET

hex2dec endp

; ------------------------------------------------------------------------------

inpthex proc

inpt: mov AH,08h ; функция ввода символа без его показа

int 21h

cmp AL,13 ; если это ENTER,

je er1 ; то обломайтунг, введено не 4 символа, по новой

cmp AL,27 ; если вжали ESC,

je fin ; то на завершение

cmp AL,'0' ; если код введённого символа...

jb inpt ; меньше кода 0, то по новой

cmp AL,'9' ; если код введённого символа...

jbe ok ; меньше или равен коду 9, то ништяк

cmp AL,'F' ; если код введённого символа...

ja inpt ; больше кода F, то по новой

cmp AL,'A' ; если код введённого символа...

jb inpt ; меньше кода A, то по новой

ok: mov AH,02h

mov DL,AL ; засчитаем введённое и покажем

int 21h

mov inp[SI],AL ; а также запишем в массив

inc SI

cmp AL,'9' ; проверим, что это у нас

ja letter ; если код больше кода 9, то буква

sub AL,'0' ; вычтем из кода 48, получим реально цифру

and AX,0Fh ; затрём остальные биты регистра

jmp addd

letter: sub AL,55 ; а из буквы вычитаем 55

and AX,0Fh ; тоже потёрли все остальные биты

addd: mov CL,4 ; умножить на 16,

sal BX,CL ; сдвинуть на 4 бита влево,

or BX,AX ; добавить новую цифру

cmp SI,4

jae done ; если уже 4 введено, то всё,

jmp inpt ; а если нет, то до победного

er1: jmp er ; а это прыжок на обработчик ENTER'а

done: mov AH,09h

mov DX,offset equa ; феншуйная строка

int 21h

fin: RET

inpthex endp

; ------------------------------------------------------------------------------

prgr ends ; конец сегмента команд

; -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

data segment ; начало сегмента данных

msg db 'Press any key to exit... $'

def db ' - $'

equa db ' = $'

inp db 4 dup (32)

buf dw 0

tmpbuf dw 0

decstr db 4 dup (32)

fname db 'nums.dat',0

handle dw 0

erro db 'be much more attentive, man. You must enter four digits$'

fngsh8 db '__________________________________________$'

fngsh1 db '| This program converts HEX number to DEC |$'

fngsh2 db '| Input HEX number by entering four chars |$'

fngsh3 db 'NOTICE: program takes only HEX-chars$'

fngsh7 db 'if you want to exit, just press ESC$'

fngsh4 db 'Program has finished correctly. There are no other ways$'

fngsh5 db '...because it is made by me, Ivanov Ivan, student of IU5-41$'

fngsh6 db '------------------------------------------------------------$'

data ends ; конец сегмента данных

; -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

stk segment stack ; начало сегмента стека

db 256 dup (0) ; резервирование 256 байт для стека

stk ends ; конец сегмента стека

; -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

end begin ; конец текста программы, установка точки входа

;===============================================================================

Листинг программы:

Листинга получилось настолько много и он так сильно съехал по строкам из-за комментариев и табуляций редактора, что приводить его здесь представляется нецелесообразным. Он будет приложен к исполняемому модулю и предъявлен при защите по требованию преподавателя

Результат работы программы:

__________________________________________

| This program converts HEX number to DEC |

| Input HEX number by entering four chars |

--------------------------------------------------------------

NOTICE: program takes only HEX-chars, any others are forbidden

if you want to exit, just press ESC

--------------------------------------------------------------

ABCD = ABCD 43981

1234 = 1234 4660

1111 = 1111 4369

000A = 000A 10

AF be much more attentive, man. You must enter four digits

DDDD = DDDD 56797

FFFF = FFFF 65535

Be much more attentive, man. You must enter four digits

00AC = 00AC 172

Press any key to exit...

Блок-схема программы:

Свежие статьи
Популярно сейчас
А знаете ли Вы, что из года в год задания практически не меняются? Математика, преподаваемая в учебных заведениях, никак не менялась минимум 30 лет. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5173
Авторов
на СтудИзбе
437
Средний доход
с одного платного файла
Обучение Подробнее