Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Помогите разобрать пару нюансов в макросе rev - Assembler

Саша Короткий Ученик (122), на голосовании 8 лет назад
ucRev proc wsrc:DWORD,wdst:DWORD

push esi
push edi

xor eax, eax
mov esi, [esp+12] ;
mov edi, [esp+16] ;
mov ecx, -2

@@: ; Как происходит переход к данным типам меток ?
add ecx, 2
mov ax, [esi+ecx]
mov [edi+ecx], ax
test ax, ax
jnz @B ; куда ведет эта метка ?

cmp ecx, 4
jb dont_bother

mov esi, edi
add edi, ecx
sub edi, 2
shr ecx, 2

@@:
mov ax, [esi]
mov dx, [edi]
mov [edi], ax
mov [esi], dx
add esi, 2
sub edi, 2
sub ecx, 1
jnz @B

dont_bother:

pop edi
pop esi

ret 8

ucRev endp

Прокомментируйте пожалуйста данный макрос
Голосование за лучший ответ
... Гений (84865) 8 лет назад
@@B переход на метку "назад"

Н-р
@@: ; Как происходит переход к данным типам меток ?
add ecx, 2
mov ax, [esi+ecx]
mov [edi+ecx], ax
test ax, ax
jnz @B ; куда ведет эта метка ?

jnz @B перейдет (если что) на предыдущий @@ (соотв. add ecx, 2)
Если обратите внимание - у метки нет имени.
Честно я-бы не стал такое использовать. да. Написавшим ucRev в MASM виднее, но... Microsoft иногда _такой_ Microsoft....Имхо лучше давать имена и задавать локальные метки.

P.S: Соотв
jnz @B перейдет на @@: mov ax, [esi] если что
Похожие вопросы