3 / 3 / 4
Регистрация: 23.06.2014
Сообщений: 126
1

Объясните пожалуйста несколько строчек кода (masm)

17.04.2015, 21:55. Показов 1548. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Поясните пожалуйста парочку строчек асма. В ассемблере второй день и для примера взял этот код. Он получает аргумент командной строки и выводит его в MessageBox. В основном все понятно, НО:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
    .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
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.04.2015, 21:55
Ответы с готовыми решениями:

задачка из javarush, объясните пару строчек кода
Задача стояла так: Введи с клавиатуры 10 слов в список строк, метод doubleValues должен удваивать...

Перевести несколько строчек кода из JavaScript'a на jQuery
Здравствуйте, подскажите, пожалуйста, в чем заключается суть проблемы, есть потребность перевести...

Объясните пару строчек кода из метода расчета площади многоугольника разбитого на треугольники
Объясните тупому два метода,если что это расчет площади многоугольника разбитого на треугольники....

Объясните подробнее алгоритм действий этих нескольких строчек кода. И что делает каждый предикат?
find_min_price:- findall(Price, products(_,_,Price), L), ...

10
Клюг
7674 / 3189 / 382
Регистрация: 03.05.2011
Сообщений: 8,380
17.04.2015, 22:28 2
Я не знаю, зачем этот бред, всё гораздо проще:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
    .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
3 / 3 / 4
Регистрация: 23.06.2014
Сообщений: 126
17.04.2015, 22:51  [ТС] 3
Да вроде бы не бред... Функции unquote и Arg_search отделяют путь от аргументов. В вашем коде этого не происходит.
0
Клюг
7674 / 3189 / 382
Регистрация: 03.05.2011
Сообщений: 8,380
17.04.2015, 23:00 4
Цитата Сообщение от mihalech19 Посмотреть сообщение
отделяют путь от аргументов.
А в вашем случае прога мне всегда пишет, что "Не указан аргумент", даже если они есть. Может, из-за того, что у меня имена каталогов и файлов без пробелов и русских букв(привычка)?
1
3 / 3 / 4
Регистрация: 23.06.2014
Сообщений: 126
17.04.2015, 23:06  [ТС] 5
А разве, когда путь без пробелов и русских букв, GetCommandLine получает путь без кавычек?
0
Клюг
7674 / 3189 / 382
Регистрация: 03.05.2011
Сообщений: 8,380
17.04.2015, 23:11 6
Дык.
Миниатюры
Объясните пожалуйста несколько строчек кода (masm)  
1
3 / 3 / 4
Регистрация: 23.06.2014
Сообщений: 126
17.04.2015, 23:15  [ТС] 7
Да вобщем-то не важно. Суть же кода понятна? Меня интересует только те две строчки... Зачем в ecx помещается 200h , потом eax складывается с ecx? К чему это вообще? Может смещение какое-то?
0
Клюг
7674 / 3189 / 382
Регистрация: 03.05.2011
Сообщений: 8,380
17.04.2015, 23:18 8
AFAIR, 512. - max. длина командной строки.
1
3 / 3 / 4
Регистрация: 23.06.2014
Сообщений: 126
17.04.2015, 23:28  [ТС] 9
Прости за глупый вопрос. Зачем?) Какова цель этих регистровых махинаций?
0
Клюг
7674 / 3189 / 382
Регистрация: 03.05.2011
Сообщений: 8,380
17.04.2015, 23:39 10
Не знаю, наверное попытка отделить argv[0](имя проги) от остальных аргументов. Кмк, всё проще - если первый байт по указателю, возвращаемому GetCommandLine, равен кавычке, то искать(repne scasb) закрывающую кавычку, если нет - искать пробел.
1
3 / 3 / 4
Регистрация: 23.06.2014
Сообщений: 126
17.04.2015, 23:49  [ТС] 11
Да, не самый лучший пример... Сам бы так никогда сплит не делал бы... Но все-таки интересно, что было на уме у автора, когда он это писал.
0
17.04.2015, 23:49
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.04.2015, 23:49
Помогаю со студенческими работами здесь

В новый файл копировать первые несколько строчек и столько же последних строчек
Итак, у нас есть текстовый файл где записано стихотворение. Вот что надо сделать: в новый файл...

Как создать лист так, чтобы к нему сразу приписать несколько строчек кода?
Создать новый лист посредством VBA не проблема. А вот как создать лист так, чтобы к нему сразу...

Объясните пожалуйста участок кода
Узнал что это ассоциативный массив for (map<std::string,int>::iterator p = count.begin(); p !=...

Объясните пожалуйста отрывок кода
Всем привет, (//.test(field)) увидел такой кусок кода в книге, но никак не могу разобраться с...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru