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

إختلاف عملية التشغيل الأولى عن غيرها

بدأه سعد2 في 26 يونيو 2011 · 6 رد · 1,054 مشاهدة · في أرشيف قسم الـــ Assembly
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

لماذا تكون الرسالة مبتعده قليلاً عن بداية السطر اكثر من غيرها في عملية التشغيل الأولى ؟

:resentful:

مرفق صورة لعملية التشغيل

وكذلك كود البرنامج في الأسفل

وشكراً

loopy.jpg

.Model	Small
.Stack	100h
.DATA

Mes db 0ah, 09h, 'Welcome to assembly $'

.Code

	MAIN	PROC

		MOV 	AX , @DATA
		MOV	DS , AX

		MOV 	AH , 09H	
                LEA     DX , Mes

		MOV	CX , 10		; قيمة عشرة CX نضع في المسجل

	Print_Loop:
		INT	21h		; DX اطبع الرسالة الموجوده في المسجل 
		DEC	CX		; CX اطرح واحد من مسجل الـ 
		JNZ	PRINT_LOOP	; PRINT_LOOP تساوي صفر فارجع مرة أخرى إلى CX إدا لم تصبح قيمة المسجل  

	; DOS_EXIT			; الخروج إلى الدوس
		MOV	AH , 4Ch
		INT	21h

	MAIN	ENDP

END	MAIN

تم تعديل هذه المشاركة بواسطة سعد2 في 26 يونيو 2011 في 11:32

#2

يبدو أنه يوجد glitch عندما تبدأ السلسلة النصيّة بـ 0ah,09h

ليس هذا فحسب، انظر الصورة

post-7008-041630200 1309091774_thumb.png

المرفقات
glitch.png

Do as I say, not as I do

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

#3

مرة يكون مسار الـ CWD الافتراضي يحوي فراغات والبرنامج يطلب عبر مساره الكامل، فيظهر tab مكرر في بداية السطر.

مرة يكون مسار الـ CWD الافتراضي لا يحوي فراغات والبرنامج يطلب عبر مساره الكامل، فيظهر التنفيذ كما تم كتابة البرنامج.

ومرة يكون مسار الـ CWD بدون فراغات ويتم تنفيذ البرنامج من داخل المجلد الموجود فيه، فيظهر كما في النافذة إلى اليسار :lol:

على كل حال، أعتقد أنك تحاول طباعة CRLF، لكنك أخطأت بكتابة 09h فهذه خاصة بالـ Tab والـ LF قيمتها 0dh.

قم بالتعديل وستجد بأن البرنامج سيظهر بشكل واحد مهما اختلفت المسارات والطرق، وأيضاً بدون glitching tabs :P

1

Do as I say, not as I do

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

#4

شكراً أخي Xacker على التوضيح

نعم لم أجرب 0dh مع أني أعرفها من قبل لكني ظننت أن إستعمال 0ah تكفي لأنها لوحدها تعني سطر جديد وبالتالي يمكن إستعمال 09h .

شكراً لك

:thumb_up:

#5

الـ CR أو Carriage Return LF أو Line Feed تقوم بنقل المؤشر سطر إلى الأسفل لكن مع المحافظة على العمود، لذلك تجد في النافذة إلى اليمين كيف تظهر العبارات بهذا الشكل، ذلك أن الطباعة تتم بسطر إلى الأسفل ومن ثم Tab ثم الجملة.

أما LF أو Line Feed CR أو Carriage Return فهي تعيد المؤشر إلى بداية السطر،

جرب تطبع الجملة 10 مرات بشرط أن يأتي قبلها 0ah (فقط من دون 09h أو 0dh) وشوف النتيجة، سترى بأنه لا يوجد سوى جملة واحدة تطبع!

كيف؟ ببساطة لأنه بعد الانتهاء من طباعة الجملة، الـ LF في بداية الجملة التالية تعيد المؤشر إلى بداية السطر ومن ثم تطبع الجملة مرة أخرى فيتم طباعتها فوق السابقة، وهكذا..

لذلك لا يظهر لك سوى جملة واحدة فقط.

بالتوفيق

Do as I say, not as I do

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

#6

لقد قمت بالتأكد من كلامك هذا فوجدته صحيحاً مائه بالمائه لكن يبدوا لي أنك عكست الكلام :hmm:

:hot:

لذا قمت بالتعديل على مشاركتك وغيرت لون ما تم تعديله إلى اللون الأحمر الغامق ، وشكراً جزيلاً

الـ LF أو Line Feed تقوم بنقل المؤشر سطر إلى الأسفل لكن مع المحافظة على العمود، لذلك تجد في النافذة إلى اليمين كيف تظهر العبارات بهذا الشكل، ذلك أن الطباعة تتم بسطر إلى الأسفل ومن ثم Tab ثم الجملة.

أما CR أو Carriage Return فهي تعيد المؤشر إلى بداية السطر،

جرب تطبع الجملة 10 مرات بشرط أن يأتي قبلها 0dh (فقط من دون 09h أو 0ah) وشوف النتيجة، سترى بأنه لا يوجد سوى جملة واحدة تطبع!

كيف؟ ببساطة لأنه بعد الانتهاء من طباعة الجملة، الـ CR في بداية الجملة التالية تعيد المؤشر إلى بداية السطر ومن ثم تطبع الجملة مرة أخرى فيتم طباعتها فوق السابقة، وهكذا..

لذلك لا يظهر لك سوى جملة واحدة فقط.

:ty:

تم تعديل هذه المشاركة بواسطة سعد2 في 27 يونيو 2011 في 09:00

1
#7

Ops

صحيح :)

شكراً للتنبّه لذلك.

Do as I say, not as I do

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

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

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

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

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

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