PDA

View Full Version : سوال: والاتی درباره cf و adc و نحوه چیدمان بیت ها در حافظه



confesseur
دوشنبه 18 مرداد 1389, 20:41 عصر
سلام و خسته نباشید .دوستان نازنینم من سوالامو شماره میزنم


X DD 60000
Y DD 40000
Z DD ?
MOV AX,X
ADD AX,Y
MOV Z,AX
MOV AX,X+2
ADC AX,Y+2
MOV Z+2
اول جواب این سوالا
1-توی کتاب های اسمبلی مدام صحبت از حافظه شده. منظور همان رمه؟یا کش CPU ؟اصلا چه نقشی داره کش cpu توی اسمبلی؟
2-متغیر هایی که توی اسمبلی تعریف میکنیم توی رم هستن دیگه یا کش cpu ?
3-چهار در مبنای دو میشه 100 خب فرض کنید تو cpp یه متغیر میسازیم تک بایتی و چهار رو بهش میدیم توی بایت به چه صورت نوشته میشود 00000100 یا 00100000
درواقع میخام اینو بدونم که بایت با ارزش بعد از بایت کم ارزش قرار میگیره درسته؟ یعنی اگر ایکس ادرس بایت بی ارزش باشه ادرس بایت با ارزش از ایکس بیشتره نه؟
4- درباره فلگ cf هر جمع و تفریق کنیم cf براحتی تغییر میکنه؟ یا فقط توی دستورات sub mov add کری و براو ایجاد میشن؟
اما درباره کد بالا :
5-x , y هردوشون شانزده بیتی هستن پس براحتی در ثبات قرار میگیرن با توجه به اینکه نوع داده ما DD هست ایا x+2 به ورد با ارزش و x به وردکم ارزش اشماره دارد؟

tdkhakpur
دوشنبه 18 مرداد 1389, 21:21 عصر
1-توی کتاب های اسمبلی مدام صحبت از حافظه شده. منظور همان رمه؟یا کش CPU ؟اصلا چه نقشی داره کش cpu توی اسمبلی؟

معمولا منظور از حافظه همان رم هست ولی کش cpu هم به نوعی ram به حساب می آد ولی اصولا باید اسم ثباتها را بهشان داد .
نقش کش هست که باعث اعمال عملیات برای پردازش میشه یعنی شما اعدادی را داخل کش (ثباتها) قرار میدید و وقتی کلاک پالس برای تحریک cpu جرقه میزنه cpu با توجه به کش و داده های موجود در آن میفهمد که باید چه عملی انجام دهد.


2-متغیر هایی که توی اسمبلی تعریف میکنیم توی رم هستن دیگه یا کش cpu ?

داخل ram - همانطور که اسم کش cpu دیده میشود(یعنی ثبات) اینها فضایی هستند که ثابت بوده و به ابن مقدار داخل cpu قید شده و Cpu قادر به اضافه کرد ram خود ندارد.

3-چهار در مبنای دو میشه 100 خب فرض کنید تو cpp یه متغیر میسازیم تک بایتی و چهار رو بهش میدیم توی بایت به چه صورت نوشته میشود 00000100 یا 00100000
درواقع میخام اینو بدونم که بایت با ارزش بعد از بایت کم ارزش قرار میگیره درسته؟ یعنی اگر ایکس ادرس بایت بی ارزش باشه ادرس بایت با ارزش از ایکس بیشتره نه؟
4 در مبنای 2 میشه 100 و فرقی داخل سایر کامپایلرها ندارد همیشه آدرس با شماره پایین کم ارزشترین داده را میگیرید در مورد بیتها هم به همین شکل هست بیت با شماره پایین محتوایش کم داده کم ارزش میگیرد

4- درباره فلگ cf هر جمع و تفریق کنیم cf براحتی تغییر میکنه؟ یا فقط توی دستورات sub mov add کری و براو ایجاد میشن؟
اما درباره کد بالا :

cf با تفریق و جمع تحت تاثر قرار میگیرد.
5
-x , y هردوشون شانزده بیتی هستن پس براحتی در ثبات قرار میگیرن با توجه به اینکه نوع داده ما DD هست ایا x+2 به ورد با ارزش و x به وردکم ارزش اشماره دارد؟
اگر منظورتان ادرس دهی هست بدرسته باید به اندازه 2 واحد برای ایندکسها افزایش داد تا به داده بعدی از نوع word اشاره کرد ولی در مورد dd باید این مقدار 4 باشد.

confesseur
دوشنبه 18 مرداد 1389, 22:15 عصر
ضمن سپاس فراوان درباره سوال پنجم محتملا منظورمو خوب نرسوندم
هفتاد هزار در مبنای دو هست 10001000101110000
ببنید اون یک اخری که پررنگش کردم بیت هفدمه با توجه به نوع داده که در اینجا DD هست اگه من بخام بزارمش تو ثبات ax اون یک اخری نمیره طبیعتا حالا اگه من این عدد هفده بیتیو بزارم توی یه DD شانزده بیت اول میره توی دوتا ورد اولی و بیت هفدهم میره دوتاورد دومی(با ارزش) حالا بخام به این یکه دسترسی پیدا کنم از روش x+2 نمیشه استفاده کنم

tdkhakpur
سه شنبه 19 مرداد 1389, 13:45 عصر
ببینید در حالت کلی به این شکل میشه
اگر 10001000101110000 بره به ax در اینصورت ax میشه


ax = 0001000101110000

حال اگر بخواهید مقدار را داخل dd قرار بدید به این صورت میشه


num dd ?
lad bx, num
mov word ptr [bx] , 0001000101110000b
mov word ptr [bx+2] , 1b

به همین شکل میتونید به مقادیر با ارزش و کم ارزش دسترسی پیدا کنید.