Объясните пожалуйста несколько строчек кода (masm) - Assembler
Формулировка задачи:
Поясните пожалуйста парочку строчек асма. В ассемблере второй день и для примера взял этот код. Он получает аргумент командной строки и выводит его в MessageBox. В основном все понятно, НО:
.386 .model flat, stdcall option casemap :none ; case sensitive ;######################################################################### include windows.inc include user32.inc include kernel32.inc includelib user32.lib includelib kernel32.lib ;######################################################################### .data MsgBoxCaption db "It's my first command line for Win32",0 MsgBoxText db "Не указан аргумент",0 ;######################################################################### .code start: call GetCommandLine ; Я так понял возвращает в EAX адрес командной строки mov ECX,512d ; Вот эти две строчки непонятно. Каково назначение этих строк ?? add ECX,EAX ; unquote: inc EAX cmp EAX,ECX jz NO cmp byte ptr[EAX],22h jnz unquote Arg_search: inc EAX cmp byte ptr[EAX],0 jz NO cmp byte ptr[EAX],20h ; jz Arg_search push 0 push offset MsgBoxCaption push EAX push 0 call MessageBox push 0 call ExitProcess NO: push 0 push offset MsgBoxCaption push offset MsgBoxText push 0 call MessageBox push 0 call ExitProcess end start
Решение задачи: «Объясните пожалуйста несколько строчек кода (masm)»
textual
Листинг программы
.386 .model flat, stdcall option casemap :none ; case sensitive ;######################################################################### include windows.inc include user32.inc include kernel32.inc includelib user32.lib includelib kernel32.lib ;######################################################################### .data MsgBoxCaption db "It's my first command line for Win32",0 ;######################################################################### .code start: call GetCommandLine ; возвращает в EAX адрес командной строки push 0 push offset MsgBoxCaption push EAX push 0 call MessageBox push 0 call ExitProcess end start
Объяснение кода листинга программы
- Объявлены сегменты кода и данных .386 .model flat, stdcall
- Включены необходимые заголовочные файлы include windows.inc, include user32.inc, include kernel32.inc
- Библиотеки для компиляции includelib user32.lib, includelib kernel32.lib
- Объявлена переменная MsgBoxCaption .data
It's my first command line for Win32
,0 - Начало кода .code
- Вызов функции GetCommandLine для получения адреса командной строки
- Создание сообщения с помощью функции MessageBox, передавая в нее EAX, который содержит адрес командной строки
- Вызов функции ExitProcess для завершения работы программы