Регистрация Главная Пользователи Все разделы прочитаны
Сообщения за день Справка Регистрация
Навигация
Zhyk.org LIVE! Реклама на Zhyk.org Правила Форума Награды и достижения Доска "почета"

Ответ
 
Опции темы
Старый 28.02.2009, 07:57   #16
Заблокирован
 Капитан
Аватар для Ivan_32
 
Ivan_32 душа компанииIvan_32 душа компанииIvan_32 душа компанииIvan_32 душа компанииIvan_32 душа компанииIvan_32 душа компанииIvan_32 душа компанииIvan_32 душа компании
Регистрация: 14.05.2008
Сообщений: 253
Популярность: 1015
Сказал(а) спасибо: 666
Поблагодарили 451 раз(а) в 173 сообщениях
Отправить сообщение для Ivan_32 с помощью ICQ Отправить сообщение для Ivan_32 с помощью Telegram Отправить сообщение для Ivan_32 с помощью Skype™
 
По умолчанию

Команда JCXZ - переход если ECX==0
Семантика:
JCXZ r32/m32

Передает управление коду по адресу в операнде
если ECX==0
MOV ECX,20h
cycle:
MOV EAX,[DDVar+ECX]
DEC ECX
JCXZ cEND
JMP cycle
cEND:

Вот простой цикл на 20h итераций с использованием этой команды.
Также может быть например такая ситуация:
MOV EAX,[Var] ; Число которое сравнивают с нужным
MOV ECX,[DesVar] ; Число с которым будут сравнивать
SUB ECX,EAX
JCXZ DesAddr ;Если число оказалось равным, нужному - переход на адрес DesAddr.


Команда RET - возврат из подпрограммы(процедуры/функции)
Семантика:
RET

Адрес возврата берется из стека.
Команда можно интерпретировать так:
POP EAX
JMP EAX


Команда CALL - вызов подпрограммы(процедуры/функции)
Семантика:
CALL ProcName/ProcAddr/m32/r32

Команду можно интерпретировать так:
PUSH EIP
JMP ProcName/ProcAddr

Последний раз редактировалось Ivan_32; 28.02.2009 в 17:11.
  Ответить с цитированием
5 пользователя(ей) сказали cпасибо:
Den1S (15.03.2009), Leo_ня (28.02.2009), PeTaK (29.03.2009), shagart (28.02.2009), xatayi (06.08.2009)
Старый 28.02.2009, 16:54   #17
Заблокирован
 Капитан
Аватар для Ivan_32
 
Ivan_32 душа компанииIvan_32 душа компанииIvan_32 душа компанииIvan_32 душа компанииIvan_32 душа компанииIvan_32 душа компанииIvan_32 душа компанииIvan_32 душа компании
Регистрация: 14.05.2008
Сообщений: 253
Популярность: 1015
Сказал(а) спасибо: 666
Поблагодарили 451 раз(а) в 173 сообщениях
Отправить сообщение для Ivan_32 с помощью ICQ Отправить сообщение для Ivan_32 с помощью Telegram Отправить сообщение для Ivan_32 с помощью Skype™
 
По умолчанию

Команда JS - переход если результат последней
арифметической операции отрицательный

Семантика:
JS r32/m32

Передает управление коду по адресу в операнде
если реузльтат последней арифметической операции отрицательный. Иными словами если SF=1.
MOV EAX,10h
SUB EAX,20h
JS 00010000h

При такой последовательности команд управление будет передано коду по адресу 10000h

Команда JNS - переход если результат последней
арифметической операции не отрицательный.

Семантика:
JNS r32/m32

Передает управление коду по адресу в операнде
если реузльтат последней арифметической операции не отрицательный. Иными словами если SF=0.
MOV EAX,10h
ADD EAX,20h
JNS 00010000h

При такой последовательности команд управление будет передано коду по адресу 10000h

Последний раз редактировалось Ivan_32; 20.06.2009 в 15:25.
  Ответить с цитированием
4 пользователя(ей) сказали cпасибо:
Den1S (15.03.2009), Leo_ня (28.02.2009), PeTaK (29.03.2009), xatayi (06.08.2009)
Старый 09.03.2009, 05:16   #18
Заблокирован
 Капитан
Аватар для Ivan_32
 
Ivan_32 душа компанииIvan_32 душа компанииIvan_32 душа компанииIvan_32 душа компанииIvan_32 душа компанииIvan_32 душа компанииIvan_32 душа компанииIvan_32 душа компании
Регистрация: 14.05.2008
Сообщений: 253
Популярность: 1015
Сказал(а) спасибо: 666
Поблагодарили 451 раз(а) в 173 сообщениях
Отправить сообщение для Ivan_32 с помощью ICQ Отправить сообщение для Ivan_32 с помощью Telegram Отправить сообщение для Ivan_32 с помощью Skype™
 
По умолчанию

Основные конструкции кода:

Конструкция IF

Пример:
cmp eax,0
jne lab
;тут расположен код который выполнится если eax==0
lab:


Конструкция IF ELSE

Пример:
cmp eax,0
je lab
;Тут находятся инструкции которые должны выполнится если eax==0
jmp labEnd ;этот переход сделан что бы не началось выполнение кода после метки lab.
lab:
;А тут инструкции которые должны выполнится если eax!=0
labEnd:
;Это точка выхода из данной конструкции.


Конструкция WHILE
Пример:
mov ecx,100
cycle:
;Тело цикла
dec ecx
cmp ecx,0
jne cycle

  Ответить с цитированием
5 пользователя(ей) сказали cпасибо:
Глюконатор (09.03.2009), Den1S (15.03.2009), Leo_ня (09.03.2009), PeTaK (29.03.2009), xatayi (06.08.2009)
Старый 09.03.2009, 05:31   #19
Заблокирован
 Капитан
Аватар для Ivan_32
 
Ivan_32 душа компанииIvan_32 душа компанииIvan_32 душа компанииIvan_32 душа компанииIvan_32 душа компанииIvan_32 душа компанииIvan_32 душа компанииIvan_32 душа компании
Регистрация: 14.05.2008
Сообщений: 253
Популярность: 1015
Сказал(а) спасибо: 666
Поблагодарили 451 раз(а) в 173 сообщениях
Отправить сообщение для Ivan_32 с помощью ICQ Отправить сообщение для Ivan_32 с помощью Telegram Отправить сообщение для Ivan_32 с помощью Skype™
 
По умолчанию

Процедура перевода бинарных данных в HexText.
buff0 - двойное слово DWORD. Адрес буфера источника.
buff1 - двойное слово DWORD. Адрес буфера применика.
bLen - двойное слово DWORD. Количество переводимых данных(в байтах).
Требования к аргументам:
1. buff0 и buff1 должны быть двойными словами, в которых находятся адреса выделенной памяти.
2. Обьем выделнной для второго буфера памяти должен быть в 2 раза больше чем для первого.

proc _Hex2Text buff0,buff1,bLen
pushad
xor eax,eax
xor ebx,ebx
xor ecx,ecx
xor edx,edx
aCycle:
xor eax,eax
pushad
mov ebx,[buff0]
mov ah,byte[ebx+ecx]
;----------------->
shr ah,4
cmp ah,9
ja charA
add ah,30h
jmp endA
charA:
add ah,37h
endA:
;----------------->
mov ebx,[buff1]
mov byte[ebx+edx],ah
;==================>
mov ebx,[buff0]
mov ah,byte[ebx+ecx]
;----------------->
and ah,00001111b
cmp ah,9
ja charB
add ah,30h
jmp endB
charB:
add ah,37h
endB:
;----------------->
mov ebx,[buff1]
mov byte[ebx+edx+1],ah
popad
inc ecx
inc edx
inc edx
cmp ecx,[bLen]
jne aCycle
popad
ret
endp
  Ответить с цитированием
5 пользователя(ей) сказали cпасибо:
DELETE ME!!111 (31.12.2009), Den1S (15.03.2009), Leo_ня (28.03.2009), PeTaK (29.03.2009), xatayi (06.08.2009)
Старый 22.04.2009, 13:22   #20
Заблокирован
 Капитан
Аватар для Ivan_32
 
Ivan_32 душа компанииIvan_32 душа компанииIvan_32 душа компанииIvan_32 душа компанииIvan_32 душа компанииIvan_32 душа компанииIvan_32 душа компанииIvan_32 душа компании
Регистрация: 14.05.2008
Сообщений: 253
Популярность: 1015
Сказал(а) спасибо: 666
Поблагодарили 451 раз(а) в 173 сообщениях
Отправить сообщение для Ivan_32 с помощью ICQ Отправить сообщение для Ivan_32 с помощью Telegram Отправить сообщение для Ivan_32 с помощью Skype™
 
По умолчанию Re: Экскурс в команды ассемблера

Команда SLD - установка флага направления DF
Семантика:
SLD

Команда SLD устанавливает флаг DF в состояние 1.
Пример:
SLD
После выполнения этой команды флаг DF будет установлен в состояние 1, что повлияет на работу
команд серий MOVSx STOSx и LODSx.


Команда СLD - снятие флага направления DF
Семантика:
СLD

Команда СLD устанавливает флаг DF в состояние 0.
Пример:
CLD
После выполнения этой команды флаг DF будет установлен в состояние 0, что повлияет на работу
команд серий MOVSx STOSx и LODSx.

Последний раз редактировалось Ivan_32; 20.06.2009 в 15:27.
  Ответить с цитированием
3 пользователя(ей) сказали cпасибо:
Leo_ня (23.04.2009), Razzor (22.04.2009), xatayi (06.08.2009)
Старый 22.04.2009, 13:29   #21
Заблокирован
 Капитан
Аватар для Ivan_32
 
Ivan_32 душа компанииIvan_32 душа компанииIvan_32 душа компанииIvan_32 душа компанииIvan_32 душа компанииIvan_32 душа компанииIvan_32 душа компанииIvan_32 душа компании
Регистрация: 14.05.2008
Сообщений: 253
Популярность: 1015
Сказал(а) спасибо: 666
Поблагодарили 451 раз(а) в 173 сообщениях
Отправить сообщение для Ivan_32 с помощью ICQ Отправить сообщение для Ivan_32 с помощью Telegram Отправить сообщение для Ivan_32 с помощью Skype™
 
По умолчанию Re: Экскурс в команды ассемблера

Команды LODSB/LODSW/LODSD - пересылка данных
Семантика:
LODSB
LODSW
LODSD

Команды загружают значение из памяти по адресу, который хранится в регистре ESI, регистры
AL(LODSB), AX(LODSW), EAX(LODSD) соответственно. При выполнении команды, значение в ESI инкрементируется или декрементируется
в зависимости от значение флага DF=Direction Flag. Если DF=0 то ESI будет декрементироватся каждый раз при выполнении команды LODSx
(х = B/W/D).

Аналоги на основе MOV:

LODSB:
MOV AL,BYTE[ESI]
if(DF=0)
{
ADD ESI,1
}
else
{
SUB ESI,1
}

LODSW:
MOV AX,WORD[ESI]
if(DF=0)
{
ADD ESI,2
}
else
{
SUB ESI,2
}

LODSD:
MOV EAX,DWORD[ESI]
if(DF=0)
{
ADD ESI,4
}
else
{
SUB ESI,4
}


Пример использования:
MOV ESI,szString
LODSB ;В AL сейчас находится первый байт строки.

MOV ESI,szString
LODSB ;В AX сейчас находится первое слово строки.

MOV ESI,szString
LODSB ;В EAX сейчас находится первое двойное слово строки.

  Ответить с цитированием
3 пользователя(ей) сказали cпасибо:
Leo_ня (23.04.2009), Razzor (22.04.2009), xatayi (06.08.2009)
Старый 22.04.2009, 13:59   #22
Заблокирован
 Капитан
Аватар для Ivan_32
 
Ivan_32 душа компанииIvan_32 душа компанииIvan_32 душа компанииIvan_32 душа компанииIvan_32 душа компанииIvan_32 душа компанииIvan_32 душа компанииIvan_32 душа компании
Регистрация: 14.05.2008
Сообщений: 253
Популярность: 1015
Сказал(а) спасибо: 666
Поблагодарили 451 раз(а) в 173 сообщениях
Отправить сообщение для Ivan_32 с помощью ICQ Отправить сообщение для Ivan_32 с помощью Telegram Отправить сообщение для Ivan_32 с помощью Skype™
 
По умолчанию Re: Экскурс в команды ассемблера

Команды STOSB/STOSW/STOSD - загрузка данных в память
Семантика:
STOSB
STOSW
STOSD

Команды загружают значения которые находятся соответственно в AL(STOSB),AX(STOSW),EAX(STOSD) в память по адресу, который находится в EDI.
При выполнении команды, значение в EDI инкрементируется или декрементируется
в зависимости от значение флага DF=Direction Flag. Если DF=0 то EDI будет декрементироватся каждый раз при выполнении команды STOSx

Аналоги на основе MOV:
STOSB:
MOV BYTE[EDI],AL
if(DF=0)
{
ADD EDI,1
}
else
{
SUB EDI,1
}

STOSW:
MOV WORD[EDI],AX
if(DF=0)
{
ADD EDI,2
}
else
{
SUB EDI,2
}


STOSD:
MOV DWORD[EDI],EAX
if(DF=0)
{
ADD EDI,4
}
else
{
SUB EDI,4
}

Пример использования:

MOV EDI,szString
STOSB ;В памяти по адресу EDI находится байт взятый из AL
MOV EDI,szString
STOSW ;В памяти по адресу EDI находится слово взятое из AX
MOV EDI,szString
STOSD ;В памяти по адресу EDI находится двойное слово взятое из EAX


Последний раз редактировалось Ivan_32; 22.04.2009 в 14:02.
  Ответить с цитированием
3 пользователя(ей) сказали cпасибо:
Leo_ня (23.04.2009), Razzor (22.04.2009), xatayi (06.08.2009)
Старый 22.04.2009, 14:36   #23
Заблокирован
 Капитан
Аватар для Ivan_32
 
Ivan_32 душа компанииIvan_32 душа компанииIvan_32 душа компанииIvan_32 душа компанииIvan_32 душа компанииIvan_32 душа компанииIvan_32 душа компанииIvan_32 душа компании
Регистрация: 14.05.2008
Сообщений: 253
Популярность: 1015
Сказал(а) спасибо: 666
Поблагодарили 451 раз(а) в 173 сообщениях
Отправить сообщение для Ivan_32 с помощью ICQ Отправить сообщение для Ivan_32 с помощью Telegram Отправить сообщение для Ivan_32 с помощью Skype™
 
По умолчанию Re: Экскурс в команды ассемблера

Команды SCASB/SCASW/SCASD - сравнение данных
Семантика:
SCASB
SCASW
SCASD

Команды сравнивают значение в регистре AL(SCASB),AX(SCASW),EAX(SCASD) соответственно с значением находящимся в памяти по адресу в регистре EDI. Команды аналогичны команде CMP.
При выполнении команды, значение в EDI инкрементируется или декрементируется
в зависимости от значение флага DF=Direction Flag. Если DF=0 то EDI будет декрементироватся каждый раз при выполнении команды SCASx

Аналоги на основе CMP:

SCASB:
CMP AL,BYTE[EDI]
if(DF=0)
{
ADD EDI,1
}
else
{
SUB EDI,1
}


SCASW:
CMP AX,WORD[EDI]
if(DF=0)
{
ADD EDI,2
}
else
{
SUB EDI,2
}


SCASD:
CMP EAX,DWORD[EDI]
if(DF=0)
{
ADD EDI,4
}
else
{
SUB EDI,4
}


Пример использования:
MOV EDI,szString
SCASB ;Сравнивается AL с байтом по адресу EDI
MOV EDI,szString
SCASW ;Сравнивается AX с словом по адресу EDI
MOV EDI,szString
SCASD ;Сравнивается EAX с двойным словом по адресу EDI

  Ответить с цитированием
3 пользователя(ей) сказали cпасибо:
Leo_ня (23.04.2009), Razzor (22.04.2009), xatayi (06.08.2009)
Старый 22.04.2009, 15:12   #24
Заблокирован
 Капитан
Аватар для Ivan_32
 
Ivan_32 душа компанииIvan_32 душа компанииIvan_32 душа компанииIvan_32 душа компанииIvan_32 душа компанииIvan_32 душа компанииIvan_32 душа компанииIvan_32 душа компании
Регистрация: 14.05.2008
Сообщений: 253
Популярность: 1015
Сказал(а) спасибо: 666
Поблагодарили 451 раз(а) в 173 сообщениях
Отправить сообщение для Ivan_32 с помощью ICQ Отправить сообщение для Ivan_32 с помощью Telegram Отправить сообщение для Ivan_32 с помощью Skype™
 
По умолчанию Re: Экскурс в команды ассемблера

Команды MOVSB/MOVSW/MOVSD - пересылка данных
Семантика:
MOVSB
MOVSW
MOVSD

Команды пересылают Байт,слово и двойное слово соответсвенно из памяти по адресу ESI в память по адресу EDI.
В зависимости от значения флага DF, ESI и EDI либо инкрементируются после выполнения команды(DF=0) или же декрементируются(DF=1).

Аналоги на основе MOV:

MOVSB:
MOV AL,BYTE[ESI]
MOV BYTE[EDI],AL
if(DF=0)
{
ADD EDI,1
ADD ESI,1
}
else
{
SUB ESI,1
SUB EDI,1
}


MOVSW:
MOV AX,WORD[ESI]
MOV WORD[EDI],AX
if(DF=0)
{
ADD EDI,2
ADD ESI,2
}
else
{
SUB ESI,2
SUB EDI,2
}


MOVSD:
MOV EAX,DWORD[ESI]
MOV DWORD[EDI],EAX
if(DF=0)
{
ADD EDI,4
ADD ESI,4
}
else
{
SUB ESI,4
SUB EDI,4
}


Пример использования:
MOV ESI,szStr0
MOV EDI,szStr1
MOVSB ;Пересылается байт из szStr0 в szStr1

MOV ESI,szStr0
MOV EDI,szStr1
MOVSW ;Пересылается слово из szStr0 в szStr1

MOV ESI,szStr0
MOV EDI,szStr1
MOVSD ;Пересылается двойное слово из szStr0 в szStr1


Последний раз редактировалось Ivan_32; 22.04.2009 в 15:19.
  Ответить с цитированием
3 пользователя(ей) сказали cпасибо:
Leo_ня (23.04.2009), Razzor (22.04.2009), xatayi (06.08.2009)
Старый 22.04.2009, 15:18   #25
Заблокирован
 Капитан
Аватар для Ivan_32
 
Ivan_32 душа компанииIvan_32 душа компанииIvan_32 душа компанииIvan_32 душа компанииIvan_32 душа компанииIvan_32 душа компанииIvan_32 душа компанииIvan_32 душа компании
Регистрация: 14.05.2008
Сообщений: 253
Популярность: 1015
Сказал(а) спасибо: 666
Поблагодарили 451 раз(а) в 173 сообщениях
Отправить сообщение для Ivan_32 с помощью ICQ Отправить сообщение для Ivan_32 с помощью Telegram Отправить сообщение для Ivan_32 с помощью Skype™
 
По умолчанию Re: Экскурс в команды ассемблера

Команды CMPSB/CMPSW/CMPSD - сравнение данных
Семантика:
CMPSB
CMPSW
CMPSD

Команды сравнивают байты, слова или двойные слова соотвественно по адресам в ESI и EDI соотвественно.
В зависимости от значения флага DF, ESI и EDI либо инкрементируются после выполнения команды(DF=0) или же декрементируются(DF=1).

Аналоги на основе CMP:


CMPSB:
MOV AL,BYTE[ESI]
CMP BYTE[EDI],AL
if(DF=0)
{
ADD EDI,1
ADD ESI,1
}
else
{
SUB ESI,1
SUB EDI,1
}


CMPSW:
MOV AX,WORD[ESI]
CMP WORD[EDI],AX
if(DF=0)
{
ADD EDI,2
ADD ESI,2
}
else
{
SUB ESI,2
SUB EDI,2
}


CMPSD:
MOV EAX,DWORD[ESI]
CMP DWORD[EDI],EAX
if(DF=0)
{
ADD EDI,4
ADD ESI,4
}
else
{
SUB ESI,4
SUB EDI,4
}


Пример использования:
MOV ESI,szStr0
MOV EDI,szStr1
CMPSB ;Сравнивается байт из szStr0 c байтом в szStr1

MOV ESI,szStr0
MOV EDI,szStr1
CMPSW ;Сравнивается слово из szStr0 c словом в szStr1

MOV ESI,szStr0
MOV EDI,szStr1
CMPSD ;Сравнивается двойное слово из szStr0 c двойным словом в szStr1

  Ответить с цитированием
3 пользователя(ей) сказали cпасибо:
Leo_ня (23.04.2009), Razzor (22.04.2009), xatayi (06.08.2009)
Старый 23.04.2009, 09:00   #26
Заблокирован
 Капитан
Аватар для Ivan_32
 
Ivan_32 душа компанииIvan_32 душа компанииIvan_32 душа компанииIvan_32 душа компанииIvan_32 душа компанииIvan_32 душа компанииIvan_32 душа компанииIvan_32 душа компании
Регистрация: 14.05.2008
Сообщений: 253
Популярность: 1015
Сказал(а) спасибо: 666
Поблагодарили 451 раз(а) в 173 сообщениях
Отправить сообщение для Ivan_32 с помощью ICQ Отправить сообщение для Ivan_32 с помощью Telegram Отправить сообщение для Ivan_32 с помощью Skype™
 
По умолчанию Re: Экскурс в команды ассемблера

Префикс REP - безусловный повтор команды
Семантика:
REP commmand

Префикс повторяет команду заданное количество итерация, это число хранится в ECX.
Пример использования:
CLD
MOV ESI,szSourceString
MOV EDI,szDestinationString
MOV ECX,10
REP MOVSB

На данном участке кода, из памяти по адресу szSourceString, переписываются 10 байт, в память по адресу szDestinationString.
Данный префикс удобен для циклического копирования данных(как и показано в примере). Так же можно посмотреть такой пример:
CLD
MOV AL,0
MOV EDI,pMem
MOV ECX,1000h
REP STOSB

Данный код заполняет 1000h байт по адресу pMem, значениями из AL.


Префикс REPE - условный повтор команды пока флаг ZF=1

Семантика:
REPE command

Префикс повторяет команду, до тех пор пока, ZF=1 или проще говоря, до тех пор пока результат последнего сравнения положительный - до тех пор пока равно.
В ECX содержится максимальное количество итераций.
Пример:
CLD
MOV EDI,szStr
MOV AL,'A'
MOv ECX,0FFFFFFFFh
REPE SCASB
SUB EDI,szStr

После выполнения кода в EDI будет записано количество подряд идущих букв 'A' в памяти по адресу szStr.
Тоесть, если допустим в памяти по этом адресу содержится такие значение "AAAAAFGAAA" то код прочтет первые 5 букв 'A' и прекратит выполнение.
Так как ZF после следущего сравнения установится в 0.

Префикс REPNE - условный повтор команды пока флаг ZF=0

Семантика:
REPNE command

Префикс повторяет команду, до тех пор пока, ZF=0 или проще говоря до тех пор пока не равно.
В ECX содержится максимальное количество итераций.
Пример:
CLD
MOV EDI,szStr
MOV AL,'F'
MOV ECX,0FFFFFFFFh
REPNE SCASB

Данный код найдет в памяти по адресу szStr символ 'F', в EDI будет содержатся его адрес.
  Ответить с цитированием
2 пользователя(ей) сказали cпасибо:
Leo_ня (23.04.2009), xatayi (06.08.2009)
Старый 25.04.2009, 23:29   #27
Заблокирован
 Капитан
Аватар для Ivan_32
 
Ivan_32 душа компанииIvan_32 душа компанииIvan_32 душа компанииIvan_32 душа компанииIvan_32 душа компанииIvan_32 душа компанииIvan_32 душа компанииIvan_32 душа компании
Регистрация: 14.05.2008
Сообщений: 253
Популярность: 1015
Сказал(а) спасибо: 666
Поблагодарили 451 раз(а) в 173 сообщениях
Отправить сообщение для Ivan_32 с помощью ICQ Отправить сообщение для Ivan_32 с помощью Telegram Отправить сообщение для Ivan_32 с помощью Skype™
 
По умолчанию Re: Экскурс в команды ассемблера

Команда LOOP - повтор блока команд без условий
Семантика:
LOOP Addres

Команда повторят блок команд с адреса в аргументе, до текущего адреса, ECX - раз.
Пример:
MOV ECX,10
looper:
MOV BYTE[EDX+ECX],AH
ADD EDX,1000h
LOOP looper

Данный код повторит блок инструкций 10 раз с метки looper по адрес команды.


Команда LOOPE - повтор блока команд пока равно

Семантика:
LOOPNE Addres

Команда повторят блок команд с адреса в аргументе, до текущего адреса, ECX - раз, пока ZF=1 или пока равно.
Пример:
MOV ECX,100
MOV ESI,szStr0
MOV EDI,szStr1
looper:
MOV AH,byte[ESI]
MOV AL,byte[EDI]
CMP AH,AL
LOOPE looper

Данный код повторит блок инструкций 100 раз с метки looper по адрес команды, но только пока ZF=1
Цикл поелезн когда нужно определить длину последовательности одинаковых байт в памяти.

Команда LOOPNE - повтор блока команд пока не равно
Семантика:
LOOPE Addres

Команда повторят блок команд с адреса в аргументе, до текущего адреса, ECX - раз, пока ZF=0 или пока не равно.
Пример:
MOV ECX,100
MOV ESI,szStr0
MOV EDI,szStr1
looper:
MOV AH,byte[ESI]
MOV AL,byte[EDI]
CMP AH,AL
LOOPNE looper

Данный код повторит блок инструкций 100 раз с метки looper по адрес команды, но только пока ZF=0.
Цикл полезен когда нужно найти байт в памяти.

Последний раз редактировалось Ivan_32; 20.06.2009 в 15:28.
  Ответить с цитированием
3 пользователя(ей) сказали cпасибо:
Leo_ня (11.07.2009), shagart (26.04.2009), xatayi (06.08.2009)
Старый 26.04.2009, 00:31   #28
Заблокирован
 Капитан
Аватар для Ivan_32
 
Ivan_32 душа компанииIvan_32 душа компанииIvan_32 душа компанииIvan_32 душа компанииIvan_32 душа компанииIvan_32 душа компанииIvan_32 душа компанииIvan_32 душа компании
Регистрация: 14.05.2008
Сообщений: 253
Популярность: 1015
Сказал(а) спасибо: 666
Поблагодарили 451 раз(а) в 173 сообщениях
Отправить сообщение для Ivan_32 с помощью ICQ Отправить сообщение для Ivan_32 с помощью Telegram Отправить сообщение для Ivan_32 с помощью Skype™
 
По умолчанию Re: Экскурс в команды ассемблера

Команда PUSHAD - сохранить все основные регистры в стеке
Семантика:
PUSHAD

Сохраняет регистры ESI EDI EBP EBX EDX ECX EAX в стеке(именно в таком порядке)
Пример:
PUSHAD
POP [reg.EAX]
POP [reg.ECX]
POP [reg.EDX]
POP [reg.EBX]
POP [reg.NULL]
POP [reg.EBP]
POP [reg.EDI]
POP [reg.ESI]

Данный код сохранит все регистры общего назначение(они приведены выше) в импровизированную структуру reg.
Дабы не возникало вопросов что и как, приведу примерный вид этой структуры.
struc REGISTERS
{
.EAX dd ?
.ECX dd ?
.EDX dd ?
.EBX dd ?
.NULL dd ?
.EBP dd ?
.EDI dd ?
.ESI dd ?
}

Примечание:
Между ESI EDI EBP и EBX EDX ECX EAX выполнении команды загружается двойное слово - оно нулевое, в данном случае NULL
это ненужная переменая значение которой можно сбросить, иначе говоря это просто что бы пропустить это двойное слово.


Команда POPAD - выгрузить из стека все регистры основного назначения

Семантика:
POPAD

Выгружает из данные из стека в регистры EAX EDI EBP EBX EDX ECX EAX (именно в таком порядке).
Пример:
CLD
MOV ECX,8
MOV ESI,reg
MOV EDI,ESP
REP MOVSB
POPAD

Загружаем в память содержимое структуры REGISTERS и вытаскиваем это из стека командой POPAD

Последний раз редактировалось Ivan_32; 26.04.2009 в 01:44.
  Ответить с цитированием
3 пользователя(ей) сказали cпасибо:
Leo_ня (11.07.2009), shagart (26.04.2009), xatayi (06.08.2009)
Старый 11.12.2009, 07:39   #29
Заблокирован
 Разведчик
Аватар для Ivan_64
 
Ivan_64 на правильном путиIvan_64 на правильном пути
Регистрация: 23.11.2009
Сообщений: 10
Популярность: 146
Сказал(а) спасибо: 6
Поблагодарили 41 раз(а) в 20 сообщениях
 
По умолчанию Re: Экскурс в команды ассемблера

Кстати по поводу pushad-ов и popad-ов. Они далеко не восстанавливают равновесие в самом стеке, потому при вхождении в нестабильную секцию(где есть функции которые могут оставить в стеке что то свое - например входные параметры) лучше сохранить ESP в какой ни будь переменной и восстановить в конце процедуры.
Для примера:
PHP код:
proc TestFunc
    mov dword
[oldESP],esp
    pushad
    
;А здесь код.
    
popad
    mov esp
,dword[oldESP]
    
ret
endp 
  Ответить с цитированием
Пользователь сказал cпасибо:
DELETE ME!!111 (20.12.2009)
Ответ

Метки
ассемблера, команды, мини-экскурс

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ID, GM команды off/java. Loreg Lineage 2 17 24.04.2016 04:19
[Обсуждение] Gm команды и еще немного Апрель Баги и читы Perfect World 18 06.05.2010 21:29
Gm команды -(NY)- Треп 2 16.11.2008 14:20
Ragnarok Online GM-Команды Loreg Треп 1 07.10.2008 18:49

Заявление об ответственности / Список мошенников

Часовой пояс GMT +4, время: 16:31.

Пишите нам: [email protected]
Copyright © 2024 vBulletin Solutions, Inc.
Translate: zCarot. Webdesign by DevArt (Fox)
G-gaMe! Team production | Since 2008
Hosted by GShost.net