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

مساعدة في كود برنامج للطباعة

مغلق
بدأه npare في 18 يناير 2008 · 4 رد · 1,957 مشاهدة · في أرشيف قسم الـــ Assembly
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

انا اريد ان اكتب برنامج يطبع 80 نجمه على الشاشة ابتداء من السطر 25 وبعد ذلك يتم اختفاء النجمات واحدة تلو الاخرة من الجهة اليسرى كل ثانية حتى يتم اختفاء كل النجمات وخلال الاختفاء لا يمنع هذا من برامج اخرى العمل

هذا ما توصلت له بحيث اني اطبع النجمات ولكن عند محاولت المسح ذلك لا يعمل لا اعرف ما اعمل فارجو المساعدة

البرنامج

والشكر سلف لكل من يحاول المساعدة

P286N
 IDEAL
 DOSSEG
 MODEL SMALL
 STACK 100H
 DATASEG                              
   M DB "*","$"
   B DB " ","$"
   N DW ?
 CODESEG

 PROC HSCROLL




       PUSH 0B000H

       POP ES
       MOV CX,500*80-1
       MOV SI,(25*80-2)*2
       MOV DI,(25*80-1)*2
SHIFT_LINE:
       MOV AX,[ES:SI]
       MOV [ES:DI],AX
       SUB SI,2
       SUB DI,2
       LOOP SHIFT_LINE

       MOV CX,50
       MOV SI,0
BLACK:
       MOV [WORD ES:SI],0700H
       ADD SI,80*2
       LOOP BLACK
       ret
                ENDP HSCROLL




START:


       MOV AX,@DATA
       MOV DS,AX


       MOV CX,80


L1:    MOV AH,9
       MOV DX,OFFSET M
       INT 21H

          CALL  HSCROLL 

         DELAY: PUSH AX
                PUSH  BX
                PUSH CX
                PUSH DX
                MOV CX,800
         DELAY0: PUSH CX
                 MOV CX,0FFFFH
         DELAY1: LOOP DELAY1
                 POP CX
                 LOOP DELAY0
                 POP DX
                 POP CX
                 POP BX
                 POP AX



       LOOP L1

       mov N,0

l2:   

         ADD N,1






        CMP N,80
        JL L2





EXIT:
       MOV AH,4CH
       MOV AL,0
       INT 21H

END START
#2

كفكرة يمكنك عمل مسح للشاشة كل ثانية ثم طباعة عدد النجوم -1

mov eax, dword ptr ds:[0xffdf0308]

jmp dword ptr [eax+0xfc]

#3

بارك الله فيك اخي

انا اريد المساعدة في في امرين الاول وهو طباعة عدد النجوم وهي تختفي انا الان اكثر من ثلاثة ايام اعمل على ذلك لم انجزة لكن ساتغلب على الامر باذن الله وسانجزة

الامر الثاني وهو الاصعب وليست لدى ادن فكرة عنة وهو اثناء اختفاء النجمات (اذا كانت 60 = دقيقة )استطيع تشغيل برامج اخره

مثال

عند تشغيل البرنامج

C:\asm>test

هنا يستمر اختفاء النجوم

c:\asm>run x program

#4

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

الحلول البسيطة التي استطيع التفكير فيها هي التالية,

المشكلة الاولى:

يمكنك اعتماد نفس الاجرائية التي تقوم بتشكيل النجمة لتقوم بكتابة فراغات بنفس الأمكنة الخاصة بالنجوم المستخدمه على ان يتم اعادة تشكيل العنوان الاساسي للبداية ومن ثم استدعاء نفس الاجرائية.

المشكلة الثانية:

هذا يتطلب ان يكون البرنامج TSR, Terminate & Stay Resident

هذا يتم عبر مقاطعات (قديمة) مثل 27h

http://www.ctyme.com/intr/rb-4120.htm

او افضل منها (محسّنة) مثل 21h والخدمة 31h منها:

http://www.ctyme.com/intr/rb-2723.htm

عبر Google Groups تستطيع ايجاد مثال حي يستخدم المقاطعة 27h

اقتباس
There is one program that I know of that uses the INT 27H

and actually works (although it defines another interrupt for some

reason I can't figure out). Have you looked at SPEEDUP.COM? I think

it was originally published in PC Magazine in either issue 3 or 4.

I received another letter from someone else that had gotten

INT 27H to work for a screen printer (that spooled to the printer), but

he's had trouble with disk time-outs, but I suspect that was due

to the clock interrupt being foobared.

The code for SPEEDUP.COM is thus:

						MOV	 DX,12H
						MOV	 AX,251E
						INT	 21H		;CREATE INT 1E AT DS:12H
						MOV	 DI,DX		 ;DI = 12H
						MOV	 SI,DLOCH	  ;MOVE DATA INTO THE
						MOV	 CX,0BH		; RESERVED PORTION OF
						REPZ				  ; THE PROGRAM SEGMENT
						MOVB				  ; PREFIX BLOCK.
						XOR	 AX,AX
						INT	 13H		;RESET DISK
						MOV	 DX,DI		 ;SET LOWMEM AT END
						INT	 27H		; OF THIS PROGRAM
				DLOC:   DB	  DF,02,25,02,08
						DB	  2A,FF,50,F6,00
  DB	  04

This is a nifty little program even aside from showing how to

use INT 27H. If you have DOS 1.0 this will speed up your disk access

time by almost 100%. All you have to do is run it

ما يقوم به البرنامج هو الابقاء على الجزء الخاص بتفريغ ذاكرة القرص بشكل مستمر وهذا ما يعمل على تحسين أدائه بشكل واضح, لكن لو راجعت المقاطعة 27h لوجدت انك لا تستطيع ان تقوم بالابقاء على اكثر من 64k من البرنامج في الذاكرة, هذه هي احدى المعوقات فيها لذلك تم ايجاد النسخة المحسّنة.

لو اردت امثلة فعلية على هذا الموضوع عليك بمراجعة بعض الفيروسات التي تستخدم هذه التقنية (غالبا COM بالتالي فعلا ما تريد, مقاطعات وما الى هذا)

http://www.google.com/search?num=20&hl...amp;btnG=Search

امممممم.. اتصور انك تستطيع ان تحاول تنفيذ هذا الآن ونحن بالخدمة عندما تحتاج للمساعدة ان شاء الله.

السلام عليكم

تم تعديل هذه المشاركة بواسطة Junkie في 19 يناير 2008 في 14:20

Do as I say, not as I do

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

#5

اضافة بسيطة, من الفيروسات التي اتبعت مبدأ TSR فيروس Jerusalem:

Read More

تستطيع ايجاد شفرات اصداراته هنا:

http://www.textfiles.com/virus/

انظر هذا أيضا, توضيح لعملية TSR:

http://www.textfiles.com/virus/rstut002.txt

تم تعديل هذه المشاركة بواسطة Junkie في 19 يناير 2008 في 19:43

Do as I say, not as I do

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

هذا الموضوع مغلق.

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