View Full Version : چطوری می تونم محتوای یک حافظه 8 بیتی یا al رو توی 16 بیتی ax بریزم؟
mms_4004
سه شنبه 29 مرداد 1387, 22:49 عصر
چطوری می تونم محتوای یک حافظه 8 بیتی یا al رو توی 16 بیتی ax بریزم؟
fazlnet
چهارشنبه 30 مرداد 1387, 01:36 صبح
بادستور mov al,ax میشه این کار رو کرد.
hoax3r
چهارشنبه 30 مرداد 1387, 09:41 صبح
چون ثبات al و ax هم اندازه نیستن برای منتقل کردن محتوایشون باید از دستور movzx یا movsx استفاده بشه
movzx ax, al
movsx ax, al
mms_4004
چهارشنبه 30 مرداد 1387, 12:54 عصر
بادستور mov al,ax میشه این کار رو کرد.
خوب عزیزم این کار خطا است.
mms_4004
چهارشنبه 30 مرداد 1387, 13:01 عصر
چون ثبات al و ax هم اندازه نیستن برای منتقل کردن محتوایشون باید از دستور movzx یا movsx استفاده بشه
movzx ax, al
movsx ax, al
من اینو شنیدم اما من از برنامه ای به نام emulator 8086 استفاده می کنم این دستورات رو نمی شناسه.
hoax3r
چهارشنبه 30 مرداد 1387, 16:09 عصر
خوب اگر از این برنامه می خواین استفاده کنین میتونین این مثال رو ببینیند
اگه مقدار تو al هست و حالا می خواین از ax استفاده کنین، کافیه ثبات ax رو با مقدار 0FFh عمل and رو انجام
بدین
and ax, 0FFh
اگر می خواین ثبات al رو در ثبات دیگه مثلا bx بریزین، اینجور میشه
mov bl, al
and bx, 0FFh
مقدار ثبات al رو در ثبات همسایز خودش bl میریزیم بعد مثل مثال قبل عمل میکنیم
mms_4004
پنج شنبه 31 مرداد 1387, 23:33 عصر
خوب اگر از این برنامه می خواین استفاده کنین میتونین این مثال رو ببینیند
اگه مقدار تو al هست و حالا می خواین از ax استفاده کنین، کافیه ثبات ax رو با مقدار 0FFh عمل and رو انجام
بدین
and ax, 0FFh
اگر می خواین ثبات al رو در ثبات دیگه مثلا bx بریزین، اینجور میشه
mov bl, al
and bx, 0FFh
مقدار ثبات al رو در ثبات همسایز خودش bl میریزیم بعد مثل مثال قبل عمل میکنیم
مرسی از راهنماییتون اما جواب غلطه
(177) operands do not match: 16 bit register and 8 bit effective address (EA)
این زمانیه که می خوام al یا متغیری که جنسش از db هست رو توی ax بریزم
این دستوری رو هم که شما گفتید اجرا کردم اما غلطه جوابش.
من می خوام دستور تقسیم رو انجام بدم زمانی که عدد 8 رو به صورت مستقیم می ریزم توی ax بهم مقسوم علیه 0 می ده چون تقسیم بر 10 اما زمانی که 0ffh رو با ax اند می کنم c رو نشون می ده.
mms_4004
جمعه 01 شهریور 1387, 05:47 صبح
فکر کنم تا حدودی مشکل رو حل کردم ، چون توی ah صفر ریختم توی al هم که همون مقدار بود و بعد با 1 and کردم . هر بیتی که صفر باشه صفر می شه دیگه. مرسی از کمک همه، اما بازم یه مشکلی داره اما تا حدودی رفع شده.
mms_4004
جمعه 01 شهریور 1387, 06:15 صبح
خوب اگر از این برنامه می خواین استفاده کنین میتونین این مثال رو ببینیند
اگه مقدار تو al هست و حالا می خواین از ax استفاده کنین، کافیه ثبات ax رو با مقدار 0FFh عمل and رو انجام
بدین
and ax, 0FFh
اگر می خواین ثبات al رو در ثبات دیگه مثلا bx بریزین، اینجور میشه
mov bl, al
and bx, 0FFh
مقدار ثبات al رو در ثبات همسایز خودش bl میریزیم بعد مثل مثال قبل عمل میکنیم
متشکر حالا متوجه منظورتون شدم ، شرط اولیش اینه که ah رو قبل and صفر بدیم و با دستور
mov ax, and ax,0000000011111111b
و یا همون 0ffh اند کنیم.
متشکر، مشکل کاملاً رفع شد.
mms_4004
جمعه 01 شهریور 1387, 06:19 صبح
البته به نظرم زمانی لازم بود ah رو صفر کنیم که بخوایم با 1 اند رو انجام بدیم. با دستور بالا احتیاج به مقدار دهی ah هم نیست چون طرف ah با صفر and میشه که نتیجه ش هم صفره.
mms_4004
جمعه 01 شهریور 1387, 06:20 صبح
البته به نظر درست هگز 00ffh باشه.
hoax3r
جمعه 01 شهریور 1387, 13:14 عصر
هر دوی 0FFh و 00FFh یه مقدارن هر چه قدر صفر قبل FFh باشه بازم یه مقدار هست ولی چون کامپایلر با
FFh مشکل داره شاید بخاطر این که با عدد شروع نشده من مجبور بودم یه صفر قبلش بزارم
برای اینکه فقط ثبات al رو تو ax قرار بگیره باید ثبات ah رو صفر کنیم و این عمل رو همین دستور انجام میده
and ax, 0FFh
احتیاجی نیست دیگه قبلش هم ah رو صفر کنیم
شاد باشید
sianooshonline
شنبه 02 شهریور 1387, 13:12 عصر
چرا از عملگر ptr استفاده نمیکنید؟؟؟
rezasprit
شنبه 09 شهریور 1387, 14:05 عصر
سلام .
اولا: اگر al داراي يه محتوايي باشه خود به خود اون محتوا در ax قرار مي گيرد . فقط بايستي ah برابر 0 باشه تا جواب غلط نشه.
در ثاني: اگر عدد در حافظه باشه اونو به al انتقال بديد
mov al,[store] و ah=0
sianooshonline
پنج شنبه 14 شهریور 1387, 11:38 صبح
mov var,al
movzx ax,var
Delphi Coder
شنبه 16 شهریور 1387, 21:21 عصر
mov al,byte ptr [xxxx]
cbw
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.