الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

[ تمت الإجابة ]كيف الوصول إلى قيم الجدول؟

بدأه hatem في 16 يوليو 2009 · 13 رد · 1,348 مشاهدة · في أرشيف قسم الـــ Assembly
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

عندي جدول به قيم وأريد وضعها في المسجل bh كيف أقوم بذلك

array db 53h,53h,53h,62h

------------

mov cx,4

go:

mov bh,array[cx]

loop go

مع العلم أني أستخدم Tasm

#2
mov bh, byte ptr [array + ecx]

mov eax, dword ptr ds:[0xffdf0308]

jmp dword ptr [eax+0xfc]

#3

GM

معلش ,, سؤال

هو مش المفروض يقلل قيمة ecx علشان يتنقل على القيم !!

dec ecx

إن قلت قال الله قال رسولـه همزوك همز المنكر المتعالي
أو قلت قد قال الصحابة والألـى تبعاً لهم بالقول والأعمال
أو قلت قـال الشافعي وأحمد و أبو حنيفة والإمام الغالي
صدوا عن وحي الإله ودينـه واحتالوا على حرام الله بالإحلال
يا أمةً لعبت بدين نبيها كتلاعب الصبيان في الأوحال
حاشا رسول الله يحكم بالهوى تلك إذاً حكومة الضلال

feed.1.gif

#4

loop تفعل ذلك ...

تم تعديل هذه المشاركة بواسطة GamingMasteR في 16 يوليو 2009 في 14:37

mov eax, dword ptr ds:[0xffdf0308]

jmp dword ptr [eax+0xfc]

#5
GamingMasteR كتب:
loop تفعل ذلك ...

اقولك على سر

والله قرأت loop على انها jmp مع ان مفيش تشابه بين الكلمتين :blink: :blink:

سلامتك يا عيونى :wacko: :wacko:

إن قلت قال الله قال رسولـه همزوك همز المنكر المتعالي
أو قلت قد قال الصحابة والألـى تبعاً لهم بالقول والأعمال
أو قلت قـال الشافعي وأحمد و أبو حنيفة والإمام الغالي
صدوا عن وحي الإله ودينـه واحتالوا على حرام الله بالإحلال
يا أمةً لعبت بدين نبيها كتلاعب الصبيان في الأوحال
حاشا رسول الله يحكم بالهوى تلك إذاً حكومة الضلال

feed.1.gif

#6

mov cx,4 المفروض تكون mov cx,3

mov eax, dword ptr ds:[0xffdf0308]

jmp dword ptr [eax+0xfc]

#7

جزاكم الله خيرا ولكن لم أستطع تطبيقه على هذا الكود

وهو عبارة على 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

#8

السلام عليكم

لقد أعدت كتابه لينفذ على 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
#9

هذه بهذا الشكل لا تعمل :

mov bh, byte ptr [color+d]

تم التحايل عليها بالشكل التالي :

  1. .model small
  2. .stack 200h
  3. .data
  4. msg db 'item1$'
  5. color dw 1EH,53H,53H,53H
  6.  
  7. L db 13;position of the first line where we print the menu
  8. c db 0;to print the 4 items
  9. s db 1;position of cursor
  10. d db 0;Index for color array
  11.  
  12. .code
  13. MOV AX,@DATA
  14. MOV DS,AX
  15.  
  16. start1:
  17. cmp d,2
  18. jne go
  19. mov cl,4
  20. mov d,cl
  21. jmp go1
  22. go:
  23. cmp d,4
  24. jne go1
  25. mov cl,2
  26. mov d,cl
  27. go1:
  28.  
  29. print_menu:
  30. mov ch,c
  31. inc ch
  32. mov c,ch
  33. mov ah,06h
  34. mov al,01h
  35. ;
  36. push ax
  37. xor ax,ax
  38. mov ah,d
  39. mov si,color
  40. add si,ax
  41. mov bh, byte ptr [si]; dالمؤشر لعناصر الجدول هو المتغير BH في color المشكلة هنا هو كيف و
    ضع عناصر الجدول
  42. pop ax
  43. ;
  44. mov ch,l ; upper line
  45. inc ch
  46. mov l,ch
  47. mov cl,14 ; right line
  48. mov dh,l ; down line
  49. mov dl,7 ; left line
  50. int 10h
  51.  
  52. mov bh,0
  53. mov dh,l
  54. mov dl,7
  55. mov ah,02
  56. int 10h
  57. lea dx,msg
  58. mov ah,9
  59. int 21h
  60. cmp d,4
  61. jne here
  62. mov cl,1
  63. mov d,cl
  64. jmp go2
  65. here:
  66. inc d
  67. go2:
  68. cmp c,4
  69. jne print_menu
  70.  
  71. down:
  72. mov cl,0
  73. mov c,cl
  74.  
  75. mov cl,13
  76. mov l,cl
  77.  
  78. mov ah,01h
  79. int 21h
  80. cmp AL,61h
  81. JNE UP1
  82. CMP s,4
  83. JE ELSE2
  84. MOV BH,s
  85. add bh,1
  86. mov s,bh
  87. mov cl,s
  88. mov d,cl
  89.  
  90. jmp start1
  91. ELSE2:
  92.  
  93. MOV BH,1
  94. mov s,bh
  95. mov cl,s
  96. mov d,cl
  97.  
  98. jmp start1
  99.  
  100. UP1:
  101.  
  102. MOV Ah,4CH
  103. INT 21h
  104. END
  105.  

#10

بارك الله فيك أخي AND على المساعدة أظن أن المشكلة لم تحل

لماذا PUSH و POP ?

ما أردته هو إعطاء عناصر Menu لون واحد إلا واحد وعند الضغط على حرف a سيطبع عناصر الجدول بلون واحد ولبعنصر الثاني بلون مغاير وهكذا الثالث والبقية بلون واحد

لقد جربت الكود الذي أرسلته ولكن يطبع كل العناصر بألوان مختلفة مع العلم أني تتبعت الكود يدويا وجده يعمل جيد المشكل هو في وضع عناصر الجدول color في BH

#11

السلام عليكم

عدلت الكود كما يجب في معالجة العناوين فبدلا من :

mov	si,color

يجب أن تكون:

lea	si,color

اقتباس
لماذا PUSH و POP ?

هي فقط لتخزين المسجلax في المكدس بالقيم السابقة لاني ساقوم باستخدامه في نقل المتغير "d" اليه،

ثم جمعه مع si وبعد الانتهاء اقوم باسترجاع القيم السابقة ب pop.

لم أفهم ما تريده بالضبط لكن جرب هذا بعد التعديل السابق :

  1. .model small
  2. .stack 200h
  3. .data
  4. msg db 'item1$'
  5. color dw 1EH,53H,53H,53H
  6.  
  7. L db 13;position of the first line where we print the menu
  8. c db 0;to print the 4 items
  9. s db 1;position of cursor
  10. d db 0;Index for color array
  11.  
  12. .code
  13. MOV AX,@DATA
  14. MOV DS,AX
  15.  
  16. start1:
  17. cmp d,2
  18. jne go
  19. mov cl,4
  20. mov d,cl
  21. jmp go1
  22. go:
  23. cmp d,4
  24. jne go1
  25. mov cl,2
  26. mov d,cl
  27. go1:
  28.  
  29. print_menu:
  30. mov ch,c
  31. inc ch
  32. mov c,ch
  33. mov ah,06h
  34. mov al,01h
  35. push ax
  36. xor ax,ax
  37. mov ah,d
  38. lea si,color
  39. add si,ax
  40. mov bh, byte ptr [si]; dالمؤشر لعناصر الجدول هو المتغير BH في color المشكلة هنا هو كيف و
    ضع عناصر الجدول
  41. pop ax
  42. mov ch,l ; upper line
  43. inc ch
  44. mov l,ch
  45. mov cl,14 ; right line
  46. mov dh,l ; down line
  47. mov dl,7 ; left line
  48. int 10h
  49.  
  50. mov bh,0
  51. mov dh,l
  52. mov dl,7
  53. mov ah,02
  54. int 10h
  55. lea dx,msg
  56. mov ah,9
  57. int 21h
  58. cmp d,4
  59. jne here
  60. mov cl,1
  61. mov d,cl
  62. jmp go2
  63. here:
  64. inc d
  65. go2:
  66. cmp c,4
  67. jne print_menu
  68.  
  69. down:
  70. mov cl,0
  71. mov c,cl
  72.  
  73. mov cl,13
  74. mov l,cl
  75.  
  76. mov ah,01h
  77. int 21h
  78. cmp AL,61h
  79. JNE UP1
  80. CMP s,4
  81. JE ELSE2
  82. MOV BH,s
  83. add bh,1
  84. mov s,bh
  85. mov cl,s
  86. mov d,cl
  87.  
  88. jmp start1
  89. ELSE2:
  90.  
  91. MOV BH,1
  92. mov s,bh
  93. mov cl,s
  94. mov d,cl
  95.  
  96. jmp start1
  97.  
  98. UP1:
  99.  
  100. MOV Ah,4CH
  101. INT 21h
  102. END
  103.  

#12

السلام عليم

جزاك الله خيرا أخي 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 فأمتعني بها أو هنا إختصار في الكود فأنا منتظر رأيكم

#13

السلام عليكم

انظر الى هذا الكود هل يفي بالمطلوب؟؟

جرب البرنامج بالمرفقات .

.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

MENU.zip

#14

جزاك الله خيرا أخي AND لقد جربت البرنامج وهو يعمل بشكل جيد سأحاول فهم الكود

ولكن لماذا أعدت التصريح بجدول color أربع مرات ؟

هل من الممكن أن تعطيني درس على كيفية الوصول وطباعة عناصر الجدول

مواضيع مشابهة