Объясните пожалуйста несколько строчек кода (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

Объяснение кода листинга программы

  1. Объявлены сегменты кода и данных .386 .model flat, stdcall
  2. Включены необходимые заголовочные файлы include windows.inc, include user32.inc, include kernel32.inc
  3. Библиотеки для компиляции includelib user32.lib, includelib kernel32.lib
  4. Объявлена переменная MsgBoxCaption .data It's my first command line for Win32,0
  5. Начало кода .code
  6. Вызов функции GetCommandLine для получения адреса командной строки
  7. Создание сообщения с помощью функции MessageBox, передавая в нее EAX, который содержит адрес командной строки
  8. Вызов функции ExitProcess для завершения работы программы

Оцени полезность:

8   голосов , оценка 3.875 из 5