Задание № 6 Текст задания
Взять за основу созданный в предыдущем задании шаблон консольного приложения. Создать аргументы (аргументы должны иметь длину более, чем один символ) консольного приложения связанные с заданной структурой. Приложение должно уметь распознавать аргументы и выполнять соответствующие функции (вывод информации из заданной структуры).
Вариант 13
информация о цветке
Код программы
OPTION DOTNAME
option casemap:none
include temphls.inc
include win64.inc
OPTION PROLOGUE:rbpFramePrologue
OPTION EPILOGUE:rbpFrameEpilogue
extrn WriteConsoleA : PROC
extrn AllocConsole : PROC
extrn GetStdHandle : PROC
extrn ReadConsoleA : PROC
extrn ExitProcess : proc
.data
Flowers struct
flowername db 15 dup(?)
color db 15 dup (?)
territory db 15 dup (?)
Flowers ends
Petunia1 Flowers <'Petunia'>
Petunia2 Flowers <'different'>
Petunia3 Flowers <'garden'>
Rose1 Flowers <'Rose'>
Rose2 Flowers <'different'>
Rose3 Flowers <'garden'>
Kalanchoe1 Flowers <'Kalanchoe'>
Kalanchoe2 Flowers <'different'>
Kalanchoe3 Flowers <'home'>
MoneyTree1 Flowers <'MoneyTree'>
MoneyTree2 Flowers <'green'>
MoneyTree3 Flowers <'home'>
Chamomile1 Flowers <'Chamomile'>
Chamomile2 Flowers <'white'>
Chamomile3 Flowers <'garden'>
h DWORD ?
h1 DWORD ?
read byte 20 dup(?)
NumberOfCharsRead DWORD ?
NumberOfCharsWritten DWORD ?
view byte "Flower view:", 0
col byte "Color:", 0
terr byte "Territory:", 0
error byte "ERROR!", 0
newstr byte 10
description byte "*** Press to view all information about the flower: ***", 10, 10, "Chamomile - type 'Cham'", 10, "Rose - type 'Rose'", 10, "Kalanchoe - type 'Kala'", 10, "MoneyTree - type 'Mone'", 10, "Petunia - type 'Petu'", 10, "EXIT - type 'EXIT'", 10, 0
.code
Start proc
LOCAL msg:MSG
invoke AllocConsole
invoke GetStdHandle, STD_INPUT_HANDLE
mov h, EAX
invoke GetStdHandle, STD_OUTPUT_HANDLE
mov h1, EAX
invoke WriteConsoleA,h1,ADDR description,SIZEOF description,ADDR NumberOfCharsWritten,0
Read:
invoke WriteConsoleA,h1,ADDR newstr,SIZEOF newstr,ADDR NumberOfCharsWritten,0
invoke ReadConsoleA, h, ADDR read,sizeof read, ADDR NumberOfCharsRead, 0
.if read[0] == 'E' && read[1] == 'X' && read[2] == 'I' && read[3] == 'T'
.goto Exit
.else
.if read[0] == 'P' && read[1] == 'e' && read[2] == 't' && read[3] == 'u'
.goto Petunia
.else
.if read[0] == 'R' && read[1] == 'o' && read[2] == 's' && read[3] == 'e'
.goto Rose
.else
.if read[0] == 'K' && read[1] == 'a' && read[2] == 'l' && read[3] == 'a'
.goto Kalanchoe
.else
.if read[0] == 'M' && read[1] == 'o' && read[2] == 'n' && read[3] == 'e'
.goto MoneyTree
.else
.if read[0] == 'C' && read[1] == 'h' && read[2] == 'a' && read[3] == 'm'
.goto Chamomile
.else
.endif
.endif
.endif
.endif
.endif
.endif
Error:
invoke WriteConsoleA, h1, ADDR error,sizeof error, ADDR NumberOfCharsWritten, 0
invoke WriteConsoleA,h1,ADDR newstr,SIZEOF newstr,ADDR NumberOfCharsWritten,0
.goto Read
Petunia:
invoke WriteConsoleA, h1, ADDR view,sizeof view, ADDR NumberOfCharsWritten, 0
invoke WriteConsoleA,h1,ADDR newstr,SIZEOF newstr,ADDR NumberOfCharsWritten,0
invoke WriteConsoleA, h1, ADDR Petunia1,sizeof Petunia1, ADDR NumberOfCharsWritten, 0
invoke WriteConsoleA,h1,ADDR newstr,SIZEOF newstr,ADDR NumberOfCharsWritten,0
invoke WriteConsoleA, h1, ADDR col,sizeof col, ADDR NumberOfCharsWritten, 0
invoke WriteConsoleA,h1,ADDR newstr,SIZEOF newstr,ADDR NumberOfCharsWritten,0
invoke WriteConsoleA, h1, ADDR Petunia2,sizeof Petunia2, ADDR NumberOfCharsWritten, 0
invoke WriteConsoleA,h1,ADDR newstr,SIZEOF newstr,ADDR NumberOfCharsWritten,0
invoke WriteConsoleA, h1, ADDR terr,sizeof terr, ADDR NumberOfCharsWritten, 0
invoke WriteConsoleA,h1,ADDR newstr,SIZEOF newstr,ADDR NumberOfCharsWritten,0
invoke WriteConsoleA, h1, ADDR Petunia3,sizeof Petunia3, ADDR NumberOfCharsWritten, 0
invoke WriteConsoleA,h1,ADDR newstr,SIZEOF newstr,ADDR NumberOfCharsWritten,0
.goto Read
Rose:
invoke WriteConsoleA, h1, ADDR view,sizeof view, ADDR NumberOfCharsWritten, 0
invoke WriteConsoleA,h1,ADDR newstr,SIZEOF newstr,ADDR NumberOfCharsWritten,0
invoke WriteConsoleA, h1, ADDR Rose1,sizeof Rose1, ADDR NumberOfCharsWritten, 0
invoke WriteConsoleA,h1,ADDR newstr,SIZEOF newstr,ADDR NumberOfCharsWritten,0
invoke WriteConsoleA, h1, ADDR col,sizeof col, ADDR NumberOfCharsWritten, 0
invoke WriteConsoleA,h1,ADDR newstr,SIZEOF newstr,ADDR NumberOfCharsWritten,0
invoke WriteConsoleA, h1, ADDR Rose2,sizeof Rose2, ADDR NumberOfCharsWritten, 0
invoke WriteConsoleA,h1,ADDR newstr,SIZEOF newstr,ADDR NumberOfCharsWritten,0
invoke WriteConsoleA, h1, ADDR terr,sizeof terr, ADDR NumberOfCharsWritten, 0
invoke WriteConsoleA,h1,ADDR newstr,SIZEOF newstr,ADDR NumberOfCharsWritten,0
invoke WriteConsoleA, h1, ADDR Rose3,sizeof Rose3, ADDR NumberOfCharsWritten, 0
invoke WriteConsoleA,h1,ADDR newstr,SIZEOF newstr,ADDR NumberOfCharsWritten,0
.goto Read
Kalanchoe:
invoke WriteConsoleA, h1, ADDR view,sizeof view, ADDR NumberOfCharsWritten, 0
invoke WriteConsoleA,h1,ADDR newstr,SIZEOF newstr,ADDR NumberOfCharsWritten,0
invoke WriteConsoleA, h1, ADDR Kalanchoe1,sizeof Kalanchoe1, ADDR NumberOfCharsWritten, 0
invoke WriteConsoleA,h1,ADDR newstr,SIZEOF newstr,ADDR NumberOfCharsWritten,0
invoke WriteConsoleA, h1, ADDR col,sizeof col, ADDR NumberOfCharsWritten, 0
invoke WriteConsoleA,h1,ADDR newstr,SIZEOF newstr,ADDR NumberOfCharsWritten,0
invoke WriteConsoleA, h1, ADDR Kalanchoe2,sizeof Kalanchoe2, ADDR NumberOfCharsWritten, 0
invoke WriteConsoleA,h1,ADDR newstr,SIZEOF newstr,ADDR NumberOfCharsWritten,0
invoke WriteConsoleA, h1, ADDR terr,sizeof terr, ADDR NumberOfCharsWritten, 0
invoke WriteConsoleA,h1,ADDR newstr,SIZEOF newstr,ADDR NumberOfCharsWritten,0
invoke WriteConsoleA, h1, ADDR Kalanchoe3,sizeof Kalanchoe3, ADDR NumberOfCharsWritten, 0
invoke WriteConsoleA,h1,ADDR newstr,SIZEOF newstr,ADDR NumberOfCharsWritten,0
.goto Read
MoneyTree:
invoke WriteConsoleA, h1, ADDR view,sizeof view, ADDR NumberOfCharsWritten, 0
invoke WriteConsoleA,h1,ADDR newstr,SIZEOF newstr,ADDR NumberOfCharsWritten,0
invoke WriteConsoleA, h1, ADDR MoneyTree1,sizeof MoneyTree1, ADDR NumberOfCharsWritten, 0
invoke WriteConsoleA,h1,ADDR newstr,SIZEOF newstr,ADDR NumberOfCharsWritten,0
invoke WriteConsoleA, h1, ADDR col,sizeof col, ADDR NumberOfCharsWritten, 0
invoke WriteConsoleA,h1,ADDR newstr,SIZEOF newstr,ADDR NumberOfCharsWritten,0
invoke WriteConsoleA, h1, ADDR MoneyTree2,sizeof MoneyTree2, ADDR NumberOfCharsWritten, 0
invoke WriteConsoleA,h1,ADDR newstr,SIZEOF newstr,ADDR NumberOfCharsWritten,0
invoke WriteConsoleA, h1, ADDR terr,sizeof terr, ADDR NumberOfCharsWritten, 0
invoke WriteConsoleA,h1,ADDR newstr,SIZEOF newstr,ADDR NumberOfCharsWritten,0
invoke WriteConsoleA, h1, ADDR MoneyTree3,sizeof MoneyTree3, ADDR NumberOfCharsWritten, 0
invoke WriteConsoleA,h1,ADDR newstr,SIZEOF newstr,ADDR NumberOfCharsWritten,0
.goto Read
Chamomile:
invoke WriteConsoleA, h1, ADDR view,sizeof view, ADDR NumberOfCharsWritten, 0
invoke WriteConsoleA,h1,ADDR newstr,SIZEOF newstr,ADDR NumberOfCharsWritten,0
invoke WriteConsoleA, h1, ADDR Chamomile1,sizeof Chamomile1, ADDR NumberOfCharsWritten, 0
invoke WriteConsoleA,h1,ADDR newstr,SIZEOF newstr,ADDR NumberOfCharsWritten,0
invoke WriteConsoleA, h1, ADDR col,sizeof col, ADDR NumberOfCharsWritten, 0
invoke WriteConsoleA,h1,ADDR newstr,SIZEOF newstr,ADDR NumberOfCharsWritten,0
invoke WriteConsoleA, h1, ADDR Chamomile2,sizeof Chamomile2, ADDR NumberOfCharsWritten, 0
invoke WriteConsoleA,h1,ADDR newstr,SIZEOF newstr,ADDR NumberOfCharsWritten,0
invoke WriteConsoleA, h1, ADDR terr,sizeof terr, ADDR NumberOfCharsWritten, 0
invoke WriteConsoleA,h1,ADDR newstr,SIZEOF newstr,ADDR NumberOfCharsWritten,0
invoke WriteConsoleA, h1, ADDR Chamomile3,sizeof Chamomile3, ADDR NumberOfCharsWritten, 0
invoke WriteConsoleA,h1,ADDR newstr,SIZEOF newstr,ADDR NumberOfCharsWritten,0
.goto Read
Exit:
invoke ExitProcess,0
Start endp
Рисунок 11. Блок-схема.
Рисунок 12. Результат выполнения программы.
