Технология создания ассемблерных программ




Остренок ЗКІт-151

РАБОТА С КОНСОЛЬЮ

1.1 Цель работы

Научиться выполнять в консоли основные действия в файлами, папками и по поиску данных на диске. Создать начальный навык работы с консолью, убедиться, что многие действия в консоли выполняются нисколько не хуже, а порой и лучше, чем в графическом интерфейсе пользователя (GUI) операционной системы (ОС) Windows. На основании этого снять предубеждение, что «консоль – это плохо».

1.2 Выполнение работы

1.2.1 Навигация по дискам и папкам

Сценарий для самостоятельной обработки:

а) C: Enter

б) Cd \ Enter

в) Cd u, далее повторно нажимать Tab, пока не дойдете до Users, ввести \, повторноTab до своего имени пользователя, Enter.

г) Cls enter

д) Dir enter. Alt-PrintScreen сделает скриншот1. Сохранить скриншот.

е) D: enter

ж) Cd \ enter

з) Cd m tab…tab до появления MASM32, enter

и) Cls enter

к) Dir /w enter. Alt-PrintScreen сделает скриншот2. Сохранить скриншот.

Вопросы:

1) Каков смысл действий а) и е)?

2) Что делает cd \?

3) Какую роль выполняет Tab в действиях в) и з)?

4) Что делает cls?

5) Вставить в отчет скриншоты 1 и 2 (пункты д) и к)).

6) Пояснить на примере этих скриншотов, чем отличается выполнение dir от выполнения dir /w.

Ответы:

1) Переход на другой раздел жесткого диска

2) Меняет текущую директорию

3) Автодополнение

4) Очистка окна консоли

5)

Рисунок 1.1 – Результат выполнения команды Dir с пункта д)

Рисунок 1.2 – Результат выполнения команды Dir c пункта к)

6) Dir выводит подробную информацию о каждой папке и файле текущего каталога, а флаг /w осуществляет форматированый вывод лишь имен каталогов и файлов.

 

1.2.2 Поиск файлов и папок по имени или шаблону

а) Перейти в исходное состояние: как после действия г) предыдущего пункта.

б) Ознакомиться с dir /?

в) Echo -----------------------------------dir1 > dir1.txt

г) DIR /b /s /a-d d:\masm32\masm*.* >> dir1.txt

д) Type dir1.txt

е) Echo -----------------------------------dir2 >> dir1.txt

ж) DIR /b /s /ad d:\masm32\m*.* >> dir1.txt

з) Type dir1.txt

и) Where /?

к) Echo --------------------------where1 > where1.txt

л) Where /r d:\masm32 masm*.* >> where1.txt

м) Echo --------------------------where2 >> where1.txt

н) Where /r d:\masm32 /f masm*.* >> where1.txt

о) Type where1.txt

Содержимое файла dir1.txt:

------------------------------dir1

d:\masm32\examples\exampl10\masm1k\masm1k.asm

d:\masm32\examples\exampl10\masm1k\masm1k.exe

d:\masm32\examples\exampl10\masm1k\masm1k.inc

d:\masm32\help\masm32.chm

d:\masm32\help\masmlib.chm

d:\masm32\include\masm32.inc

d:\masm32\include\masm32rt.inc

d:\masm32\lib\masm32.lib

d:\masm32\m32lib\masm32.inc

d:\masm32\m32lib\masm32.lib

d:\masm32\tutorial\dlltute\masmdll.htm

-------------------------------dir2

d:\masm32\m32lib

d:\masm32\macros

d:\masm32\examples\advanced\msort

d:\masm32\examples\bcraven\mvolume

d:\masm32\examples\exampl01\minifile

d:\masm32\examples\exampl01\minimum

d:\masm32\examples\exampl02\mdidemo

d:\masm32\examples\exampl04\multiwin

d:\masm32\examples\exampl05\menudemo

d:\masm32\examples\exampl06\mob

d:\masm32\examples\exampl07\mmfdemo

d:\masm32\examples\exampl08\mntest

d:\masm32\examples\exampl09\maketbl

d:\masm32\examples\exampl10\masm1k

d:\masm32\examples\exampl10\MemInfoMicro

d:\masm32\examples\exampl10\threads\mprocasm

d:\masm32\examples\exampl10\threads\multhread

d:\masm32\examples\exampl10\threads\multidl

d:\masm32\tools\makecimp

d:\masm32\tools\maketbl

Вопросы:

1) Как сработала часть «> dir1.txt» в действии в)?

2) Словами изложить, что делалось в действии г)?

3) Как сработала часть «>> dir1.txt» в действии г)?

4) Чем отличаются операции > и >> в командной строке?

5) Что сделали действия д) и з)?

6) Словами изложить, что делалось в действии ж) и чем оно отличается от действия г)?

Ответы:

1) Попыталась отыскать файл dir1.txt, после того как данный файл не был обнаружен она создала требуемый файл и перенаправила стандартный поток вывода(СПВ) в файл

2) Команда dir вывела в СПВ только имена не каталогов, содержащихся в каталоге d:\masm32, а также всех подкаталогах, соответствующих шаблону, после чего поток был перенаправлен в файл в режиме записи в конец.

3) Дописала в конец файла СПВ

4) Операция > затирает имеющуюся информацию при записи, в то время как >> дописывает в конец

5) Вывели содержимое файла на консоль

6) Выполняются те же операции, но теперь поиск ведется только по каталогам и другому шаблону.

Содержимое файла where.txt:

-----------------------------where1

d:\masm32\examples\exampl10\masm1k\masm1k.asm

d:\masm32\examples\exampl10\masm1k\masm1k.exe

d:\masm32\examples\exampl10\masm1k\masm1k.inc

d:\masm32\help\masm32.chm

d:\masm32\help\masmlib.chm

d:\masm32\include\masm32.inc

d:\masm32\include\masm32rt.inc

d:\masm32\lib\masm32.lib

d:\masm32\m32lib\masm32.inc

d:\masm32\m32lib\masm32.lib

d:\masm32\tutorial\dlltute\masmdll.htm

-----------------------------where2

"d:\masm32\examples\exampl10\masm1k\masm1k.asm"

"d:\masm32\examples\exampl10\masm1k\masm1k.exe"

"d:\masm32\examples\exampl10\masm1k\masm1k.inc"

"d:\masm32\help\masm32.chm"

"d:\masm32\help\masmlib.chm"

"d:\masm32\include\masm32.inc"

"d:\masm32\include\masm32rt.inc"

"d:\masm32\lib\masm32.lib"

"d:\masm32\m32lib\masm32.inc"

"d:\masm32\m32lib\masm32.lib"

"d:\masm32\tutorial\dlltute\masmdll.htm"

Вопросы:

1) Что делало действие л)?

2) Что делало действие н) и чем оно отличается от действия л)?

Ответы:

1) Рекурсивно выполняло поиск и вывод в СПВ файлы, соответсвующие шаблоны после чего перенаправляет поток в файл для записи в конец.

2) Отличие лишь в выводе имен файлов, флаг /f выводит имена в кавычках

Для получение списка только папок следует воспользоваться командой dir с флагом /ad.

1.2.3 Копирование, перенос, переименование и удаление файлов

а) D:

б) Cd masm32\text

в) Copy *.* d:\sample1

г) Dir d:\sample1

д) Cd d:\sample1

е) copy blankdlg.txt d:\sample2\newname.src

ж) dir d:\sample2

з) copy push3.txt..\sample2

и) dir d:\sample2

к) copy d:\sample2\push3.txt.\push33.*

л) Dir

м) move c*.*..\sample2\c*.new

н) move epilog.txt d:\sample2\epilog.newname

о) dir > copy-move.txt

п) echo ---------------------------- >> copy-move.txt

р) dir d:\sample2 >> copy-move.txt

с) ren lasterr.txt newname.*

т) dir

у) del switch.txt

ф) dir

х) erase p*.*

ц) dir

ч) del *.* на вопрос ответить Y

ш) dir

Содержимое файла copy-move.txt:

 

05.09.2014 21:23 <DIR>.

05.09.2014 21:23 <DIR>..

28.07.2008 14:01 2я333 blankdlg.txt

28.07.2008 14:01 77 comment0.txt

28.07.2008 14:01 77 comment1.txt

28.07.2008 14:01 77 comment2.txt

28.07.2008 14:01 77 comment3.txt

28.07.2008 14:01 77 comment4.txt

28.07.2008 14:01 77 comment5.txt

28.07.2008 14:01 77 comment6.txt

28.07.2008 14:01 77 comment7.txt

28.07.2008 14:01 77 comment8.txt

28.07.2008 14:01 886 contemp.txt

05.09.2014 21:23 0 copy-move.txt

28.07.2008 14:01 67 dbmsgbox.txt

28.07.2008 14:01 83 dbprint.txt

28.07.2008 14:01 54 lasterr.txt

28.07.2008 14:01 41 msgbox.txt

28.07.2008 14:01 27 nops3.txt

28.07.2008 14:01 39 pop3.txt

28.07.2008 14:01 44 prolog.txt

28.07.2008 14:01 42 push3.txt

28.07.2008 14:01 42 push33.txt

10.08.2008 07:50 1я859 samplerc.txt

28.07.2008 14:01 616 switch$.txt

28.07.2008 14:01 572 switch.txt

05.09.2014 21:23 <DIR>.

05.09.2014 21:23 <DIR>..

28.07.2008 14:01 58 epilog.newname

28.07.2008 14:01 2я333 newname.src

28.07.2008 14:01 42 push3.txt

Вопросы:

1) Что означают символы.. в действии з)?

2) Действие к). Что означает точка в части «.\push33.*»?

3) Действие к). Что означает * в части «.\push33.*»?

4) Действие с). Что означает *?

5) Чем по смыслу отличаются действия у) и х)?

6) Почему действие ч) запрашивает подтверждение?

Ответы:

1) Перейти в родительский каталог

2) Текущий каталог

3) Любое расширение файла

4) Любое расширение файла

5) Оба выполняют удаления, но первая инструкция удаляет по имени, вторая – шаблону

6) Мы удаляем все файлы в текущем каталоге, поэтому система запрашивает подтверждение от пользователя

Для параллельного наблюдения я отдаю предпочтение Total Commander.

1.2.4 Создание и уничтожение папок

а) Cd d:\sample2

б) Md folder1

в) md d:\sample1\papka2

г) copy *.txt..\sample1\papka2

д) del papka2

е) copy pop3.txt papka2

ж) rmdir papka2

з) rd papka2 /s

и) copy c*.* d:\sample2\folder1

к) ren d:\sample2\folder1 d:\sample2\newname3

л) ren d:\sample2\folder1 newname3

м) rd d:\sample2\newname3 /s /q

Вопросы:

1) Что делает действие б)?

2) Может ли команда md одним вызовом создать несколько вложенных друг в друга папок? Если да, то как? Проверить экспериментально.

3) Что произошло с папкой papka2 после действия д)? Объясните произошедшее.

4) Что было выведено на экран после действия ж)? Почему?

5) Чем отличается команда rd от команды rmdir?

6) Описать выполнение действия з). Чем отличается выполнение действия з) от действия ж)?

7) Как выполнилось действие к)? Объясните наблюдаемое.

8) Чем отличается выполнение действия л) от действия к)?

9) Чем отличается ход и результат действия м) от действия з)?

Ответы:

1) Создает каталог

2) Может, нужно указать путь к последнему каталогу, включая не существующие каталоги

3) Ничего, так как папка papka2 находилась в другом каталоге

4) Не удается найти указанный файл. Мы находились в другом каталоге.

5) Количеством букв

6) Попытка удалить каталог с подкаталогами и файлами.

7) Операция потерпела неудачу. Параметром должно быть относительное имя файла, а не полное

8) Использовалось относительное имя файла

9) Папка была удалена без запроса подтверждения на удаление

1.2.5 Создание текстового файла

а) Copy con 1.s

б) Текстовые строки

в) вводятся последовательно.

г) В конце каждой строки нажимать Enter.

д) Конец ввода текста - F6 или Ctrl-Z и Enter.

е) Dir

ж) Echo Строка1 >> 2.txt

з) Echo Строка два >> 2.txt

и) Echo строка №3 >> 2.txt

к) Dir

л) Type 1.s

м) Type 2.txt

Вопросы:

1) Если вы уже выполнили действия б), в) и г), то можно ли вернуться назад и строку «вводятся последовательно.» перередактировать по-новому?

2) Чем принципиально отличается технология создания файла действиями а)-д) от технологии в действиях ж) – и)?

Ответы:

1) Нет

2) В первом случае текст вводится полностью, во втором добавляется частями

1.2.6 Просмотр содержимого файлов

а) D:

б) Cd sample1

а) Type blankdlg.txt

б) Type p*.*

в) type d:\masm32\tview.exe (прослушать звуки)

г) Cls

д) copy comment1.txt con

е) copy comment1.txt+s*.* con

ж) type d:\masm32\tproc.txt | more

з) Нажать несколько раз Enter, смотреть результат.

и) Нажимать пробел, наблюдать результат.

к) more < pop3.txt push3.txt switch.txt

л) more < d:\masm32\tproc.txt

м) more /?

Вопросы:

1) Сколько способов просмотра одиночного файла вы наблюдали в данном сценарии?

2) Можно ли одним вызовом просмотреть содержимое сразу нескольких файлов?

3) Чем объяснить необычные визуальные и звуковые эффекты, которые сопровождают просмотр двоичных (не текстовых) файлов?

4) Допускает ли команда more последовательный просмотр сразу нескольких файлов, расположенных в разных папках?

Ответы:

1) 2

2) Нет

3) Была выведена последовательность байтов, которая декодировалась в кодировку по умолчанию, включая экранированные последовательности /а.

4) Нет

1.2.7 Поиск файлов, содержащих нужную строку

а) find "pop edi" pop3.txt

б) find /n "pop" *.*

в) find /n "push" d:\masm32\*.ini*

г) findstr "push edi" *.*

д) findstr /c:"push edi" *.*

е) findstr "push pop edi" *.*

ж) findstr /e "push pop edi" *.*

Вопросы:

1) Какие особенности выполнения команды find создает применение ключа /n?

2) Команда findstr, вопрос про ключ /с. Почему результат выполнения действий г) и д) отличаются?

3) Написать словами, что выполняет действие ж).

4) Если вам нужно в группе файлов найти или слово1, или слово2, или слово3 в одном вызове, какую команду вы примените – find или findstr? Почему?

5) В группе ассемблерных исходников нужно найти все строки, которые начинаются со слова “invoke”. Написать соответствующий консольный вызов.

Ответы:

1) Вывод номеров отображаемых строк

2) В первом случае ищется любое из слов, а во втором точное совпадение с ключом поиска

3) Ищет ключ только в конце строк

4) Findstr, так как она ищет любое из слов ключа

5) Findstr /s “invoke” *.*

Выводы

Во время лабораторной работы мы научились выполнять в консоли основные действия с файлами, папками и по поиску данных на диске. Мы создали навык работы с консолью, и убедились, что многие действия в консоли выполняются не хуже, чем в графическом интерфейсе.

Остренок ЗКІт-151

технология создания ассемблерных программ

2.1 Цель работы

Освоить технику создания программ в SDK MASM32. Изучить использование шаблонов ассемблерных программ. Экспериментально изучить работу макрогенератора.

2.2 Выполнение работы

2.2.1 Создание консольной программы

Содержимое файла textio.asm:

; #########################################################################

 

.386

.model flat, stdcall

option casemap:none; case sensitive

 

; #########################################################################

 

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

; Build this app in console mode.

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

 

include \masm32\include\windows.inc

 

include \masm32\include\user32.inc

include \masm32\include\kernel32.inc

include \masm32\include\masm32.inc

 

includelib \masm32\lib\user32.lib

includelib \masm32\lib\kernel32.lib

includelib \masm32\lib\masm32.lib

 

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

; Local macros

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

print MACRO Quoted_Text:VARARG

LOCAL Txt

.data

Txt db Quoted_Text,0

.code

invoke StdOut,ADDR Txt

ENDM

 

input MACRO Quoted_Prompt_Text:VARARG

LOCAL Txt

LOCAL Buffer

.data

Txt db Quoted_Prompt_Text,0

Buffer db 128 dup(?)

.code

invoke StdOut,ADDR Txt

invoke StdIn,ADDR Buffer,LENGTHOF Buffer

mov eax, offset Buffer

ENDM

 

cls MACRO

invoke ClearScreen

ENDM

 

Main PROTO

 

; #########################################################################

 

.data

Msg1 db "Type something > ",0

Msg2 db "You typed > ",0

 

; #########################################################################

 

.code

 

start:

invoke Main

invoke ExitProcess,0

 

; #########################################################################

 

Main proc

 

LOCAL InputBuffer[128]:BYTE

 

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

; console mode library procedures

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

 

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

; using macros

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

 

cls

print "Console function test",13,10,13,10

 

input "Enter Some Text > "

invoke StdOut,eax; return address in eax

 

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

; using procedures

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

 

invoke locate,10,10

invoke StdOut,ADDR Msg1

invoke StdIn,ADDR InputBuffer,LENGTHOF InputBuffer

 

invoke locate,10,11

invoke StdOut,ADDR Msg2

invoke StdOut,ADDR InputBuffer

 

ret

 

Main endp

 

; #########################################################################

 

end start

 

После компиляции данного кода в папке появился файл с именем textio.obj. Для компиляции мы использовали команду «ml /c /coff textio.asm». флаги данной команды значат следующее: /с – ассемблирование без компоновки; /coff – сгенерировать объектный файл формата COFF. С помощью команды «Link /SUBSYSTEM:CONSOLE /OPT:NOREF textio.obj» мы сгенерировали выполняемый файл textio.exe. В данной команде ключ /SUBSYSTEM:CONSOLE отвечает за определение средой выполнения консоль, а ключ /OPT:NOREF – что наша программа содержит функции и данные на которые никогда не ссылаются. Результат выполнения нашей программы изображен на рисунке 2.1.

Рисунок 2.1 – Результат выполнения программы

2.2.2 Создание программы с графическим интерфейсом

Содержимое файла minimum.asm:

; #########################################################################

 

.386

.model flat, stdcall

option casemap:none; case sensitive

 

; #########################################################################

 

include \masm32\include\windows.inc

include \masm32\include\user32.inc

include \masm32\include\kernel32.inc

 

includelib \masm32\lib\user32.lib

includelib \masm32\lib\kernel32.lib

 

; #########################################################################

 

.code

 

start:

 

jmp @F

szDlgTitle db "Minimum MASM",0

szMsg db " --- Assembler Pure and Simple --- ",0

@@:

 

push MB_OK

push offset szDlgTitle

push offset szMsg

push 0

call MessageBox

 

push 0

call ExitProcess

 

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

; The following are the same function calls using MASM

; "invoke" syntax. It is clearer code, it is type checked

; against a function prototype and it is less error prone.

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

 

; invoke MessageBox,0,ADDR szMsg,ADDR szDlgTitle,MB_OK

; invoke ExitProcess,0

 

end start

 

Создадим файл minimum.obj с помощью команды «ml /c /coff /nologo minimum.asm». Флаг /nologo подавляет вывод сообщение о правообладателях. Этот вариант компиляции отличается отсутствием 2 строк информации о правообладателях. После выполнения команды «link /SUBSYSTEM:WINDOWs minimum.obj» в исходной папке появился выполняемый файл minimum.exe. Результат выполнения данной программы показан на рисунке 2.2.

Рисунок 2.2 – Программа с графическим интерфейсом на МАСМ

2.2.3 Использование шаблона простой программы

Содержимое файла built.bat:

@echo off

 

if exist %1.obj del %1.obj

if exist %1.exe del %1.exe

 

@echo %1

 

\masm32\bin\ml /c /coff %1.asm

if errorlevel 1 goto errasm

 

if not exist rsrc.obj goto nores

 

\masm32\bin\Link /SUBSYSTEM:WINDOWS /OPT:NOREF %1.obj rsrc.obj

if errorlevel 1 goto errlink

 

dir "1.*

goto TheEnd

 

:nores

\masm32\bin\Link /SUBSYSTEM:WINDOWS /OPT:NOREF %1.obj

if errorlevel 1 goto errlink

dir %1.*

goto TheEnd

 

:errlink

echo _

echo Link error

goto TheEnd

 

:errasm

echo _

echo Assembly Error

goto TheEnd

 

:TheEnd

 

pause

 

Содержимое файла buildc.bat:

@echo off

 

if exist %1.obj del %1.obj

if exist %1.exe del %1.exe

 

\masm32\bin\ml /c /coff %1.asm

if errorlevel 1 goto errasm

 

if not exist rsrc.obj goto nores

 

\masm32\bin\Link /SUBSYSTEM:CONSOLE /OPT:NOREF %1.obj rsrc.obj

if errorlevel 1 goto errlink

 

dir %1.*

goto TheEnd

 

:nores

\masm32\bin\Link /SUBSYSTEM:CONSOLE /OPT:NOREF %1.obj

if errorlevel 1 goto errlink

dir %1.*

goto TheEnd

 

:errlink

echo _

echo Link error

goto TheEnd

 

:errasm

echo _

echo Assembly Error

goto TheEnd

 

:TheEnd

 

pause

 

 

Содержимое файла hello.asm:

include \masm32\include\masm32rt.inc

;<Место для макросов>

.data

;<Место для статических переменных>

.code

start:

;<Место для команд программиста>

print "Hello, world!"; example

invoke ExitProcess,0; exit to the Windows

end start

 

После выполнения команды «buildc hello» начался процесс компиляции и компоновки. В процессе также была выведена информация о всех файлах, которые участвовали в процессе, как существующие, так и созданные. На рисунке 2.3 показан результат команды «buildc hello» и выполнение созданной программы.

Рисунок 2.3 – Создание и выполнение программы

Выводы

Во время лабораторной работы мы освоили технику создания программ в SDK MASM32, изучили использование шаблонов ассемблерных программ, а также экспериментально изучили работу макрогенератора.

Остренок ЗКІт-151



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-02-12 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: