چطوری می تونم محتوای یک حافظه 8 بیتی یا al رو توی 16 بیتی ax بریزم؟
چطوری می تونم محتوای یک حافظه 8 بیتی یا al رو توی 16 بیتی ax بریزم؟
بادستور mov al,ax میشه این کار رو کرد.
چون ثبات al و ax هم اندازه نیستن برای منتقل کردن محتوایشون باید از دستور movzx یا movsx استفاده بشه
movzx ax, al
movsx ax, al
خوب اگر از این برنامه می خواین استفاده کنین میتونین این مثال رو ببینیند
اگه مقدار تو al هست و حالا می خواین از ax استفاده کنین، کافیه ثبات ax رو با مقدار 0FFh عمل and رو انجام
بدین
and ax, 0FFh
اگر می خواین ثبات al رو در ثبات دیگه مثلا bx بریزین، اینجور میشه
mov bl, al
and bx, 0FFh
مقدار ثبات al رو در ثبات همسایز خودش bl میریزیم بعد مثل مثال قبل عمل میکنیم
آخرین ویرایش به وسیله hoax3r : چهارشنبه 30 مرداد 1387 در 16:26 عصر
مرسی از راهنماییتون اما جواب غلطه
(177) operands do not match: 16 bit register and 8 bit effective address (EA)
این زمانیه که می خوام al یا متغیری که جنسش از db هست رو توی ax بریزم
این دستوری رو هم که شما گفتید اجرا کردم اما غلطه جوابش.
من می خوام دستور تقسیم رو انجام بدم زمانی که عدد 8 رو به صورت مستقیم می ریزم توی ax بهم مقسوم علیه 0 می ده چون تقسیم بر 10 اما زمانی که 0ffh رو با ax اند می کنم c رو نشون می ده.
فکر کنم تا حدودی مشکل رو حل کردم ، چون توی ah صفر ریختم توی al هم که همون مقدار بود و بعد با 1 and کردم . هر بیتی که صفر باشه صفر می شه دیگه. مرسی از کمک همه، اما بازم یه مشکلی داره اما تا حدودی رفع شده.
البته به نظرم زمانی لازم بود ah رو صفر کنیم که بخوایم با 1 اند رو انجام بدیم. با دستور بالا احتیاج به مقدار دهی ah هم نیست چون طرف ah با صفر and میشه که نتیجه ش هم صفره.
البته به نظر درست هگز 00ffh باشه.
هر دوی 0FFh و 00FFh یه مقدارن هر چه قدر صفر قبل FFh باشه بازم یه مقدار هست ولی چون کامپایلر با
FFh مشکل داره شاید بخاطر این که با عدد شروع نشده من مجبور بودم یه صفر قبلش بزارم
برای اینکه فقط ثبات al رو تو ax قرار بگیره باید ثبات ah رو صفر کنیم و این عمل رو همین دستور انجام میده
and ax, 0FFh
احتیاجی نیست دیگه قبلش هم ah رو صفر کنیم
شاد باشید
چرا از عملگر ptr استفاده نمیکنید؟؟؟
سلام .
اولا: اگر al داراي يه محتوايي باشه خود به خود اون محتوا در ax قرار مي گيرد . فقط بايستي ah برابر 0 باشه تا جواب غلط نشه.
در ثاني: اگر عدد در حافظه باشه اونو به al انتقال بديد
mov al,[store] و ah=0
mov var,al
movzx ax,var
mov al,byte ptr [xxxx]
cbw