التعليمة CMPS :
تطرح هذه التعليمة عنصر الوجهة المعنون ب SI من عنصر المصدر المعنون ب DI ,كما تحدّث التعليمة SI و DI ليؤشروا إلى العنصرين التاليين من السلسلتين. لا تغير هذهالتعليمة من محتوى المصدر أو الوجهة وإنما ُتحدث فقط حالة الرايات تبعًا للعلاقة بينعنصر المصدر وعنصر الوجهة. يمكن أن يكون طول كل من معامل المصدر والوجهة بايت أو كلمة.
التعليمة SCAS
تطرح هذه التعليمة عنصر الوجهة المعنون ب DI من محتوى المراكم، وُتحدّث التعليمةDI ليؤشر إلى عنصر السلسلة التالي. لا تغيير هذه التعليمة من محتوى الوجهة أوالمراكم وإنما تحدّث فقط حالة الرايات تبعًا للعلاقة بين عنصر المصدر والمراكم. يجرياستخدام المراكم AL عندما يكون طول معامل الوجهة 1 بايت، و AX عندما يكون طولمعامل الوجهة 2 بايت.
التعليمة LODS
تنسخ هذه التعليمة بايتًا أو كلمة معنونة ب SI إلى AL أو AX , وُتحدّثSI ليؤشر إلىالعنصر التالي من السلسلة.
التعليمة STOS
تنسخ هذه التعليمة بايتًا أو كلمة من AL أو AX إلى العنصر من سلسلة المحارفالمعنون بـ SI , كما تحدث SI ليؤشر إلى العنصر التالي من السلسلة.
التعليمات REPNZ و REPNE ،REPZ ،REPE ،REP
تسمح هذه البادئات إذا أضيف إحداها قبل إحدى التعليمات ،CMPS ،MOVSW،MOVSB SCAS , بتكرار تنفيذ هذه التعليمات على الأكثر CX مرة. يجري إنقاص CXبـ 1 بعد كلتكرار، لذلك يجب وضع في CX عدد التكرارات الأعظم المسموح به قبل تنفيذهذه التعليمات. تستخدم البادئة REP لتكرار تنفيذ تعليمات سلاسل المحارف عددًا منالمرات محددًا ب CX وتستخدم البادئتين REPE و REPZ (المتكافئتين) لتكرار تنفيذتعليمات سلاسل المحارف مادام ZF=1 وعلى الأكثر CX مرة. وتستخدم البادئتينREPNE و REPNZ (المتكافئتين) لتكرار تنفيذ تعليمات سلاسل المحارف مادام ZF=0وعلى الأكثر CX مرة.
مثال: تنسخ التعليمات التالية ثمانية بايتات من سلسلة المحارف تبدأ بالعنوان 02000hإلى سلسلة محارف أخرى تبدأ بالعنوان .02400H
MOV AX, 0h
MOV DS, AX
MOV ES, AX
MOV SI, 2000h
MOV DI, 2400h
MOV CX, 8h
CLD
REP MOVSB
اختبار ذاتي: اكتب برنامجًا يقرأ الاسم "Mr.Gohns" ويستعيض عن كل "G" بالمحرف."J"
الجواب:
Data1 db 'Mr.Gones','$'
.code
MOV ES,DS
CLD ;set auto increment bit D=0
MOV DI, offset Data1
MOV CX,09 ; number of chars to be scanned
MOV AL,'G' ; char to be compared against
REPNE SCASB ; start scan AL =? ES[DI]
JNE Over ; if Z=0
DEC DI ; Z=1
MOV byte ptr[DI], 'J'
Over: MOV AH,09
MOV DX, offset Data1
INT 21h ; display the resulting String
أضف تعليق:
0 comments: