Остренок ЗКІт-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