سوال حلقه های LOOP در اسمبلی

HO3EINBABAIE

New Member
سلام دوستان خسته نباشید
1.PNG
در سوال 5 یک switch/case نوشته شده که بدلیل JMP در اخرین خط همرا با deault هستش درسته ؟
سوال 6 رو اگر میشه یه توضیحبدید
و سوال 7 هم بدلیل استفاده از نقیض شرط یعنی بصورت AND گزینه ب صحیح درسته ؟
 

the_king

مدیرکل انجمن
سلام دوستان خسته نباشید
مشاهده پیوست 114702
در سوال 5 یک switch/case نوشته شده که بدلیل JMP در اخرین خط همرا با deault هستش درسته ؟
بله.
سوال 6 رو اگر میشه یه توضیحبدید
دو دستور MOV AX, @DATAو MOV DS, AX برای مشخص کردن سگمنت داده در DS ئه.
و با دستور MOV ES, AX اون سگمنت داده در ES هم قرار میگیره. یعنی الان DS و ES هر دو به سگمنت داده اشاره می کنند.
فلگ جهت (Direction) یک بیت ئه که یا 0 ئه یا 1. با CLD مقدارش 0 میشه و با STD مقدارش 1 میشه.
اگر 0 باشه دستورات انتقال داده در رشته مثل MOVSB به سمت جلو (از آدرس حافظه پایین تر به سمت آدرس حافظه بالاتر) انجام می شوند یعنی اگر از آدرس حافظه 1000 شروع به انتقال بکنند، بعد از مقدار خانه 1000 مقدار خانه 1001 منتقل میشه و بعد مقدار خانه 1002 و ...
و اگر مقدار فلگ 1 باشه جهت عوض میشه، یعنی اگر از آدرس حافظه 1000 شروع به انتقال بکنند، بعد از مقدار خانه 1000 مقدار خانه 999 منتقل میشه و بعد مقدار خانه 998 و ...
با MOV CX, 5 تعداد تکرار دستور REP مشخص میشه، چون REP به تعداد CX دستور بعدی که انتقال داده در رشته است رو تکرار می کنه. یعنی انتقال داده برای 5 خانه متوالی انجام خواهد شد.
LEA SI, STR آفست شروع رشته STR رو در SI قرار میده و SI در دستورات انتقال رشته همیشه مبدا انتقال ئه.
MOV DI, STR+5 البته اشتباه ئه و دستور اسمبلی درستی نیست، اما منظور طراح اینه که آفست پنج خانه بعد از شروع رشته STR رو در DI قرار میده و DI در دستورات انتقال رشته همیشه مقصد انتقال ئه. اگر رشته 5 خانه ای باشد، طبعا پنج خانه بعد از شروع رشته، اولین خانه بعد از انتهای رشته است.
REP دستور انتقال رشته بعد از خودش رو به تعداد CX بار تکرار می کنه تا هر بار مقدار CX یک واحد کم بشه و وقتی به صفر رسید کار تموم میشه.
MOVSB یک خانه بایتی از آدرس DS:SI به ES:DI منتقل می کنه و چون با CLD فلگ Direction رو صفر کرده ایم، مقدار SI و DI رو یک واحد افزایش میده (اگر فلگ Direction مقدار یک داشت، مقدار SI و DI رو یک واحد کاهش میداد).
چون SI و DI هر دو در یک جهت افزایش پیدا می کنند یعنی هر دو یا یک واحد زیاد میشن یا کم میشن، نتیجه انتقال رشته نمیتونه معکوس باشه، چون در انتقال معکوس اگر SI افزایش پیدا می کنه، DI باید کاهش پیدا کنه و یا برعکس. برای همین گزینه ب منتفی است. فقط گزینه الف می ماند و گزینه ج.
اگر موقعیت DI (مقصد) یک آدرس حافظه مستقل از STR و جای دیگری مثلا 100 بایت بعد از SI بود، گزینه الف درست بود، ولی چون DI دقیقا روی انتهای رشته STR تنظیم شده و با SI پنج خانه فاصله داره، داره رشته رو روی انتهای رشته کپی می کنه و گزینه ج درسته.
و سوال 7 هم بدلیل استفاده از نقیض شرط یعنی بصورت AND گزینه ب صحیح درسته ؟
بله.
 

جدیدترین ارسال ها

بالا