دلیل اش اینه که در پردازنده های 8086 برای دستورات Shift و Rotate پارامتر دوم که تعداد بیت جابجایی است فقط و فقط دو حالت تعریف شده وجود داره.سلام دوستان میشه بفرمایید داخل این سوال چرا برای شیفت به چپ از CL استفاده کرده ؟ در صورتی که داخل CX عدد وارد کرده در خط اول ؟
مشاهده پیوست 114677
ممنونم از پاسختوندلیل اش اینه که در پردازنده های 8086 برای دستورات Shift و Rotate پارامتر دوم که تعداد بیت جابجایی است فقط و فقط دو حالت تعریف شده وجود داره.
یا باید صریحا عدد 1 باشه یا باید CL باشه. نه میتونه 2 و 3 و ... باشه و نه رجیستر دیگری بجز CL. این جزو محدودیت های دستورات پردازنده است.
برای همین اگر بخواهند در یک دستور SAL بیش از یک بیت جابجا کنند، بجز CL گزینه دیگری نیست.
ولی در پردازنده های نسل بعد (80286 و 80386 و ...) اعداد دیگری بجز 1 هم می تواند بصورت صریح بکار برده شود.
ممنونم از پاسختون
اما سوال من این بود که ما در این مثال برای CL عددی وارد نکردیم پس چند بار شیفت انجام میشود ؟
که چطور این اتفاق میفته ؟ ممنونبرای همین وقتی به CX مقدار 0x0502 را می دهید، در واقع به CH مقدار 0x05 و به CL مقدار 0x02 را داده اید.
0x یا 0X (یا یک h در انتهای عدد) نماد اعداد مبنای 16 است و میذاریمش کنار. 05 و 02 و کلا هر دو رقم در مبنای 16 معادل یک بایت ئه و دو رقم سمت چپی در بایت با ارزش بیشتر (اونی که اسم رجیسترش به H ختم میشه) قرار میگیره و دو رقم سمت راستی در بایت با ارزش کمتر (اونی که رجیستر اش به L ختم میشه) قرار میگیره. یعنی 0502 داره در CHCL قرار میگیره.بسیار سپاسگزارم
فقط اگر میشه این خط رو بیشتر توضیح میدین ؟
که چطور این اتفاق میفته ؟ ممنون
و اینکه 0x0502 چه عددی هس ؟ سایتی هس که بتونم اعداد هگز رو به عددهای معمولی تبدیل کنم ؟
ممنون ازتون0x یا 0X (یا یک h در انتهای عدد) نماد اعداد مبنای 16 است و میذاریمش کنار. 05 و 02 و کلا هر دو رقم در مبنای 16 معادل یک بایت ئه و دو رقم سمت چپی در بایت با ارزش بیشتر (اونی که اسم رجیسترش به H ختم میشه) قرار میگیره و دو رقم سمت راستی در بایت با ارزش کمتر (اونی که رجیستر اش به L ختم میشه) قرار میگیره. یعنی 0502 داره در CHCL قرار میگیره.
پس 05 در CH قرار میگیره و 02 در AL.
تبدیل اعداد مبنای 16 به مبنای 10 و برعکس رو هم که با ماشین حساب ها و سایت های آنلاین می توانید انجام بدهید.
خود ویندوز هم ماشین حساب داره با مود Programmer اش تبدیل مبنا داره.
گرچه که بهتره بجای استفاده از ماشین حساب یاد بگیرید بصورت ذهنی این تبدیل مبنا ها رو انجام بدهید.
Hexadecimal to Decimal Converter
Hex to decimal number converter and how to convert.www.rapidtables.comHex to Decimal converter - ConvZone
Convert multiple values at once between Hex (hexadecimal) and Decimal numeral systems. Our site has an easy to use online tool to convert your data.www.convzone.comHex to Decimal Converter Online Tool - Coding.Tools
This online hex to decimal converter tool helps you to convert one input hex number (base 16) into a decimal number (base 10).coding.toolsHex to Decimal Converter
Hex to decimal converter quickly converts hexadecimal numbers into decimal numbers. This hex converter converts base-16 numbers into base-10 numbers.www.utilities-online.infoHex Calculator
This free hex calculator can add, subtract, multiply, and divide hexadecimal values, as well as convert between hexadecimal and decimal values.www.calculator.net
نه. هیچکدوم از گزینه ها مطابقت نداره.ممنون ازتون
پس با توجه به توضیحات شما جواب این سوال گزینه "ب" هستش ؟
لطفا قانون عمومی E5 مجید آنلاین رو مطالعه کنید.ممنون میشم اگر پیویتون رو هم چک کنید
ینی سوال اشتباهه ؟ ))نه. هیچکدوم از گزینه ها مطابقت نداره.
چون بیت ها در مبنای 2 هستند، هر یک بیت شیفت دادن به سمت چپ مقدار عدد رو دو برابر میکنه.
اگر یک بیت به سمت چپ شیفت پیدا کنه، 2 برابر میشه.
اگر دو بیت به سمت چپ شیفت پیدا کنه، 2 * 2 برابر میشه، یعنی 4 برابر.
اگر سه بیت به سمت چپ شیفت پیدا کنه، 2 * 2 * 2 برابر میشه، یعنی 8 برابر.
...
MOV DX, n
فرض کنیم در DX عدد n قرار داره چون نمیدونیم مقدار DX چیه.
MOV CX, 0x0502
مقدار 0x02 در CL و 0x05 در CH قرار میگیره. پس در CL عدد 2 قرار داره.
MOV AX, DX
مقدار n در AX کپی میشه.
SAL DX, CL
چون CL مقدار 2 داشت، مقدار DX که برابر n بود دو بیت به سمت چپ منتقل میشه، یعنی چهار برابر میشه و در DX مقدار 4 * n قرار میگیره.
ADD DX, AX
به DX (که مقدار 4 * n داره)، مقدار AX (که مقدار n داره) اضافه میشه، پس DX میشه (4 * n + (n یعنی 5 * n
SAL DX, 1
مقدار DX (که n * 5 هست) یک بیت به سمت چپ منتقل میشه، یعنی دو برابر میشه و n * 10 در DX قرار میگیره.
بله حتمالطفا قانون عمومی E5 مجید آنلاین رو مطالعه کنید.
احتمالا منظور طراح چیزی شبیه به 0x0501 بوده تا نتیجه 6X بشه.ینی سوال اشتباهه ؟ ))
این سوال ترم پیش درس اسمبلی ما هست !!!
خیر.بله حتما
امکانش هست برای امتحان انلاین این درس به بنده کمک کنید ؟
امتحانش کلا5و6 تا سوال تستی هستش به همین سبک که مشاهده کردین
جسارتا هزینه هم تقبل میکنم