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

[ تمت الإجابة ]سؤال يتعلق بقلب مصفوفة

بدأه ماريا اسلام في 22 ديسمبر 2008 · 9 رد · 1,626 مشاهدة · في أرشيف قسم الـــ Assembly
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

لو سمحتم أريد كود برنامج لقلب مصفوفة بلغة التجميع  .. أنا مستعجلة ممكن يكون الرد بسرعة !

ربي هذا العهد لك ... عزم القلب الوفا

#2
  1. INCLUDE Irvine32.inc
  2. .data
  3. msg byte "Enter the string",0
  4. msg1 byte "the reversed string",0
  5. arr byte "assemply",0
  6. arr1 byte ?
  7. arrsize= ($-arr)-2
  8. .code
  9. main PROC
  10.  
  11. mov edx,offset msg
  12. call writestring
  13. call crlf
  14. call readstring
  15.  
  16. mov esi ,0
  17. mov ecx ,arrsize
  18. l:
  19. movzx eax,arr[esi]
  20. push eax
  21. inc esi
  22. loop l
  23.  
  24. mov ecx ,arrsize
  25. mov esi ,0
  26. l1:
  27. pop eax
  28. mov arr1[esi],al
  29. inc esi
  30. loop l1
  31.  
  32. mov edx,offset arr1
  33. call writestring
  34. call crlf
  35. main ENDP
  36.  
  37. END main
  38.  

#3

توقعت أن تكون البيئة 16 بت

يمكن تحويله ليعمل مع 32بت بسهولة

 

		[color= #ff007f;]jmp		real_s

 

	[color= #007f00; font-style: italic;]; data

	arr       [color= #7f00ff;]db	[color= #ff0000;]1h[color= #0000ff;],[color= #ff0000;]2h[color= #0000ff;],[color= #ff0000;]3h[color= #0000ff;],[color= #ff0000;]4h[color= #0000ff;],[color= #ff0000;]5h[color= #0000ff;],[color= #7f7f7f;]0       [color= #007f00; font-style: italic;]; any length

 

real_s[color= #0000ff;]:

	[color= #007f00; font-style: italic;]; now let the fun begin

		[color= #ff007f;]lea		[color= #7f7f40;]si[color= #0000ff;],arr

		[color= #ff007f;]xor		[color= #7f7f40;]cx[color= #0000ff;],[color= #7f7f40;]cx

	@@[color= #0000ff;]:

		[color= #ff007f;]mov		[color= #7f7f40;]bl[color= #0000ff;],[color= #0000a0; font-weight: bold;][[color= #7f7f40;]si[color= #0000ff;]+[color= #7f7f40;]cx[color= #0000a0; font-weight: bold;]]

		[color= #ff007f;]add		[color= #7f7f40;]cx[color= #0000ff;],[color= #7f7f7f;]1

		[color= #ff007f;]test	        [color= #7f7f40;]bl[color= #0000ff;],[color= #7f7f40;]bl

		[color= #ff007f;]jne		[color= #aa007f;]@B

		[color= #ff007f;]lea		[color= #7f7f40;]si[color= #0000ff;],arr

		[color= #ff007f;]lea		[color= #7f7f40;]di[color= #0000ff;],arr

		[color= #ff007f;]sub		[color= #7f7f40;]cx[color= #0000ff;],[color= #7f7f7f;]1

		[color= #ff007f;]lea		[color= #7f7f40;]di[color= #0000ff;],[color= #0000a0; font-weight: bold;][[color= #7f7f40;]di[color= #0000ff;]+cx[color= #7f7f7f;]-1[color= #0000a0; font-weight: bold;]]

		[color= #ff007f;]shr		[color= #7f7f40;]cx[color= #0000ff;],[color= #7f7f7f;]1

		[color= #ff007f;]neg		[color= #7f7f40;]cx

		[color= #ff007f;]sub		[color= #7f7f40;]si[color= #0000ff;],[color= #7f7f40;]cx

	@@[color= #0000ff;]:

		[color= #ff007f;]mov		[color= #7f7f40;]al[color= #0000ff;],[color= #0000a0; font-weight: bold;][[color= #7f7f40;]si[color= #0000ff;]+[color= #7f7f40;]cx[color= #0000a0; font-weight: bold;]]

		[color= #ff007f;]mov		[color= #7f7f40;]bl[color= #0000ff;],[color= #0000a0; font-weight: bold;][[color= #7f7f40;]di[color= #0000a0; font-weight: bold;]]

		[color= #ff007f;]mov		[color= #0000a0; font-weight: bold;][[color= #7f7f40;]si[color= #0000ff;]+[color= #7f7f40;]cx[color= #0000a0; font-weight: bold;]][color= #0000ff;],[color= #7f7f40;]bl

		[color= #ff007f;]mov		[color= #0000a0; font-weight: bold;][[color= #7f7f40;]di[color= #0000a0; font-weight: bold;]][color= #0000ff;],[color= #7f7f40;]al

		[color= #ff007f;]sub		[color= #7f7f40;]di[color= #0000ff;],[color= #7f7f7f;]1

		[color= #ff007f;]add		[color= #7f7f40;]cx[color= #0000ff;],[color= #7f7f7f;]1

		[color= #ff007f;]jne		[color= #aa007f;]@B

 

        [color= #007f00; font-style: italic;]; at this point, the array has been swapped.

        [color= #ff007f;]mov     [color= #7f7f40;]ax[color= #0000ff;], [color= #ff0000;]4c00h

        [color= #ff007f;]int     [color= #ff0000;]21h

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#4

مبدع كالعاده Xacker

#5

بشكركم على الرد بسرعة .. بس طلع معاي أخطاء تقريباً سبعة أخطاء 

للإيضاح أنا أعمل على برنامج turbo assembler 4.1

بالنسبة لبرنامج xacker كان قريب نوعاً ما

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

أتمنى تردوا بسرعة 

معايا محاضرة غداً الأربعاء الساعة العاشرة 

ربي هذا العهد لك ... عزم القلب الوفا

#6

السلام عليكم ورحمة الله وبركاته

للعلم الشفرة التي وضعتها في الأعلى ليست برنامج كامل تقوم بنسخه ولصقه في assembler للحصول على برنامج تنفيذي وإنما هو الجزء الذي يقوم بالعملية المطلوبة.

قمت بتحويله ليتناسب مع TASM (استخدمت TASM 1.x في التجميع و debug في اختبار نجاح التنفيذ)

* يرجى الانتباه إلى تغير استخدام المسجلات داخل الشفرة الجديدة حيث تم استخدام BX كـ Base Register وتعديل المستخدمة في حمل البايتات.

 

[color= #007f00; font-style: italic;]; flip an array algorithm

 

_stack [color= #7f00ff;]segment [color= #aa007f;]para [color= #7f00ff;]stack [color= #0000a0;]'stack'

	[color= #7f00ff;]dw	[color= #7f7f7f;]32 [color= #7f00ff;]dup [color= #0000a0; font-weight: bold;](?[color= #0000a0; font-weight: bold;])

_stack [color= #7f00ff;]ends

 

_dataseg [color= #7f00ff;]segment [color= #aa007f;]para [color= #0000a0;]'data'

 

_dataseg [color= #7f00ff;]ends

 

	[color= #7f00ff;]assume	[color= #7f7f40;]ss[color= #0000ff;]:_stack[color= #0000ff;],[color= #7f7f40;]ds[color= #0000ff;]:_dataseg[color= #0000ff;],[color= #7f7f40;]cs[color= #0000ff;]:_codeseg

 

_codeseg [color= #7f00ff;]segment [color= #aa007f;]para [color= #0000a0;]'code'

 

main	[color= #7f00ff;]proc	[color= #aa007f;]far

 

		[color= #ff007f;]jmp		real_s

 

	[color= #007f00; font-style: italic;]; data

	arr       [color= #7f00ff;]db	[color= #ff0000;]1h[color= #0000ff;],[color= #ff0000;]2h[color= #0000ff;],[color= #ff0000;]3h[color= #0000ff;],[color= #ff0000;]4h[color= #0000ff;],[color= #ff0000;]5h[color= #0000ff;],[color= #7f7f7f;]0       [color= #007f00; font-style: italic;]; any length

 

real_s[color= #0000ff;]:

	[color= #007f00; font-style: italic;]; now let the fun begin

		[color= #ff007f;]mov		[color= #7f7f40;]ax[color= #0000ff;],_dataseg

		[color= #ff007f;]mov		[color= #7f7f40;]ds[color= #0000ff;],[color= #7f7f40;]ax

 

		[color= #ff007f;]mov		[color= #7f7f40;]si[color= #0000ff;],[color= #7f00ff;]offset arr

		[color= #ff007f;]xor		[color= #7f7f40;]bx[color= #0000ff;],[color= #7f7f40;]bx

	@[color= #7f7f7f;]1[color= #0000ff;]:

		[color= #ff007f;]mov		[color= #7f7f40;]dl[color= #0000ff;],[color= #0000a0; font-weight: bold;][[color= #7f7f40;]si[color= #0000ff;]+[color= #7f7f40;]bx[color= #0000a0; font-weight: bold;]]

		[color= #ff007f;]add		[color= #7f7f40;]bx[color= #0000ff;],[color= #7f7f7f;]1

		[color= #ff007f;]test	        [color= #7f7f40;]dl[color= #0000ff;],[color= #7f7f40;]dl

		[color= #ff007f;]jne		@[color= #7f7f7f;]1

		[color= #ff007f;]mov		[color= #7f7f40;]si[color= #0000ff;],[color= #7f00ff;]offset arr

		[color= #ff007f;]mov		[color= #7f7f40;]di[color= #0000ff;],[color= #7f00ff;]offset arr

		[color= #ff007f;]sub		[color= #7f7f40;]bx[color= #0000ff;],[color= #7f7f7f;]1

		[color= #ff007f;]lea		[color= #7f7f40;]di[color= #0000ff;],[color= #0000a0; font-weight: bold;][[color= #7f7f40;]di[color= #0000ff;]+bx[color= #7f7f7f;]-1[color= #0000a0; font-weight: bold;]]

		[color= #ff007f;]shr		[color= #7f7f40;]bx[color= #0000ff;],[color= #7f7f7f;]1

		[color= #ff007f;]neg		[color= #7f7f40;]bx

		[color= #ff007f;]sub		[color= #7f7f40;]si[color= #0000ff;],[color= #7f7f40;]bx

	@[color= #7f7f7f;]2[color= #0000ff;]:

		[color= #ff007f;]mov		[color= #7f7f40;]al[color= #0000ff;],[color= #0000a0; font-weight: bold;][[color= #7f7f40;]si[color= #0000ff;]+[color= #7f7f40;]bx[color= #0000a0; font-weight: bold;]]

		[color= #ff007f;]mov		[color= #7f7f40;]dl[color= #0000ff;],[color= #0000a0; font-weight: bold;][[color= #7f7f40;]di[color= #0000a0; font-weight: bold;]]

		[color= #ff007f;]mov		[color= #0000a0; font-weight: bold;][[color= #7f7f40;]si[color= #0000ff;]+[color= #7f7f40;]bx[color= #0000a0; font-weight: bold;]][color= #0000ff;],[color= #7f7f40;]dl

		[color= #ff007f;]mov		[color= #0000a0; font-weight: bold;][[color= #7f7f40;]di[color= #0000a0; font-weight: bold;]][color= #0000ff;],[color= #7f7f40;]al

		[color= #ff007f;]sub		[color= #7f7f40;]di[color= #0000ff;],[color= #7f7f7f;]1

		[color= #ff007f;]add		[color= #7f7f40;]bx[color= #0000ff;],[color= #7f7f7f;]1

		[color= #ff007f;]jne		@[color= #7f7f7f;]2

 

        [color= #007f00; font-style: italic;]; at this point, the array has been swapped.

        [color= #ff007f;]mov     [color= #7f7f40;]ax[color= #0000ff;], [color= #ff0000;]4c00h

        [color= #ff007f;]int     [color= #ff0000;]21h

 

main	[color= #7f00ff;]endp

 

_codeseg [color= #7f00ff;]ends

[color= #7f00ff;]end

تم تعديل هذه المشاركة بواسطة Xacker في 23 ديسمبر 2008 في 21:23 — السبب: إضافة ملاحظة*

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#7
	MODEL	TINY
	.CODE

		jmp	BEGIN

array_start	db	1,3,5,9,0,2
array_end:

BEGIN:
		push	cs
		pop	ds

		lea	si, array_start
		lea	di, array_end - 1

		mov	cx, (array_end - array_start + 1)/2
xchg_next:
		mov	al, [di]
		xchg	al, [si]
		mov	[di], al
		inc	si
		dec	di
		loop	xchg_next

	; Exit
		mov	ax,4C00h
		int	21h

END		BEGIN

هذا الكود لا يشترط أن تنتهى المصفوفة ب (0) - كما يعمل أيضاً بشكل صحيح إذا احتوت بيانات المصفوفة على (0)

للحصول على الملف التنفيذى exe انسخ الكود السابق فى ملف جديد بأسم file.asm ثم نفذ:

	tasm.exe file.asm
	tlink.exe file.obj
#8

أولاً بحب أشكر الجميع على تفاعلهم معي .. 

بالنسبة لبرنامج xacker كان يطلع خطأ وهو :

unmatched ends :dataseg

وعند التنفيذ يتجمد تماماً واضطر للخروج ..

أما بالنسبة لبرنامجa3ghadeer فكان على ما يرام ف..

وأنا أكرر شكري مرة أخرى للجميع وخاصة XACKER و rewsh لتجاوبهم معي بسرعة .. 

 

ربي هذا العهد لك ... عزم القلب الوفا

#9
ماريا اسلام كتب:

أولاً بحب أشكر الجميع على تفاعلهم معي ..

بالنسبة لبرنامج xacker كان يطلع خطأ وهو :

unmatched ends :dataseg

وعند التنفيذ يتجمد تماماً واضطر للخروج ..

ربما لاختلاف الإصدار فقد اختبرته لدي على TASM 1.x كما ذكرت، بكل الأحوال بالتوفيق وإن شاء الله يكون في الموضوع فائدة وليس مجرد "نسخ" :wink:

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#10

استبدل السطر

mov	cx, (array_end - array_start + 1)/2

بالسطر

mov	cx, (array_end - array_start)/2

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…