View Full Version : تحلیل شبه کد
zahra-shafiei
جمعه 21 آذر 1393, 16:01 عصر
سلام دوستان
خواهش می کنم یکی لطف کنه کد زیر رو خط به خط تحلیل کنه. خیلی ممنون
x dd 300000 ; 4 93E0h
y dd 250000 ;3 D090h
z dd ?
mov ax,x
sub ax,y
mov z,ax
mov ax,x+2
sbb ax,y+2
mov z+2,ax
masoud.8086
جمعه 21 آذر 1393, 18:16 عصر
سلام
کد بالا در واقع داره دو مقداره 4 بایتی رو از هم تفریق میکنه..تو خط اول و دوم مقادیر x , y رو مقدار مشخص کرده و همچنین در خط بعد z تعریف شده. خوب اینجا چون اعداد دابل ورد هست اومده دو باید اول (قسمت کم ارزش)x ,Y از هم تفریق کرده و داخل 2 بایت اول z (کم ارزش)ذخیره کرده حالا برای درست رسی به اون 2 بایت دیگه مقدارشو دواحد افزایش داده و بعد قسمت پر ارزش x,y از هم کم گرده البته با دستور sbb که همون دستور تفریقه منتها وقتی که yاز X کم میکنه cf (کری) رو چک میکنه اگه cf=1 باشه اونوقت جواب تفریقو دوباره یکی ازش کم میکنه و داخل قسمت پر ارزش zمیریزه..
موفق باشی.
zahra-shafiei
جمعه 21 آذر 1393, 21:07 عصر
سلام
کد بالا در واقع داره دو مقداره 4 بایتی رو از هم تفریق میکنه..تو خط اول و دوم مقادیر x , y رو مقدار مشخص کرده و همچنین در خط بعد z تعریف شده. خوب اینجا چون اعداد دابل ورد هست اومده دو باید اول (قسمت کم ارزش)x ,Y از هم تفریق کرده و داخل 2 بایت اول z (کم ارزش)ذخیره کرده حالا برای درست رسی به اون 2 بایت دیگه مقدارشو دواحد افزایش داده و بعد قسمت پر ارزش x,y از هم کم گرده البته با دستور sbb که همون دستور تفریقه منتها وقتی که yاز X کم میکنه cf (کری) رو چک میکنه اگه cf=1 باشه اونوقت جواب تفریقو دوباره یکی ازش کم میکنه و داخل قسمت پر ارزش zمیریزه..
موفق باشی.
خیلی ممنون از جواب خوبتون
مشکلی که من دارم اینه که وقتی در خط پنجم مقدار دوم رو متمم 16 می گیره و با هم جمع می کنه. جواب میشه c350 و کری 1 میشه. چرا کری 1 میشه؟ مگه کری رقم نقلی نیس !!!
و اینکه مگه واسه آدرس، از [] استفاده نمی کردیم یا lea یا offset، چرا اینجا فقط نوشته x+2 ???
masoud.8086
جمعه 21 آذر 1393, 23:05 عصر
ببینید خود تفریق به نوعی جمع هست!!اصلا پایه اصلی تمام عملیات ها در کامپوتر جمع هست به مثال زیر دقت کن
10-5=5
(5-)+10=5
میبینی دو عملیات زیر دقیقا باهم برابره این یعنی کامپیوتر میاد عدد دوم رو به منفی تبدیل میکنه(همون متمم)و بعد به جای تفریق باهم جمع میکنه ومقدار کری یا بخاطر عملیات به وجود میادو یا متمم شدن عدد..
در مورد سوال دومت :درسته ما برای بدست اوردن ادرس از lea , offset استفاده میکنیم اما اینو در نظر داشته باشد که وقتی از این دو دستور استفاده میکنیم در واقع ادرس شروع مد نظر هست ولی اینجا ما دو بایت بعدی بعد از ادرس شروع لازم داریم..البته باید بگم اینجا داریم از دستور دهی مستقیم استفاده میکنیم..همچنین میشه از دستور lea و[] به صورت مشترکم استفاده کرد..
موفق باشی.
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.