procedure MyMove(
const Source; var Dest; Count : Integer);
asm
cmp ECX,0 ;第三个参数Count
Je @JustQuit ;为零则退出
push ESI
push EDI
mov ESI, EAX
mov EDI, EDX
@Loop: ;循环开始
Mov AL, [ESI]
Inc ESI
mov [EDI], AL
Inc EDI
Dec ECX ;我的疑问在这里,为什么用了dex ecx和jnz,而不用loop代替
Jnz @Loop ;是执行效率的问题吗?还是win32汇编里没有loop了?
pop EDI
pop ESI
@JustQuit:
end;
const Source; var Dest; Count : Integer);
asm
cmp ECX,0 ;第三个参数Count
Je @JustQuit ;为零则退出
push ESI
push EDI
mov ESI, EAX
mov EDI, EDX
@Loop: ;循环开始
Mov AL, [ESI]
Inc ESI
mov [EDI], AL
Inc EDI
Dec ECX ;我的疑问在这里,为什么用了dex ecx和jnz,而不用loop代替
Jnz @Loop ;是执行效率的问题吗?还是win32汇编里没有loop了?
pop EDI
pop ESI
@JustQuit:
end;
dec ecx
Jnz @Loop
改成
loop @Loop
运行结果是一样的。
procedure MyMove(
const Source; var Dest; Count : Integer);
asm
mov esi,Source
mov edi,Dest
mov ecx,Count
rep movsb
end;
asm
mov esi,EAX
mov edi,EDX
rep movsb
end;
count是第3个参数,不用mov被ecx的,本身就是ecx传递的。