تور لحظه آخری
امروز : پنجشنبه ، 24 آبان 1403    احادیث و روایات:  امام علی (ع):مؤمن هنگام بى نيازى شكر مى گزارد و منافق هرگاه بى نياز شود طغيان مى كند.
سرگرمی سبک زندگی سینما و تلویزیون فرهنگ و هنر پزشکی و سلامت اجتماع و خانواده تصویری دین و اندیشه ورزش اقتصادی سیاسی حوادث علم و فناوری سایتهای دانلود گوناگون شرکت ها

تبلیغات

تبلیغات متنی

صرافی ارکی چنج

صرافی rkchange

سایبان ماشین

دزدگیر منزل

تشریفات روناک

اجاره سند در شیراز

قیمت فنس

armanekasbokar

armanetejarat

صندوق تضمین

Future Innovate Tech

پی جو مشاغل برتر شیراز

لوله بازکنی تهران

آراد برندینگ

خرید یخچال خارجی

موسسه خیریه

واردات از چین

حمية السكري النوع الثاني

ناب مووی

دانلود فیلم

بانک کتاب

دریافت دیه موتورسیکلت از بیمه

طراحی سایت تهران سایت

irspeedy

درج اگهی ویژه

تعمیرات مک بوک

دانلود فیلم هندی

قیمت فرش

درب فریم لس

زانوبند زاپیامکس

روغن بهران بردبار ۳۲۰

قیمت سرور اچ پی

خرید بلیط هواپیما

بلیط اتوبوس پایانه

قیمت سرور dl380 g10

تعمیرات پکیج کرج

لیست قیمت گوشی شیائومی

خرید فالوور

بهترین وکیل کرج

بهترین وکیل تهران

اوزمپیک چیست

خرید اکانت تریدینگ ویو

خرید از چین

خرید از چین

تجهیزات کافی شاپ

نگهداری از سالمند شبانه روزی در منزل

بی متال زیمنس

ساختمان پزشکان

ویزای چک

محصولات فوراور

خرید سرور اچ پی ماهان شبکه

دوربین سیمکارتی چرخشی

همکاری آی نو و گزینه دو

کاشت ابرو طبیعی و‌ سریع

الک آزمایشگاهی

الک آزمایشگاهی

خرید سرور مجازی

قیمت بالابر هیدرولیکی

قیمت بالابر هیدرولیکی

قیمت بالابر هیدرولیکی

لوله و اتصالات آذین

قرص گلوریا

 






آمار وبسایت

 تعداد کل بازدیدها : 1829387196




هواشناسی

نرخ طلا سکه و  ارز

قیمت خودرو

فال حافظ

تعبیر خواب

فال انبیاء

متن قرآن



اضافه به علاقمنديها ارسال اين مطلب به دوستان آرشيو تمام مطالب
archive  refresh

تفاوت یک بایتی و دو بایتی در اسمبلی -


واضح آرشیو وب فارسی:سایت ریسک: تفاوت یک بایتی و دو بایتی در اسمبلی scooter2005 22 فروردين 1388, 16:51با توجه به اینکه میگن al , ah یک بایتی هستند و ax , dx دو بایتی هستند از کجا باید فهمید سوال ما یک بایتی هست یا دوبایتی مثلا در 5*12 جواب شده است mov al,12 mov bl ,5 mul bl یا در (y=12-(c*d اگر مثلا مقدار دی باشد 6 و سی باشد 13 جواب شده mov c,13 mov d,6 sub ax,12 mul c mov y,ax در مجموع از کجا بفهمیم که چه وقت باید از کدوم استفاده کنیم یعنی یه بایتی یا دو the_king 23 فروردين 1388, 00:43با توجه به اینکه میگن al , ah یک بایتی هستند و ax , dx دو بایتی هستند از کجا باید فهمید سوال ما یک بایتی هست یا دوبایتی مثلا در 5*12 جواب شده است mov al,12 mov bl ,5 mul bl یا در (y=12-(c*d اگر مثلا مقدار دی باشد 6 و سی باشد 13 جواب شده mov c,13 mov d,6 sub ax,12 mul c mov y,ax در مجموع از کجا بفهمیم که چه وقت باید از کدوم استفاده کنیم یعنی یه بایتی یا دو سوال خیلی خوبی رو مطرح کردید. اگر در صورت سوال مشخص نشده که نتیجه بایستی دو بایتی باشد یا یک بایتی، عملیاتی که در محاسبات انجام می شود رو بررسی کنید : 1) در هر متغیر و رجیستر یک بایتی بزرگترین عددی که ذخیره می شود 255 است و کوچکترین عدد منفی که می تواند در یک بایت ذخیره شود 128- است. پس اگر در بخشی از محاسبات با عددی بزرگتر از 255 یا عددی کوچکتر از 128- مواجه شدید، بایستی از متغیر و رجیستر دو بایتی استفاده شود. وگرنه بخشی از بیت های با ارزش عدد از دست می رود و نتیجه محاسبه درست نخواهد بود. 2) ضرب و تقسیم کردن یک بایتی در زبان اسمبلی 8086 از دو بایتی اش ساده تر است. در ضرب و تقسیم دو بایتی همواره مقدار رجیستر dx هم درگیر است. به همین دلیل است که تا حد امکان محاسبات را تک بایتی انجام دهید، از این جهت که نگران مقدار قبلی و بعدی رجیستر dx که در ضرب و تقسیم دو بایتی حاصل می شود نیستید. scooter2005 28 فروردين 1388, 08:24الان مي تونيد بگيد اين موارد درست هست يا خير t=ax+bx+m+13 add ax,bx add ax,m add ax,13 mov t,ax a=b-c+d mov ah,b mov bh,c sub ah,bh add ah,d mov a,ah the_king 28 فروردين 1388, 13:47الان مي تونيد بگيد اين موارد درست هست يا خير t=ax+bx+m+13 add ax,bx add ax,m add ax,13 mov t,ax a=b-c+d mov ah,b mov bh,c sub ah,bh add ah,d mov a,ah بله درست است. scooter2005 28 فروردين 1388, 14:39این دوتا هم درست هست که ضرب هستن x=a*b-c*d mov al,a mul b mov bx,ax sub bx,c mul d mov x,bx y=a*(b-c) mov al,b mov ah,c mov cl,a sub al,ah mul a mov x,al the_king 28 فروردين 1388, 15:26این دوتا هم درست هست که ضرب هستن x=a*b-c*d mov al,a mul b mov bx,ax sub bx,c mul d mov x,bx نه اشتباه است، چون عملگر ضرب نسبت به جمع و تفریق ارجحیت دارد : x = (a*b) - (c*d) بایستی ابتدا c را در d ضرب کنید و سپس حاصل را از a * b کسر نمایید : mov al, c mul d mov bx, ax mov al, a mul b sub ax, bx mov x, ax و یا ابتدا a را در b ضرب نموده و پس از محاسبه c * d، نتیجه را از ضرب اولی کسر نمایید : mov al, a mul b mov bx, ax mov al, c mul d sub bx, ax mov x, bx y=a*(b-c) mov al,b mov ah,c mov cl,a sub al,ah mul a mov x,al تقریبا درست است، فقط دو نکته رعایت نشده : 1) مقدار دهی cl بی مورد بوده چون از cl استفاده نکردید. 2) بجای y مقدار نهایی را در x قرار دادید. به شیوه خلاصه تر می توانید بنویسید : mov al, b sub al, c mul a mov y, al البته چون در صورت سوالها مشخص نشده که x و y مقادیر 8 بیتی دارند یا 16 بیتی، در انتخاب شیوه 8 یا 16 بیتی آزاد هستیم. scooter2005 05 ارديبهشت 1388, 06:10منظور شما در جوابا از 8 بايتي و 16 بايتي همون 1 بايتي و دو بايتي هست يا نه فرق دارن با هم . استاد ما مثالها رو 1 بايتي و دوبايتي متمايز مي كنه از هم . ميشه يكبار خلاصه نحوه ضرب يك بايتي و دوبايتي رو توضيح بديد يا مثال . the_king 05 ارديبهشت 1388, 11:34منظور شما در جوابا از 8 بايتي و 16 بايتي همون 1 بايتي و دو بايتي هست يا نه فرق دارن با هم . استاد ما مثالها رو 1 بايتي و دوبايتي متمايز مي كنه از هم . ميشه يكبار خلاصه نحوه ضرب يك بايتي و دوبايتي رو توضيح بديد يا مثال . من گفتم 8 بایتی و 16 بایتی ؟ بایت نه، بیت، 8 بیتی و 16 بیتی، هر بایت 8 بیت است، پس 8 بیتی معادل همان 1 بایتی است و 16 بیتی معادل 2 بایتی. ضرب یک بایتی (8 بیتی) توسط دستور Mul بدین شکل انجام می شود که مقدار موجود در رجیستر AL در یک مقدار یک بایتی (8 بیتی) که بعد از فرمان Mul مشخص می گردد، ضرب شده و حاصل در AX قرار می گیرد : مثلا MUL BL مقدار AL را در BL ضرب کرده و حاصل را در AX قرار می دهد. مثلا MUL CH مقدار AL را در CH ضرب کرده و حاصل را در AX قرار می دهد. مثلا MUL AL مقدار AL را در AL ضرب کرده و حاصل را در AX قرار می دهد. ضرب دو بایتی (16 بیتی) بدین شکل انجام می شود که مقدار موجود در رجیستر AX در یک مقدار دو بایتی (16 بیتی) که بعد از فرمان Mul مشخص می گردد، ضرب شده و حاصل در ترکیب دو رجیستر AX و DX قرار می گیرد، بدین نحو که دو بایت کم ارزش در AX و 2 بایت با ارزش در DX قرار می گیرد. مثلا MUL BX مقدار AX را در BX ضرب کرده و حاصل را در DX:AX قرار می دهد. مثلا MUL CX مقدار AX را در CX ضرب کرده و حاصل را در DX:AX قرار می دهد. مثلا MUL AX مقدار AX را در AX ضرب کرده و حاصل را در DX:AX قرار می دهد. فرض کنیم که مقدار AL برابر 3 و مقدار BL برابر 4 باشد، پس از اجرای دستور MUL BL، مقدار AX برابر 12 خواهد بود. فرض کنیم که مقدار AX برابر 3 و مقدار BX برابر 4 باشد، پس از اجرای دستور MUL BX، مقدار AX برابر 12 و مقدار DX برابر 0 خواهد بود. scooter2005 22 خرداد 1388, 17:40میشه لطفا بگید این دو مورد هم صحیح نوشته شده اند یا نه : cx=(a/b)-12 mov 500,a mov 284,b mov ax,a mov dx,0 div b sub ax,12 mov cx,ax در واقع در دو خط آخر بالایی درسته یا باید بگیم ( با فرض بر اینکه آ دوبایتی هست و بی هم دو بایتی) : sub dx,12 mov cx,dxاین سوال هم t=c-(a/b) mov c,125 mov a,400 mob b,73 mov ax,a div b sub c,al mob bl,c mov t,bl با فرض بر اینکه تقسیم دو بایت بر یک بایت هست تو این سوال هم این درست هست یا دو خط آخر رو حذف کنیم و بگیم mov t,al the_king 22 خرداد 1388, 19:49میشه لطفا بگید این دو مورد هم صحیح نوشته شده اند یا نه : cx=(a/b)-12 mov 500,a mov 284,b mov ax,a mov dx,0 div b sub ax,12 mov cx,ax در واقع در دو خط آخر بالایی درسته یا باید بگیم ( با فرض بر اینکه آ دوبایتی هست و بی هم دو بایتی) : sub dx,12 mov cx,dx دو سطر زیر اشتباه هستند، شما نمی توانید مقدار یک خانه از حافظه را در یک عدد کپی کنید : mov 500,a mov 284,b احتمالا منظورتان برعکس است : MOV a, 500 MOV b, 284 بقیه کدی که نوشتید کاملا اصولی و صحیح است : mov ax,a mov dx,0 div b sub ax,12 mov cx,ax این سوال هم t=c-(a/b) mov c,125 mov a,400 mob b,73 mov ax,a div b sub c,al mob bl,c mov t,bl گویا شما a را دو بایتی و b و c و t را یک بایتی فرض کرده اید، که البته فرض غیر قابل قبولی نیست، صرفا از این بابت فرض تان اهمیت دارد که در نحوه نوشتن کد ها خیلی تاثیر گذار است. سه سطر انتهایی کدتان صحیح است، اما مقدار c را برای محاسبه نتیجه خراب می کنید : sub c,al mob bl,c mov t,bl بهتر بود بجای دستکاری مقدار c از یک رجیستر همانند bl استفاده می کردید : mov c,125 mov a,400 mov b,73 mov ax,a div b mov bl, c sub bl, al mov t, bl با فرض بر اینکه تقسیم دو بایت بر یک بایت هست تو این سوال هم این درست هست یا دو خط آخر رو حذف کنیم و بگیم mov t,al نه، چون شما در al صرفا حاصل تقسیم a / b را دارید، پس al معادل فرمول t نیست. بایستی مقدار al را از c کم کنید. یک راه دیگر برای محاسبه c - al استفاده از (c + (-al است، بدین ترتیب که مقدار al را NEG کرده (al-) و حاصل را با c جمع کنید، اینطوری نیاز به bl یا هیچ رجیستر کمکی دیگری نیست : mov c,125 mov a,400 mov b,73 mov ax,a div b neg al add al, c mov t, al




این صفحه را در گوگل محبوب کنید

[ارسال شده از: سایت ریسک]
[مشاهده در: www.ri3k.eu]
[تعداد بازديد از اين مطلب: 4786]

bt

اضافه شدن مطلب/حذف مطلب







-


گوناگون

پربازدیدترینها
طراحی وب>


صفحه اول | تمام مطالب | RSS | ارتباط با ما
1390© تمامی حقوق این سایت متعلق به سایت واضح می باشد.
این سایت در ستاد ساماندهی وزارت فرهنگ و ارشاد اسلامی ثبت شده است و پیرو قوانین جمهوری اسلامی ایران می باشد. لطفا در صورت برخورد با مطالب و صفحات خلاف قوانین در سایت آن را به ما اطلاع دهید
پایگاه خبری واضح کاری از شرکت طراحی سایت اینتن