PDA

View Full Version : مبتدی: اگر بیت اول و سوم ثبات ax یک باشد ....



c_doost
جمعه 20 خرداد 1390, 08:25 صبح
سلام
چطوری کدی بنویسم که اگر بیت اول و سوم ثبات AX یک باشد به آن یک واحد اضافه کنم


آیا از دستورات شیفت باید استفاده کنم ؟

unknown.unforgiven
جمعه 20 خرداد 1390, 08:43 صبح
سلام
میتونی از دستور and استفاده بکنی و بعدش هم یه مقایسه کوچیک. تو فقط میخوای ببینی بیت اول و سوم همزمان 1 هستن یا نه؟ واسه این کار به بقیه بیت ها احتیاجی نداری، پس اونا رو صفر میکنیم و فقط بیت اول و سوم رو نگه میداریم. واسه این کار تو باید ax رو با 00000101 00000000 (باینری) and بکنی. با این کار داری همه بیت ها به غیر از بیت اول و سوم رو صفر میکنی (and هر عددی با صفر میشه صفر)، حالا چه بلایی سر بیت اول و سوم میاد مشخصه، اگه 1 باشن که and دو تا 1 میشه 1، ولی اگه صفر باشن and صفر و 1 میشه صفر. حالا حالتی که تو میخوای رو فرض میکنیم (بیت اول و سوم همزمان 1 باشن)، اگه این طور باشه بعد از اینکه با اون دوبایتی که بالا نوشتم and بکنیش حاصلش میشه 00000101 00000000 که معادل 3 دهدهی است. حالا میای یه مقایسه میندازی که ببینی آیا عدد بدست اومده 3 هست یا نه؟ اگه بود ax رو یه واحد افزایش میدی
یه نکته که باید بهش توجه کنی اینه که اگه همه این بلا ها رو سر ax بیاری مقدارش عوض میشه و برنامه خطای منطقی داره، میتونی 2 کار بکنی:
1. اول از همه ax رو تو یه متغیر یا ثبات دیگه بریزی و این بلاها رو سر اون بیاری
2. اول از همه مقدار ax رو بریزی تو پشته و آخر کاری مقدارش رو از پشته ورداری دوباره بریزی تو ax

اینم از کد (با استفاده از پشته)

push ax
and ax,0003h
cmp ax,3
pop ax
jne lbl
inc ax
lbl:


(بدون استفاده از پشته)

mov bl,al
and bl,03h
cmp bl,3
jne lbl
inc ax
lbl:

c_doost
جمعه 20 خرداد 1390, 09:51 صبح
حالا اگر بخوام سوال را اینطوری بگم

اگر بیت اول یا سوم ثبات AX یک باشد به آن یک واحد اضافه کند در غیر ینصورت یک واحد کم کند

چیکار باید بکنم باید از OR استفاده کنم ؟

unknown.unforgiven
جمعه 20 خرداد 1390, 10:02 صبح
mov bl,al
and bl,03h
cmp bl,0
je lbl
inc ax
jmp lbl2
lbl:
dec ax
lbl2: