Обработка на блокове от данни в асемблер
Програмиране на Delphi
Абонирайте се за бюлетина:
Асемблер и Win32. Курс за млад боец. Урок 12.
Обработка на блокове с данни
Зареждане и разтоварване на данни.
Командите lodsb, lodsw, lodsd са необходими, за да се зареди байт (дума, двойна дума) от паметта, посочена от регистъра ESI, в регистъра al, ax или eax. След присвояване на стойност на регистъра, стойността на ESI регистъра се увеличава с 1,2 или 4. Ето еквивалентите на тези команди
Lodsb Mov al, байт ptr [esi]
Inc esi/dec esi
Lodsw Mov брадва, дума ptr [esi]
Добавете esi, 2h/sub esi, 2h
Lodsd Mov eax, dword ptr [esi]
Добавете esi, 4h/sub esi, 4h
Следователно, тези команди ни улесняват да обработваме данни, като незабавно увеличаваме стойността на регистъра esi за следващата част от данните. Корпусът може също да бъде намален в зависимост от флага на посоката на DF. Ако е зададено, тогава регистърът ще намалее, а ако не е зададен, тогава регистърът esi ще се увеличи.
Командите stosb, stows и stosd правят точно обратното. Те зареждат регистъра al, ax, eax в паметта, посочена от edi регистъра. Промяната на случая на Edi зависи от същия флаг на посоката на DF.
movsb Mov al, байт ptr [esi]
Mov байт ptr [edi], ал
Inc edi/dec edi
Inc esi/dec esi
stosw Mov брадва, дума ptr [esi]
Mov дума ptr [edi], брадва
Добавете edi, 2h/sub edi, 2h
Добавете esi, 2h/sub esi, 2h
stosd Mov eax, dword ptr [esi]
Mov dword ptr [edi], eax
Добавете edi, 4h/sub edi, 4h
Добавете esi, 4h/sub esi, 4h
Сравнение на данните.
Командите scasb, scasw и scasd сравняват съдържанието на регистъра al, ax, eax със съдържанието на паметта, посочено от edi регистъра. Разбира се, увеличаване на регистъра edi. По-усъвършенстваните команди cmpsb, cmpsw, cmpsd сравняват стойностите на паметта, посочени съответно от регистрите esi и edi. Промяна на съответния регистър на флаговете.