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

سؤال بسيط ولكن أعجزني عن الذاكرة

مغلق
بدأه وردة شرقية في 28 يناير 2005 · 10 رد · 1,672 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

إخوتي الكرام... أرجو منكم المساعدة ..وكذلك أرجو أن تتحملوني قليلاً... فأنا أعلم أن سؤالي سهل ولكنه بالفعل أعجزني فأنا مازلت مبتدئة

لذلك أفيدوني أفادكم الله .

سؤالي هو كالتالي:

أنا أريد ان أقوم بكتابة برنامج يظهر لي المساحة الإجمالية للذاكرة(RAM) وكذلك المساحة المستخدمة والمساحة الفارغة وكذلك عدد شرائح الرام على

اللوحة الام ؟

ولكن كل محاولاتي الجاهدة بائت بالفشل فلم أستطع التوصل الا لحساب مساحة الBasea memory وحاولت جاهدة ان أبحث عن عناوين تعطيني القيم

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

لذلك ارجو منكم المساعدة العاجلة قدر المستطاع...

ولكن إعذروني فأنا اريد أن اثقل عليكم قليلا بسؤال أخر فأرجوا أن يتسع صدركم لي

و السؤال هو انني قمت بكتابة برنامج لإعطائي عدد المنافذ الserial والparallel مع طباعة عناوين الI\o لهذه المنافذ ولكن المشكلة ان العدد الناتج

لمنافذ الserial=4 و الparallel=3 اما العدد الحقيقي الموجود على جهازي كما هو مدرج في برنامج معلومات النظام في الويندوز أن الserial=2

والparallel=1 فماهي المشكلة ياترى..

وهذا هو كود الserial ports

#include <stdio.h>
#include <dos.h>
#include<conio.h>
void main(void)

{
 unsigned int far *ptraddr=(unsigned int far *)0x00400000;  /* Pointer to location of Port Addresses */
 unsigned int address;       /* Address of Port */
 int a;


 for (a = 0; a < 4; a++)
   {
    address = *(ptraddr+a+a);
    if (address == 0)
  printf("No port found for COM%d \n",a+1);
    else
  printf("Address assigned to COM%d is %Xh\n",a+1,address);

   }
}

وهذا هو كود parallel ports

#include<conio.h>
#include<stdio.h>
//#include<iostream.h>
void main()
{
unsigned int far *add= (unsigned int far*)0x00400008;
unsigned int padd;
for(int i=0;i<3;i++)
{padd=*(add+i);
if (padd==0)
printf(" NO SEARIAL PORTS FOUND\n");
else
printf(" Assigned address for parallel port%d is %Xh\n",i+1,comadd);}

getch();
}

وعفوا على الإطالة

وجزاكم الله خيراً

" الدنيا سجن المؤمن وجنة الكافر ... والأخرة جنة المؤمن وسجن الكافر "

-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-

" اعمل لدنياك كأنك تعيش أبدا... واعمل لآخرتك كأنك تموت غداً "

#2

لماذا اخترتي الطريق الوعرة ؟

هل بحثتي في دوال ال API التي يوفرها نظام التشغيل ولم تجدي غايتك ؟

ايضاً.. اطلعي على هذا:

http://www.codeproject.com/system/system_information.asp

#3

السلام عليكم

شكرا جزيلاً على هذا البرنامج المفيد جدااااً وجزاك الله خيراً... ولكن للأسف انه يعتمد على الAPI وانا اعلم انها الطريق الافضل لكن للاسف المطلوب مني هو كتابة هذا البرنامج بدون استخدام اي دالة من دوال الAPI ...ماذا أفعل..عجزت..دلوني بالله عليكم

" الدنيا سجن المؤمن وجنة الكافر ... والأخرة جنة المؤمن وسجن الكافر "

-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-

" اعمل لدنياك كأنك تعيش أبدا... واعمل لآخرتك كأنك تموت غداً "

#4

as for the memory issue

i have written a program to mesure memory

you can download it with the source code from my webpage

My Webpage

its called

Memory Status 1.0

==================================

#5

السلام عليكم

شكرا جزيلا البرنامج جميل جدا ..وجزاك الله خيرا .. لكن المشكلة مازالت مستمرة وهي الAPI انا اريد كيفية كتابة البرنامج باستخدام المقاطعات او العناوين او حتى شرح لكيفية كتابة البرنامج ..

وأرجو ايظا ان تلاحظوا البرامج المكتوبة عن المنافذ اذا كانت صحيحة او لا وما سبب المشكلة التي لاقيتها

وأرجو ان لا اكون قد اثقلت عليكم...ولكن إعذروني

" الدنيا سجن المؤمن وجنة الكافر ... والأخرة جنة المؤمن وسجن الكافر "

-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-

" اعمل لدنياك كأنك تعيش أبدا... واعمل لآخرتك كأنك تموت غداً "

#6

هممم..

هل لديك اي خبرة في ال assembly ؟

حيث ان معظم الدروس والبرامج التي تقوم بعمل ذلك من خلال الوصول المباشر للذاكرة (كما تريدين) يقوم مبرمجوها باستخدام ال assembly :(

#7

السلام عليكم

بالنسبة للاسيمبلي لدي القليل ولكن ليس بما يكفي..لذلك مازلت احتاج المساعدة...

" الدنيا سجن المؤمن وجنة الكافر ... والأخرة جنة المؤمن وسجن الكافر "

-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-

" اعمل لدنياك كأنك تعيش أبدا... واعمل لآخرتك كأنك تموت غداً "

#8

لمعرفة منافذ الطابعة. عندي إجرائية لكنها بالأسمبلي. أنا لست خبير بلغة سي ++ لكن يمكنكي إدراج هذا الكود داخل دالة بتعريفها أنها تستعمل الأسبلي ب __asm أو _asm يجب أن تراجعي الكومبايلر التي تستعملي.

أنا شخصيا أستعمل لغة الباسكال-ديلفي.هذا نص الكود (يجب عليك ترجمته ل سي ++) :D

{get the parallel port adress in youur pc
input= portNo : the number of the parallel port from 1 to ....
output= adress of the port to read  in The AX register
}
function GetPortAddress(PortNo: integer): word; assembler; stdcall;
 asm
  push es
  push ebx
  mov ebx, PortNo
  shl ebx,1
  mov ax,40h // Dos segment adress
  mov es,ax
  mov ax,ES:[ebx+6] // get port adress in 16Bit way :)
  pop ebx
  pop es
 end;

يمكنك عمل loop لمعرفة Adress لكل منفذ طابعة.

إذا كان Adress=0 هذا يعني ان منفذ الطابعة لايوجد .

مثال بلغة الباسكال:

var
PortAddrArr : array [1..4] of word
CountLptValide: integer;

procedure FindLptAddr;
var
 i: integer;
begin
  CountLptValide:=0;
  for i:=1 to 4 do
   begin
    PortAddrArr := GetPortAddress(i);
    if PortAddrArr > 0 then 
	begin
	writeln('The adress of the port ', i , ' is = ', PortAddrArr);
	inc(CountLptValide);
	end	
    else 
  writeln('The paralele port number  ', i , ' is not availebal');
    inc(j);
   end;
writeln('The Number of availebal paralele port  is  : ', CountLptValide);
end;

أرجو أن يفيدك هذا الكود و إن كان مكتوب بالباسكال فتحريره و ترجمته إلى سي++ ليس ب الصعب.

إذا أحد من الإخوة استطاع ترجمته يكون مشكور.

(h)

سأتغيب عن المنتدى وستكون لي زيارات خفيفة بين الحين و الحين

يا صاحب الهم إن الهم منفرج.....................أبشر بخير فإن الفارج الله.

اليأس يقطع أحيانا بصاحبه..........................لا تيأس فإن الكافي الله.

الله يحدث بعد العسر ميسرة.........................لا تفزعن فإن الصانع الله.

إذا بليت فثق بالله وارض به...................فإن الذي يكشف البلوى هو الله.

و الله ما لك غير الله من أحد.......................فحسبك الله في كل لك الله

أخوكم مراد

27_06_06_05_21_41_1151410901logo_adl_wal_ihsan.jpg

#9

يا أهل سي ++ هل هذا الكود صحيح من حيث Syntax؟ :blink: .

#include <stdio.h>
#include <iostream.h>


/*
get the parallel port adress in youur pc
input= portNo : the number of the parallel port from 1 to ....
output= adress of the port to read  in The AX register
*/
unsigned short  __fastcall  GetPortAddress(int PortNo)
 {
 __asm {
  push es;
  push ebx;
  mov ebx, PortNo;   // value of PortNo is in eax register
  shl ebx,1;
  mov ax,40h; // Dos segment adress
  mov es,ax;
  mov ax,es:[ebx+6]; // get port adress in 16Bit way :)
  pop ebx;
  pop es;
 } /* Return with result in EAX */
}



int main(int argc, char* argv[])
{
int CountLptValide=0;
unsigned short PortAddrArr[4];

for(int i=0; i<4; i++)
 {
  PortAddrArr = GetPortAddress(i+1);
   if (PortAddrArr > 0)
        {
         cout << "The adress of the port "<< i+1 << " is = "<< PortAddrArr<< endl;
         CountLptValide++;
        }
   else
        cout << "The paralele port number  " <<  i+1 << " is not availebal" << endl;
 }
 cout << "The Number of availebal paralele port  is  : " << CountLptValide;

  system("pause");
        return 0;
}

:unsure:

سأتغيب عن المنتدى وستكون لي زيارات خفيفة بين الحين و الحين

يا صاحب الهم إن الهم منفرج.....................أبشر بخير فإن الفارج الله.

اليأس يقطع أحيانا بصاحبه..........................لا تيأس فإن الكافي الله.

الله يحدث بعد العسر ميسرة.........................لا تفزعن فإن الصانع الله.

إذا بليت فثق بالله وارض به...................فإن الذي يكشف البلوى هو الله.

و الله ما لك غير الله من أحد.......................فحسبك الله في كل لك الله

أخوكم مراد

27_06_06_05_21_41_1151410901logo_adl_wal_ihsan.jpg

#10

اليكي بعض اللينكات الشيقة.. تأكدي من مرجعتها قبل ان تفقدي الأمل :) :

- من جوجل Groups

- واحد آخر من جوجل Groups

تحياتي وبالتوفيق ،

#11

السلام عليكم

وشكرا جزيلا لكم..وجزاكم الله خيرا

وسوف احاول استيعاب ماوضعته اخ chaos من لنكات شيقة..واذا فشلت فليس لدي غيركم :)

" الدنيا سجن المؤمن وجنة الكافر ... والأخرة جنة المؤمن وسجن الكافر "

-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-

" اعمل لدنياك كأنك تعيش أبدا... واعمل لآخرتك كأنك تموت غداً "

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

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