View Full Version : درخواست دو تا برنامه اسمبلی
MN-maryam
جمعه 16 آبان 1393, 15:00 عصر
سلام ، در مورد این دو تا برنامه راهنمایی میخواستم:
1-برنامه ای که بیت های زوج ax رو صفر کنه و بقیه بدون تغییر باشند و برنامه ی دیگه ای که بیت هاب فرد رو یک کنه و بقیه بدون تغییر.
2-بیت های خاصی از ax مثلا بیت 3و 8و11 رو not کنه و بقیه بدون تغییر
؟؟؟؟؟؟؟؟؟؟؟؟؟؟
masoud.8086
جمعه 16 آبان 1393, 18:18 عصر
سلام ابتدا با وقفهint 21h/ ah,0ah عدد ورودیتو بگیری به صورت دسیمال یا در مبنای دو که بهتر در مبنای 2باشه بعدش داخل آرایه بریزی . بعدش با استفادهاز یک حلقه میای بیتای مورد نظر رو صفر یا یک میکنی.برای not کردن هم خونهای ارایه رو چک میکنی اگه یک بود صفر بشه و اگر صفر بود یک باشه . بعد از این عملیات رشته عددی داخل آرایتو ارزش گذاری کنیو به داخل ax برگردونی.
اگه نمیخوای عددو از وردی بگیری کارت یکم آسون تر میشه باید عدد داخل ax رو متوالی به 2 تقسیم کنی که بتونی به مبنای دو ببریش بعد داخل ارایه بزاری و با استفاده از حلقه که بالا توضیح دادم بیای بیتا رو عوض کنی و همچنین برای عملیات not.و ارزش گذاری.
موفق باشی.
MN-maryam
شنبه 17 آبان 1393, 18:11 عصر
ممنون ولی چجوری باید بریزم توی آرایه؟؟
masoud.8086
شنبه 17 آبان 1393, 20:58 عصر
aryy db 2 dup(?)
b db 10 , 14 ,15
mov si,0
mov di,0
mov cx,3
l:
mov al,b[si]
mov aryy[di],al
inc si
inc di
loop l
ببين فرضا ميخواي اعداد ارايه b رو به ارايه aryy منتقل كني 3 تا عدد..
xman_1365_x
سه شنبه 20 آبان 1393, 09:43 صبح
سلام ، در مورد این دو تا برنامه راهنمایی میخواستم:
1-برنامه ای که بیت های زوج ax رو صفر کنه و بقیه بدون تغییر باشند و برنامه ی دیگه ای که بیت هاب فرد رو یک کنه و بقیه بدون تغییر.
2-بیت های خاصی از ax مثلا بیت 3و 8و11 رو not کنه و بقیه بدون تغییر
؟؟؟؟؟؟؟؟؟؟؟؟؟؟
برای سوال اول و دومتون باید از and و or استفاده کنید، و برای سوال سوم استفاده از آرایه زیاد جالب نیست، من زیاد بهش فکر نکردم احتمالا ترکیب گیتی باشه برای تبدیل سریع تر ،من کدشو با چک کردن فلگ پرچم یا همون کری فلگ نوشتم
جاییش سوال داشتین بپرسین
;Q1:
mov ax,0000000001010101b ;bit15 - bit00
and ax,1010101010101010b
;Q2:
mov ax,0000000010000011b
or ax,1010101010101010b
ویرایش شد:
الان تونستم کمی فکر کنم، دیدم راحت میشه با ترکیب not ,xor a,not یا xor a,true dیا با استفاده از دستورات چرخشی و... این کارو انجام داد،اینم جواب سوال سوم
روش اول
mov ax,1111111111111111b
xor ax,0000100100001000b
mov ax,0000000000000000b
xor ax,0000100100001000b
روش دوم
;Q3_test1
mov ax,1111111111111111b
not ax
xor ax,1111011011110111b
;Q3_test2
mov ax,1111011011110111b
not ax
xor ax,1111011011110111b
روش سوم
;Q3:
;ax= bit15 - bit0
;not bit 3,8,11
push bx
mov ax,1010101010101011b
mov bx,ax
mov cl,4
rcr bx,cl
jnc L1
and ax,1111111111110111b ;bit3 = 0
jmp end_L1
L1:
or ax,0000000000001000b ;bit3 = 1
end_L1:
mov bx,ax
mov cl,9
rcr bx,cl
jnc L2
and ax,1111111011111111b ;bit8 = 0
jmp end_L2
L2:
or ax,0000000100000000b ;bit8 = 1
end_L2:
mov bx,ax
mov cl,12
rcr bx,cl
jnc L3
and ax,1111011111111111b ;bit11 = 0
jmp end_L3
L3:
or ax,0000100000000000b ;bit11 = 1
end_L3:
pop bx
موفق باشی
Delphi Coder
سه شنبه 20 آبان 1393, 19:20 عصر
سلام ، در مورد این دو تا برنامه راهنمایی میخواستم:
1-برنامه ای که بیت های زوج ax رو صفر کنه و بقیه بدون تغییر باشند و برنامه ی دیگه ای که بیت هاب فرد رو یک کنه و بقیه بدون تغییر.
2-بیت های خاصی از ax مثلا بیت 3و 8و11 رو not کنه و بقیه بدون تغییر
؟؟؟؟؟؟؟؟؟؟؟؟؟؟
سوال اول که پاسخش یک دستور and و یک دستور or هست. دوستان پاسخ دادند.
سوال دوم : ناچار باید از یک رجیستر کمکی استفاده کنیم. اول ax رو روی bx میریزیم بعد سه تا بیت مذکور رو روی ax صفر میکنیم. bx رو not میکنیم و همه بیتها غیر از بیتهای مذکور رو با استفاده از دستور and صفر میکنیم. بعد ax رو با bx باید OR کنیم تا نتیجه دلخواه بدست بیاد.
mov bx,ax ;ax ro roye bx mirizim
and ax,1111011011110111b ; bithaye mazkor ro roye ax sefr mikonim
not bx ;bx ro not mikonim
and bx,0000100100001000b ; gheir az bithaye mazkoor hame sefr mishand
or ax , bx ; not shodeye bithaye mazkoor har chi ke bashe dar ax jaye khodesh mishine
xman_1365_x
سه شنبه 20 آبان 1393, 23:52 عصر
جواب رو با سه روش گفتم که!
کوتاهترین گیت xor x,true= not
Delphi Coder
چهارشنبه 21 آبان 1393, 00:24 صبح
جواب رو با سه روش گفتم که!
کوتاهترین گیت xor x,true= not
بله حق با شماست من اولش فکر کردم توی روش 1 و 2 اشتباه کردین و روش 3 تون هم که الگوریتمی بود چک نکردم. اصلا حواسم نبود معادل ریاضی استفاده کردید. به هر حال اینم یه روش دیگه با استفاده از خود دستور not بود که اضافه کردم به مطلب.
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.