السلام عليكم
عندي جدول به قيم وأريد وضعها في المسجل bh كيف أقوم بذلك
array db 53h,53h,53h,62h
------------
mov cx,4
go:
mov bh,array[cx]
loop go
مع العلم أني أستخدم Tasm
السلام عليكم
عندي جدول به قيم وأريد وضعها في المسجل bh كيف أقوم بذلك
array db 53h,53h,53h,62h
------------
mov cx,4
go:
mov bh,array[cx]
loop go
مع العلم أني أستخدم Tasm
GM
معلش ,, سؤال
هو مش المفروض يقلل قيمة ecx علشان يتنقل على القيم !!
dec ecx
إن قلت قال الله قال رسولـه همزوك همز المنكر المتعالي
أو قلت قد قال الصحابة والألـى تبعاً لهم بالقول والأعمال
أو قلت قـال الشافعي وأحمد و أبو حنيفة والإمام الغالي
صدوا عن وحي الإله ودينـه واحتالوا على حرام الله بالإحلال
يا أمةً لعبت بدين نبيها كتلاعب الصبيان في الأوحال
حاشا رسول الله يحكم بالهوى تلك إذاً حكومة الضلال
loop تفعل ذلك ...
تم تعديل هذه المشاركة بواسطة GamingMasteR في 16 يوليو 2009 في 14:37
mov eax, dword ptr ds:[0xffdf0308]
jmp dword ptr [eax+0xfc]
GamingMasteR كتب:loop تفعل ذلك ...
اقولك على سر
والله قرأت loop على انها jmp مع ان مفيش تشابه بين الكلمتين :blink: :blink:
سلامتك يا عيونى :wacko: :wacko:
إن قلت قال الله قال رسولـه همزوك همز المنكر المتعالي
أو قلت قد قال الصحابة والألـى تبعاً لهم بالقول والأعمال
أو قلت قـال الشافعي وأحمد و أبو حنيفة والإمام الغالي
صدوا عن وحي الإله ودينـه واحتالوا على حرام الله بالإحلال
يا أمةً لعبت بدين نبيها كتلاعب الصبيان في الأوحال
حاشا رسول الله يحكم بالهوى تلك إذاً حكومة الضلال
جزاكم الله خيرا ولكن لم أستطع تطبيقه على هذا الكود
وهو عبارة على MENU يمكنني التحكم به بالأسهم ولكن إستخدمت فقط الحرف a للتحكم به والضغط على أي شيء آخر يخرج من البرنامج المهم هذا هو البرنامج
code segment main proc assume ds:data,cs:code mov ax,data mov ds,ax start1: cmp d,2 jne go mov cl,4 mov d,cl jmp go1 go: cmp d,4 jne go1 mov cl,2 mov d,cl go1: print_menu: mov ch,c; inc ch; mov c,ch; mov ah,06h mov al,01h mov bh,color[d]; الحالي menu لتحديد لون mov ch,l ; السطر العلوي inc ch mov l,ch mov cl,14 ; العمود الأيمن mov dh,l ; السطر السفلي mov dl,7 ; العمود الأيسر int 10h mov bh,0; رقم الصفحة mov dh,l; رقم السطر الذي ستظهر فيه الرسالة mov dl,7; رقم العمود الذي ستظهر فيه الرسالة mov ah,02 int 10h ;mov bx,c lea dx,msg5 mov ah,9 int 21h cmp d,4 jne here mov cl,1 mov d,cl jmp go2 here: inc d go2: cmp c,4 jne print_menu down: mov cl,0 mov c,cl mov cl,13 mov l,cl mov ah,01h int 21h cmp AL,61h JNE UP1 CMP s,4 JE ELSE2 MOV BH,s add bh,1 mov s,bh mov cl,s mov d,cl jmp start1 ELSE2: MOV BH,1 mov s,bh mov cl,s mov d,cl jmp start1 UP1: mov ah,4ch int 21h main endp code ends end main
لا تنسى بأنه يمكن التحكم به بحرف a
المشكلة كما ذكرت وهي لم أتمكن من وضع عناصر الجدول color في bh (المؤشر هو dو) يعني mov bh,color[d]
تم تعديل هذه المشاركة بواسطة hatem في 18 يوليو 2009 في 22:44
السلام عليكم
لقد أعدت كتابه لينفذ على masm ولكن نفس المشكلة لم أستطع وضع قيم الجدول في BH وذلك حسب المؤشر d
.model small .stack 200h .data msg db 'item1$' color dw 1EH,53H,53H,53H L db 13;position of the first line where we print the menu c db 0;to print the 4 items s db 1;position of cursor d db 0;Index for color array .code MOV AX,@DATA MOV DS,AX start1: cmp d,2 jne go mov cl,4 mov d,cl jmp go1 go: cmp d,4 jne go1 mov cl,2 mov d,cl go1: print_menu: mov ch,c inc ch mov c,ch mov ah,06h mov al,01h mov bh, byte ptr [color+d]; dالمؤشر لعناصر الجدول هو المتغير BH في color المشكلة هنا هو كيف وضع عناصر الجدول mov ch,l ; upper line inc ch mov l,ch mov cl,14 ; right line mov dh,l ; down line mov dl,7 ; left line int 10h mov bh,0 mov dh,l mov dl,7 mov ah,02 int 10h lea dx,msg mov ah,9 int 21h cmp d,4 jne here mov cl,1 mov d,cl jmp go2 here: inc d go2: cmp c,4 jne print_menu down: mov cl,0 mov c,cl mov cl,13 mov l,cl mov ah,01h int 21h cmp AL,61h JNE UP1 CMP s,4 JE ELSE2 MOV BH,s add bh,1 mov s,bh mov cl,s mov d,cl jmp start1 ELSE2: MOV BH,1 mov s,bh mov cl,s mov d,cl jmp start1 UP1: MOV Ah,4CH INT 21h END
هذه بهذا الشكل لا تعمل :
mov bh, byte ptr [color+d]
تم التحايل عليها بالشكل التالي :
بارك الله فيك أخي AND على المساعدة أظن أن المشكلة لم تحل
لماذا PUSH و POP ?
ما أردته هو إعطاء عناصر Menu لون واحد إلا واحد وعند الضغط على حرف a سيطبع عناصر الجدول بلون واحد ولبعنصر الثاني بلون مغاير وهكذا الثالث والبقية بلون واحد
لقد جربت الكود الذي أرسلته ولكن يطبع كل العناصر بألوان مختلفة مع العلم أني تتبعت الكود يدويا وجده يعمل جيد المشكل هو في وضع عناصر الجدول color في BH
السلام عليكم
عدلت الكود كما يجب في معالجة العناوين فبدلا من :
mov si,color
يجب أن تكون:
lea si,color
اقتباسلماذا PUSH و POP ?
هي فقط لتخزين المسجلax في المكدس بالقيم السابقة لاني ساقوم باستخدامه في نقل المتغير "d" اليه،
ثم جمعه مع si وبعد الانتهاء اقوم باسترجاع القيم السابقة ب pop.
لم أفهم ما تريده بالضبط لكن جرب هذا بعد التعديل السابق :
السلام عليم
جزاك الله خيرا أخي AND على المساعدة سأجرب الكود وأخبرك بالناتج
أما بخصوص البرنامج الذي أريد برمجته هو عبارة على Menu أتحكم فيه بالأسهم نزولا وصعودا ولكني لم أستخدم الأسهم إكتفيت فقط بإستخدام الحرف a للتحكم فيه لأتكد من صحته.
دعني أشرح لك الكود
start1:
cmp d,2
jne go
mov cl,4
mov d,cl
jmp go1
go:
cmp d,4
jne go1
mov cl,2
mov d,cl
go1:
هذا الجزء خاص باللون أي إعطاء عناصر Menu لون واحد مع إختلاف واحد فقط ليظهر لي أي عنصر من Menu حددت.
حيث قمت بحجز متغير سميته d أضع فيه قيمة s عند الضغط على حرف a
فلو كانت قيمة s واحد يعني أني أشير إلى العنصر الأول في Menu أي أعطيه لون مغاير على بقية العناصر أنظر إلى Color ستجدني وضعت فيه قيم وهي خاصة بلون الخلفية وبلون النص لعناصر Menu
color dw 1EH,53H,53H,53H
فلو قفزنا إلى start1 -الكود فوق- سيقارن d بـ 2 أي هل s (المؤشر cursor ) في أي موقع -(العنصر الأول أو الثاني أو الثالث أو الرابع)أي سيكون لون العنصر المحدد من Menu يختلف على بقية العناصر .أنظر إلى الجدول color ستلاحظ أن القيمة الأول فقط مختلفة في اللون أما بقية العناصر لها نفس اللون.
أفرض أن s بها القيمة 1 وهذا بعد الضغط على a للمرة الأولى سيقفز إلى start1 ويقارن d والتي وضعت فيها s بـ 2(ستسأل هنا لماذا المقارنة بـ2 وذلك إذا كانت في d إثنان(2 ) يعني يجب علي أن أضع 4 في d لأبدأ تلوين Menu من اللون الرابع وهو 53h ثم العنصر الأول وهو 1eH وهنا أعطينا العنصر الثاني من Menu لون مخالف ثم إعطاء القيمة الثانية من الجدول color للعنصر الثالث وهي اللون 53h والقيمة الثالثة للعنصر الرابع والأخير من Menu وهي 53h)-
إذا كانت نتيجة المقارنة 1 أي لا تساوي 2 أو 4 سيقفز إلى print_menu:
ويقوم بطباعته هكذا
item1 اللون 1eH
item1 اللون 53h
item1 اللون 53h
item1 اللون 53h
ثم ينظر من المستعمل الضغط على الحرف a
هنا سنظع في d قيمة s أي أني الآن فوق العنصر الثاني ولقد شرحت ماذا سيحدث لو كانت قيمة d تساوي 2 سيبدأ بإعطاء الألوان من القيمة الرابعة للجدول color وهي 53h سيظهر Menu هكذا
item1 اللون 53h (القيمة الرابعة من جدول الألوان color
item1 اللون 1eH القيمة 1
item1 اللون 53h القيمة 2
item1 اللون 53h القيمة 3
هل لاحظت أن اللون قد تغير في العنصر الثاني أي أني هبطت درجة في Menu وهكذا عند الضغط على a
تتبع وستجده أنه يعمل بشكل جيد ولكن المشكل هو في الألوان وما رأيك في هذا الكود وإن كانت هناك طريقة أخرى في برمجة Menu فأمتعني بها أو هنا إختصار في الكود فأنا منتظر رأيكم
السلام عليكم
انظر الى هذا الكود هل يفي بالمطلوب؟؟
جرب البرنامج بالمرفقات .
.model small .stack 200h .data msg db 'item1$' c1 db 1EH,53H,53H,53H c2 db 53H,1EH,53H,53H c3 db 53H,53H,1EH,53H c4 db 53H,53H,53H,1EH z db 0 l db 13 h db 0 .code MOV AX,@DATA MOV DS,AX start: mov l,13 cmp z,0 jne _11 lea si,c1 jmp print_screen _11: cmp z,1 jne _12 lea si,c2 jmp print_screen _12: cmp z,2 jne _13 lea si,c3 jmp print_screen _13: lea si,c4 print_screen: mov ah,6 mov al,1 mov bh,byte ptr [si] inc l mov ch,l mov cl,14 mov dh,l mov dl,7 int 10h mov ah,2 mov bh,0 mov dh,l mov dl,7 int 10h lea dx,msg mov ah,9 int 21h cmp h,3 je wait_Input inc si inc h jmp print_screen wait_Input: mov ah,1 int 21h cmp al,61h jne exit cmp z,3 jne _14 mov z,0 mov h,0 jmp start _14: mov h,0 inc z jmp start exit: mov ah,4ch int 21h end
جزاك الله خيرا أخي AND لقد جربت البرنامج وهو يعمل بشكل جيد سأحاول فهم الكود
ولكن لماذا أعدت التصريح بجدول color أربع مرات ؟
هل من الممكن أن تعطيني درس على كيفية الوصول وطباعة عناصر الجدول