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

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

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

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

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

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

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

Гапанюк Ю.Е.

"__"_____________2010 г.

Утверждаю:

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

"__"_____________2010 г.

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

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

"Ввод и распечатка параметров командной строки"

8

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

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

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

________________

Сидякин А.А.

"28" марта 2010 г.



Москва - 2010

__________________________________________________________

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

Разработать и отладить программу на языке Ассемблер для ввода анализа и распечатки параметров командной строки при запуске программы (параметры в области PSP со смещением 081h)

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

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

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

prgr segment

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

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

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

; копируем параметры запуска

mov SI,80h ; а DS указывает на PSP, и берём 80h от PSP

mov DI,offset dest ; помещаем строку-приёмник dest в ES:DI

mov CL,[SI] ; получаем длину строки параметров

cmp CL,0 ; проверяем, есть ли они вообще

je nope ; если нету, то пойдём в метку nope

mov CH,0 ; на всякий случай запилим ноль в старший AX

push CX ; схоронили AX

inc SI ; перешагнули с длины строки на пробел (81h)

inc SI ; перешагнули с пробела на первый символ (82h)

cld ; направление - восток

rep movsb ; копировать из DS:SI в ES:DI, побайтово CL раз

push ES ; скинули ES

pop DS ; подняли DS, теперь они оба указывают на data

jmp yeap ; попрыгали дальше

nope: mov AX,data ; тут надо перенести DS с начала PSP

mov DS,AX ; на начало data, иначе строку не найдёт

mov AH,09h ; функция вывода на экран строки

mov DX,offset oblom ; обломахтунг

int 21h ; вызвали DOS

jmp fin ; попрыгали в конец, параметров нет

yeap:

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

; проверяем первый параметр

mov SI,offset dest ; копируем из dest, там сейчас строка параметров

mov DI,offset tmp1 ; в tmp1, нам надо получить первый параметр,

mov CL,4 ; поэтому берём 4 символа (он фиксированный)

rep movsb ; копировать побайтово CL раз

mov DI,offset par11 ; теперша в DI кладём эталон

mov SI,offset tmp1 ; а в SI - полученный параметр

mov CL,4 ; устанавливаем CL на 4 символа

repe cmpsb ; и сравниваем их посимвольно, до расхождения

jne frst2 ; если не совпадают, то пошли ещё проверим

mov p1[1],1 ; если совпало, то ништяк, переменная в 01

jmp next2 ; попрыгали дальше

frst2: mov DI,offset par12 ; тут всё то же самое, просто проверяем вариации,

mov SI,offset tmp1 ; потому что надо учесть заглавные и обычные,

mov CL,4 ; поэтому вместо двух, /C=y и /C=n мы проверяем

repe cmpsb ; ещё и /C=Y и /C=N, а вообще,

jne frst3 ; надо ещё и C/c проверять, но тут организм

mov p1[1],1 ; резко воспротивился и забил на это дело,

jmp next2 ; потому что тупо рутина, ничего критичного нет

frst3: mov DI,offset par13

mov SI,offset tmp1

mov CL,4

repe cmpsb

jne frst4

jmp next2

frst4: mov DI,offset par14

mov SI,offset tmp1

mov CL,4

repe cmpsb

jne err1

jmp noer2

err1: mov AH,09h ; ахтунг, ошибка

mov DX,offset error1 ; вывели сообщение

int 21h

jmp fin ; и на выход

noer2:

; проверяем второй параметр

next2: mov SI,offset dest ; вся та же кутерьма

add SI,5 ; но - параметр может быть пропущен,

mov DI,offset tmp2 ; а на его месте быть третий, и это

mov CL,2 ; мы учитываем следующим образом:

rep movsb ; проверка третьего параметра будет

mov DI,offset par21 ; в двух вариантах: первый - это то что

mov SI,offset tmp2 ; он начинается с шестого символа (при

mov CL,2 ; отсутствии второго параметра) и

repe cmpsb ; второй - это что он будет начинаться

jne scn2 ; с девятого символа (если второй есть)

mov p2[1],1 ; вот тут запоминается, что второй - есть

jmp thrd2 ; и прыгается во второй вариант проверки

scn2: mov DI,offset par22 ; второй параметр может быть трёх видов,

mov SI,offset tmp2 ; потому и проверяем его в три этапа

mov CL,2 ; там определены /H, /h и /?

repe cmpsb

jne scn3

mov p2[1],1

jmp thrd2

scn3: mov DI,offset par23

mov SI,offset tmp2

mov CL,2

repe cmpsb

jne next3

mov p2[1],1

jmp thrd2

; проверяем третий параметр

next3: mov SI,offset dest ; вот первый вариант проверки

add SI,5 ; с шестого символа

mov DI,offset tmp3

mov CL,9 ; потому что пароль фиксированный

rep movsb

mov DI,offset pass

mov SI,offset tmp3

mov CL,9

repe cmpsb

jne err3

jmp noer3

thrd2: mov SI,offset dest ; вот второй вариант проверки

add SI,8 ; с девятого символа

mov DI,offset tmp3

mov CL,9 ; меняется в строке pass

rep movsb

mov DI,offset pass

mov SI,offset tmp3

mov CL,9

repe cmpsb

jne err3

jmp noer3

err3: mov AH,09h ; неверный либо не введённый пароль

mov DX,offset error3 ; сообщение об отказе в доступе

int 21h

jmp fin ; и на выход

noer3:

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

cmp p1[1],1 ; если параметр очиски экрана

jne clrn ; говорит НИХТ, то не очищаем

mov AX,02h ; иначе очистка экрана

int 10h ; через прерывание BIOS по видеорежиму

clrn:

cmp p2[1],1 ; есть параметр справки?

jne inp2 ; нету - тогда скажем об этом

mov AH,09h ; есть - вываливаем справку

mov DX,offset hlp1

int 21h

CALL CLRF

mov AH,09h

mov DX,offset hlp2

int 21h

CALL CLRF

CALL CLRF

inp: mov AH,09h ; а тут ждём, пока юзверь нажмёт *

mov DX,offset inf

int 21h

mov AH,01h

int 21h

cmp AL,42

je nxt

mov AH,02h

mov DL,8

int 21h

mov AH,02h

mov DL,0

int 21h

mov AH,02h

mov DL,13

int 21h

loop inp ; иначе жать ему на всё остальное вечно

jmp greet

inp2: mov AH,09h

mov DX,offset hlpno

int 21h

mov AH,01h ; а тут ждём, пока юзверь нажмёт ENTER

int 21h

cmp AL,13

je nxt

mov AH,02h

mov DL,8

int 21h

mov AH,02h

mov DL,0

int 21h

mov AH,02h

mov DL,13 ; ENTER по ASCII, ахахахаха, жалкие людишки!

int 21h

loop inp2 ; иначе жать ему на всё остальное вечно

nxt: CALL CLRF

CALL CLRF

greet:

nxt3: mov AH,09h ; фен-шуй в виде небольшой информации

mov DX,offset param

int 21h

mov AH,40h ; функция DOS вывода на экран строки

mov BX,1 ; дескриптор экрана

pop CX

mov DX,offset dest ; адрес строки кладём в DX

int 21h

CALL CLRF

mov AH,40h

mov BX,1

mov CX,23

mov DX,offset def ; фен-шуй из дефисов

int 21h

CALL CLRF

mov AH,09h

mov DX,offset frst

int 21h

mov AH,40h

mov BX,1

mov CX,4

mov DX,offset tmp1

int 21h

CALL CLRF

mov AH,09h

cmp p2[1],1 ; если параметр справки есть,

jne pr2 ; ...а если нету, то вон туда...

mov DX,offset scnd1 ; то выведем одно

int 21h

mov AH,40h

mov BX,1

mov CX,2

mov DX,offset tmp2

jmp nxt2

pr2: mov DX,offset scnd2 ; выведем другое

nxt2: int 21h

CALL CLRF

mov AH,09h

mov DX,offset thrd

int 21h

mov AH,40h

mov BX,1

mov CX,9

mov DX,offset stars ; покажем звёздачке, не пароль же выводить

int 21h

CALL CLRF

CALL CLRF

mov AH,09h

mov DX,offset msg

int 21h

CALL GETCH

mov AH,02h

mov DL,8

int 21h

mov AH,02h

mov DL,0

int 21h

CALL CLRF

cmp p1[1],1 ; тут опять проверка параметра

jne fin ; очистки экрана и всё такое

mov AX,02h

int 10h

fin: mov AX,4C00h

int 21h

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

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

mov AH,02h

mov DL,10 ; символ новой строки

int 21h

mov AH,02h

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

int 21h

RET

CLRF endp

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

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

mov AH,01h

int 21h

RET

GETCH endp

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

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

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

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

param db 'Line of parameters are: $'

frst db '+ first parameter is: $'

scnd1 db '+ second parameter is: $'

scnd2 db '- there is no second parameter $'

p1 db 2 dup (0)

p2 db 2 dup (0)

thrd db '+ third parameter is: $'

def db 23 dup ('-')

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

dest db 20 dup ('#')

oblom db 'There are no paremeters, dude$'

error1 db 'Error of the first parameter$'

error3 db 'Access denied, ololo$'

par11 db '/C=y'

par12 db '/C=Y'

par13 db '/C=n'

par14 db '/C=N'

par21 db '/h'

par22 db '/H'

par23 db '/?'

tmp1 db 4 dup ('1')

tmp2 db 2 dup ('2')

tmp3 db 9 dup ('3')

pass db '/K=ivanov'

hlp1 db 'This program just shows, how to use launch-parameters$'

hlp2 db 'created by Ivanov Ivan, student of IU5-41 group, var.20$'

inf db 'Press * to continue $'

stars db 9 dup ('*')

hlpno db 'There is no spoon... Press ENTER $'

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

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

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

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

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

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

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

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

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

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

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

1) при запуске без параметров на экран выводится соответствующее сообщение и работа программы завершается

2) при неправильном либо отсутствующем первом параметре в любом случае на экран выводится соответствующее сообщение и работа программы завершается

3) при неверном пароле (третий параметр) на экран выводится сообщение об отказе в доступе и работа программы завершается

4) при отсутствующем втором параметре на экран выводится сообщение о том, что отсутствует справка и программа переходит в режим ожидания нажатия клавиши ENTER, после чего программа продолжает выполняться:

There is no spoon... Press ENTER

Line of parameters are: /C=y /K=ivanov

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

+ first parameter is: /C=y

- there is no second parameter

+ third parameter is: *********

Press any key to exit...

5) при запуске со всеми тремя верными параметрами программа работает следующим образом:

This program just shows, how to use launch-parameters

created by Ivanov Ivan, student of IU5-41 group, var.20

Press * to continue *

Line of parameters are: /C=y /h /K=ivanov

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

+ first parameter is: /C=y

+ second parameter is: /h

+ third parameter is: *********

Press any key to exit...

6) Первый параметр влияет на очистку экрана до начала выполнения основной части программы и после её завершения

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

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