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

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

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

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

كيف يمكن تصفير السجل ؟ أو إعادته إلى وضعه الطبيعي :unsure:

عند تنفيذ هذا البرنامج فإنه يعمل بشكل صحيح لكن مشكلته في إستخدام الكودين التاليين

فإنه يقوم بعرض الرسالة الأولى بدل تنفيذ العملية .

:)


; CARRIGE RETURN

MOV DL,0DH
INT 21H

; LINE FEED
MOV DL,0AH
INT 21H

وهذا هو نص البرنامج بالكامل

وشكراً

.MODEL SMALL
.STACK 100H
.DATA

        CR EQU 0DH
        LF EQU 0AH


        MSG1 DB ' * Message 1 * BESME ELLAH ALRAHAMAN ALRAHEM * ',CR,LF,'$'
        MSG2 DB ' * Message 2 * HATHA MEN FADELE RAPI * ',CR,LF,'$'
        MSG3 DB ' * Message 3 * WELCOME * ',CR,LF,'$'
        MSG4 DB ' * Message 4 * This is my first Program ',CR,LF,'$'
        MSG5 DB ' * Message 5 * ALHAMDO LELAHE RAB AL ALAMEN * ',CR,LF,'$'


.CODE
				; initialize DS
		MOV AX,@DATA
		MOV DS,AX

				;display opening message
                LEA DX,MSG1
		MOV AH,09H
		INT 21H
				;display opening message
                LEA DX,MSG2
                MOV AH,09H
                INT 21H

				;display opening message
                LEA DX,MSG3
		MOV AH,09H
		INT 21H
				;display opening message
                LEA DX,MSG4
                MOV AH,09H
                INT 21H

                                ; initialize DS
                MOV AX,@DATA
                MOV DS,AX

				;display opening message
                LEA DX,MSG5
                MOV AH,09H
                INT 21H


                                ; CARRIGE RETURNE
                MOV DL,0DH
                INT 21H

                                ; LINE FEED
                MOV DL,0AH
                INT 21H


MOV DL, 'A'
MOV AH, 2H
INT 21H
				;display opening message
                LEA DX,MSG5
                MOV AH,09H
                INT 21H

MOV DL, 'B'
MOV AH, 2H
INT 21H

MOV AX, 4C00H
INT 21H

END

:bye:

:ty:

تم تعديل هذه المشاركة بواسطة سعد2 في 7 يونيو 2011 في 10:31

#2

السجل يصفر عادة بـ

xor reg, reg

أو يتم قيمة 0 فيه.

أما إعادته لوضعه الطبيعي، فهذا يتم من خلال استخدام push reg قبل التعديل عليه و pop reg بعد تنفيذ التعديلات والانتهاء منها، لإعادة قيمته إلى ما كانت عليه قبل التعديل.

مشكلتك يا عزيزي أنك تحاول طباعة CRLF (الانتقال إلى سطر جديد ومن بداية السطر) لكنك أخطأت في إسناد قيمة 0Dh إلى DL

التفسير:

المقاطعة 21h مع الخدمة 09h في AH تستخدم لطباعة سلسلة من البايتات يتم عنونتها في DX حصراً وبشرط أن تكون هذه السلسلة منتهية بـ "$" أو "0" عادة.

تماماً كما فعلت مع طباعة جميع الرسائل في البرنامج.

لطباعة CRLF قم بتعريفها بالشكل

CRLF  db   0Dh,0Ah,'$'

ومن ثم استخدمها بالشكل:

lea DX, CRLF
mov ah,09h
int 21h
2

Do as I say, not as I do

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

#3

جزاك الله خير الجزاء أخي Xacker :thumb_up:

كانت إجابتك واضحه وأفادتني كثيراً B)

تقبل الله منك عملك الصالح هذا بقبول حسن وجعله في موازين حسناتك :clapping:

:calc:

وشكراً

:ty:

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

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

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

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

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