B
Breen
Такая функция см. ниже, компилятор С Minus 32 2.2.2, этот код тестит ОЗУ методом "бегущий ноль", вопрос такой: как связаны переменные объявленные в Си, с ассемблерныым кодом и что такое ebp-4 b ebp-12?
Копирайт : © 2001 by Stepan Karpenko
Тест Walking 0's
*/
long walking0()
{ /* Ни вкоем случае не менять положение переменных !!! */
/* Новые добавляются с конца !!! */
unsigned long i;
unsigned long lastbyte;
long res;
res=0;
lastbyte=_AllMemSize*0x100000;
for(i=0x100000; i<lastbyte;i++)
{
#asm
mov ebx, dword ptr [ebp-4]
mov ah, byte ptr fs:[ebx] ; Back up old byte
mov byte ptr fs:[ebx], 0
mov al, byte ptr fs:[ebx]
cmp al, 0
je Next_Walking_0
inc dword ptr [ebp-12]
Next_Walking_0:
mov byte ptr fs:[ebx], ah ; Restore old byte
#endasm
}
return res;
}
Копирайт : © 2001 by Stepan Karpenko
Тест Walking 0's
*/
long walking0()
{ /* Ни вкоем случае не менять положение переменных !!! */
/* Новые добавляются с конца !!! */
unsigned long i;
unsigned long lastbyte;
long res;
res=0;
lastbyte=_AllMemSize*0x100000;
for(i=0x100000; i<lastbyte;i++)
{
#asm
mov ebx, dword ptr [ebp-4]
mov ah, byte ptr fs:[ebx] ; Back up old byte
mov byte ptr fs:[ebx], 0
mov al, byte ptr fs:[ebx]
cmp al, 0
je Next_Walking_0
inc dword ptr [ebp-12]
Next_Walking_0:
mov byte ptr fs:[ebx], ah ; Restore old byte
#endasm
}
return res;
}