Форум программистов, компьютерный форум, киберфорум
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
0 / 0 / 0
Регистрация: 17.09.2012
Сообщений: 23
1

Прокомментировать приведенный код и объяснить его назначение

14.12.2012, 20:33. Показов 2228. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток! Прошу помочь разобраться с программой на ассемблере, написать комменты или объяснить как она работет. Заранее спасибо

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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
.386
 
.model flat, stdcall
option casemap :none
 
include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\masm32.inc
include \masm32\include\kernel32.inc
include \masm32\macros\macros.asm
includelib \masm32\lib\user32.lib
includelib \masm32\lib\masm32.lib
includelib \masm32\lib\kernel32.lib
include \masm32\include\msvcrt.inc 
includelib \masm32\lib\msvcrt.lib
 
 
 
.data
message db "Vvedite stroky: ",0dh,0ah,0
message1 db "Kakoi simvol budem iskat'? ", 0dh,0ah,0
message2 db "Kolishestvo naidennyh simvolov v stroke: ", 0
message_err db "Takogo simvola v stroke net...", 0dh,0ah,0
format db '%d',0
index dd ?
 
 
.code
 
start proc
 
local string[260]:byte
 
invoke crt_printf,offset message ;вывел меседж
lea esi,string ; адрес, по которому хранится строка
mov edi,esi ; перемещаем адрес строки в edi
invoke crt_gets,esi 
 
invoke crt_printf,offset message1
invoke crt_getchar
mov ebx,eax
 
mov index,0
 
invoke crt_strlen,esi
mov ecx,eax
 
beg:
lodsb
stosb
cmp al,bl
jz @1
jmp @2
 
@1:
inc index
 
@2:
loop beg
 
cmp index,0
jz @3
invoke crt_printf,offset message2
invoke crt_printf,addr format , index
jmp @4
 
@3:
 
 ; Выдаем ошибку
invoke crt_printf, offset message_err
 
@4:
 
 ; Ждем символ
invoke crt__getch
invoke crt__exit
 
; Конец
start endp
end start
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.12.2012, 20:33
Ответы с готовыми решениями:

Подробно прокомментировать приведенный код
.model small .stack 256 .data cr equ 13 lf equ 10 Perenos db cr,lf,'$' PER Dw 0...

Разобрать приведенный код и объяснить его назначение
объясните, что делает этот метод static string NewMas(ref int i, int indexdel, int mas, ref...

Подробно разобрать приведенный код и его назначение
Добрый день! Помогите пожалуйста разобрать простенький код: string str1 =...

Подробно разобрать приведенный код и его назначение в целом
Вот код:// считаем кол-во кластеров по количеству байт равных 0x80 while ( !feof(f) ) ...

10
Клюг
7674 / 3189 / 382
Регистрация: 03.05.2011
Сообщений: 8,380
14.12.2012, 20:59 2
Вводим строку, потом символ, далее ищем, сколько раз этот символ в строке появился. Если нашли, выводим сколько. Или ошибку.
Стр. 36 и 50 -лишние.
1
0 / 0 / 0
Регистрация: 17.09.2012
Сообщений: 23
14.12.2012, 21:17  [ТС] 3
Спасибо! Посмотри , пожалуйста, комментарии, подскажи если что не правильно

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
57
58
59
60
61
62
.data
message db "Vvedite stroky: ",0dh,0ah,0
message1 db "Kakoi simvol budem iskat'? ", 0dh,0ah,0
message2 db "Kolishestvo naidennyh simvolov v stroke: ", 0
message_err db "Takogo simvola v stroke net...", 0dh,0ah,0
format db '%d',0
index dd ?
 
 
.code
 
start proc
 
local string[260]:byte
 
invoke crt_printf,offset message ;вывел месседж
lea esi,string ; адрес, по которому хранится строка
invoke crt_gets,esi 
 
invoke crt_printf,offset message1 ; выводим месседж
invoke crt_getchar ; считываем строку
mov ebx,eax
 
mov index,0 ; присваиваем index == 0
 
invoke crt_strlen,esi
mov ecx,eax
 
beg:
lodsb ; Считать байт по адресу ESI в AL
cmp al,bl ; если значения регистров ал и бл равны переходим к метке @1
jz @1 ;переход к метке @1
jmp @2 ; переход к метке @2
 
@1:
inc index ;увеличение index
 
@2:
loop beg ; возвращаемся к beg
 
cmp index,0 ; если index == 0
 
jz @3 ; выдаем ошибку
;если символ есть, то:
invoke crt_printf,offset message2 ; сообщение
invoke crt_printf,addr format , index ; печатаю index
 
jmp @4
 
@3:
 
invoke crt_printf, offset message_err ; Выдаем ошибку
 
@4:
 
 ; Ждем символ
invoke crt__getch ;ВОТ ТУТ НЕ ПОНЯТНО
invoke crt__exit
 
; Конец
start endp
end start
0
Клюг
7674 / 3189 / 382
Регистрация: 03.05.2011
Сообщений: 8,380
14.12.2012, 21:28 4
Цитата Сообщение от dima_
;ВОТ ТУТ НЕ ПОНЯТНО
стандартная сюшная _getch(); - ждём кнопку.
Цитата Сообщение от dima_ Посмотреть сообщение
Assembler
1
2
3
cmp al,bl ; если значения регистров ал и бл равны... 
jz @1 ; ...то переход к метке @1, 
jmp @2 ; иначе переход к метке @2
поправил комменты.
1
0 / 0 / 0
Регистрация: 17.09.2012
Сообщений: 23
14.12.2012, 21:33  [ТС] 5
Мне в целом непонятно, что делает
Assembler
1
2
3
4
5
@4:
 
 ; Ждем символ
invoke crt__getch 
invoke crt__exit


И еще вопросик: что делает invoke и для чего нужна ?
0
608 / 406 / 8
Регистрация: 26.04.2012
Сообщений: 2,065
14.12.2012, 21:36 6
Цитата Сообщение от dima_ Посмотреть сообщение
; Ждем символ
invoke crt__getch
invoke crt__exit
И еще вопросик: что делает invoke и для чего нужна ?
ждем нажатия клавиши и выходим из проги. invoke это макрос масма для вызова процедуры, близкий к высокоуровневым языкам
1
0 / 0 / 0
Регистрация: 17.09.2012
Сообщений: 23
14.12.2012, 21:48  [ТС] 7
Спасибо!
И вроде последний вопрос остался

Assembler
1
invoke crt_gets,esi
что делает эта строчка? считывает из регистра esi в строку? если да, то в какую строку?

и что делает вот эта строчка
Assembler
1
invoke crt_strlen,esi
0
Клюг
7674 / 3189 / 382
Регистрация: 03.05.2011
Сообщений: 8,380
14.12.2012, 21:56 8
Цитата Сообщение от dima_ Посмотреть сообщение
invoke crt_gets,esi
получить строку с клавы в буфер по адресу из ESI.
Цитата Сообщение от dima_ Посмотреть сообщение
invoke crt_strlen,esi
получить длину строки по адресу из ESI.
1
0 / 0 / 0
Регистрация: 17.09.2012
Сообщений: 23
14.12.2012, 21:59  [ТС] 9
Спасибо большое
0
Клюг
7674 / 3189 / 382
Регистрация: 03.05.2011
Сообщений: 8,380
14.12.2012, 22:54 10
dima_, на будущее - описание ф-ций с префиксом crt_ лежит здесь. Надо просто отбросить префикс.
2
Почетный модератор
21400 / 9134 / 1083
Регистрация: 11.04.2010
Сообщений: 11,014
14.12.2012, 23:52 11
Господа, если Вы цитируете код, не забывайте его заключать в теги.
0
14.12.2012, 23:52
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.12.2012, 23:52
Помогаю со студенческими работами здесь

Прокомментировать приведённый код
using System; using System.Collections.Generic; using System.Linq; using System.Text; ...

Прокомментировать приведенный код
прокомментируйте эти строки мне нужно понять просто что каждая из в себе несет и что означает ...

Прокомментировать приведенный код (двумерные массивы)
using System; using System.Collections.Generic; using System.Linq; using System.Text; ...

Объяснить приведенный код
Кто может объяснить мне этот код. Что она делает и в каких местах особенно Fixed. Вот код...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru