راهنمایی:کد به توان رساندن یک عدد؟؟؟

mojdeh-eng

عضو جدید
کاربر ممتاز
سلام...
من میخوام یه ماکرو برای به توان رساندن ceof^exp بنویسم....این کدی که من نوشتم چه اشکالی داره؟؟؟؟



کد:
pow macro coef,exp
mov cx,exp
mov al,ceof
mov ah,0
lable:
mov bl,coef
mul bl
loop lable
 

mojdeh-eng

عضو جدید
کاربر ممتاز
میشه با دستورSHL هم عدد را به توان2 رساند؟؟؟یا 2را به توان دلخواه رساند؟؟؟

کد:
mov cl,exp یا mov cl,coef
shl 2,cl
این کدی که نوشتم درسته؟؟؟:surprised:
 

sayyad84

متخصص زبان Assembly
کاربر ممتاز
سلام...
من میخوام یه ماکرو برای به توان رساندن ceof^exp بنویسم....این کدی که من نوشتم چه اشکالی داره؟؟؟؟



کد:
pow macro coef,exp
mov cx,exp
mov al,ceof
mov ah,0
lable:
mov bl,coef
mul bl
loop lable
با سلام،
چه مشکلی داره؟ باید Lable رو قبل از شروع ماکرو تعریف کنید! همین طور بهتره مقدار دهی bl خارج از loop باشه!
البته باید به کدتون هم دقت کنید که قبل یا بعد از ماکرو، روی ثبات های مورد استفاده در ماکرو تغییری ایجاد نشه! مثلاً داخل ماکرو عدد 8 تولید می شه ولی قبل از استفاده و بیرون ماکرو این مقدار عوض می شه!
 

sayyad84

متخصص زبان Assembly
کاربر ممتاز
میشه با دستورSHL هم عدد را به توان2 رساند؟؟؟یا 2را به توان دلخواه رساند؟؟؟

کد:
mov cl,exp یا mov cl,coef
shl 2,cl

این کدی که نوشتم درسته؟؟؟:surprised:
شیفت به چپ عدد رو ضرب در 2 می کنه و شیفت به راست تقسیم بر 2! پس شیفت های متوالی به چپ می شه توان های متوالی عدد دو! اما برای اعداد دیگه کاربرد نداره! مثلاً اگه عددمون 2 باشه یه شیفت به چپ می شه 4 دو تا می شه 8 و ...، اما اگه 3 باشه می شه 6، 12 و ... که توان های 3 نیستند!
 

mojdeh-eng

عضو جدید
کاربر ممتاز
کد:
pow macro coef,exp
mov bl,coef
lable:
mov cx,exp
mov al,ceof
mov ah,0
mul bl
loop lable
منظورتون همین بود؟؟؟
البته باید به کدتون هم دقت کنید که قبل یا بعد از ماکرو، روی ثبات های مورد استفاده در ماکرو تغییری ایجاد نشه! مثلاً داخل ماکرو عدد 8 تولید می شه ولی قبل از استفاده و بیرون ماکرو این مقدار عوض می شه!
منظورتون رو از این قسمت متوجه نشدم!!میشه یه خرده بیشتر برام توضیح بدید؟؟مگه تا وقتی بهشون مقدارندیم مقدارشون خودبخود عوض میشه؟؟!!!
 

sayyad84

متخصص زبان Assembly
کاربر ممتاز
کد:
pow macro coef,exp
mov bl,coef
lable:
mov cx,exp
mov al,ceof
mov ah,0
mul bl
loop lable

منظورتون همین بود؟؟؟

منظورتون رو از این قسمت متوجه نشدم!!میشه یه خرده بیشتر برام توضیح بدید؟؟مگه تا وقتی بهشون مقدارندیم مقدارشون خودبخود عوض میشه؟؟!!!
من از قبل و بعد ماکرو گفتم نه lable! منظورم این بود که برنامه رو طوری بنویسید که تداخلی به وجود نیاد! مثلاً می خواید سرویسی از یه وقفه رو اجرا کنید. ورودی سرویس توسط این ماکرو تولید می شه و تو ax قرار داره! حالا بعد از ماکرو شماره ی سرویس رو تو ah می ریزید و ax حاصل از ماکرو (البته تو نظر خودتون) رو به عنوان ورودی می دید، در صورتی که قبلاً با مقداردهی ah، مقدار اصلی از بین رفته!!! این مشکل به خصوص زمانی پیش میاد که بخواید سرویس ها رو هم به صورت ماکرو بنویسید و خیلی به کدی که اجرا می شه توجه نداشته باشید! عکس این مورد هم هست. یعنی خروجی ماکرو روی مقداری که قبلاً تولید کردید و بعد از ماکرو می خواید استفاده کنید، تأثیر می ذاره!
می تونید برنامه ی کامل رو قرار بدید تا ببینم این حالت هست یا نه!
 

Similar threads

بالا