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

لا أعرف كيف .......!

مغلق
بدأه Asm4all في 18 ديسمبر 2004 · 4 رد · 642 مشاهدة · في لغة Assembly لأنظمة 16, 32, 64 بت
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

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

وهذا ببساطه فكل ما نفعله هو أن نجعل دالة ال main تقبل متغيرات بهذا الشكل :

int	main(int	argv,char	*argc[])
{
.
.
.
}

وسؤالي كيف أحصل على نفس النتيجه من خلال الأسمبلي ؟

#2

السلام عليكم,

قد نضن أن الدالة main تقوم لوحدها بعمل كل هدا ولكن هي في الحقيقة تستدعي دوالا أخرى. فمثلا في الأسمبلر أو في أي لغة أخرى يمكن أن نستدعي دالة API التي تعطينا البارامترات التي نعطيها مع تشغيل البرنامج وهي : GetCommandLine وأضن أن اسم الدالة كاف لتتعبير عما تقوم به.

إلى اللقاء.

#3

شكرا أخ CHIK

انا كنت أقصد الشغله دي في نظام ال 16 بيت وليس 32 بيت و API

فهل يوجد أي توضيح للكيفيه ؟

تم تعديل هذه المشاركة بواسطة Asm4all في 20 ديسمبر 2004 في 11:48

#4

السلام عليكم,

الأخ Asm4all تعرف أن الآن حين لا نحدد شيئا فالتفكير يذهب أوتوماتيكيا إلى نضام 32 بت.

فيما يخص نضام 16 بت أو الدوس يمكننا التعرف على CommandLine إذا عرفنا موقع PSP ونعرف أن عنوان PSP + 80 هيكس يعطينا طول CommandLine والأوفسيت 81 هيكس يعطينا بداية ما أدخلناه. إذن يبقى الأمر هو مجرد معرفة عنوان PSP وهذا يمكن العثور عليه باستدعاء المقاطعة 21 مع ax=6200h وبعد هذا سيكون عندنا سكمنت PSP في الرجستر bx .

وللتوضيح أكثر سأعطي هنا كود . فإذا ما استدعينا البرنامج مع CommandLine سيكتب لنا البرنامج ما أعطيناه على شكل CommandLine.

إلى اللقاء.

الكود :

 .MODEL  SMALL, os_dos
  .386

.data

.CODE
start:
    mov ax,6200h
    int 21h
    mov ax,bx  ;bx will contain the segment of the psp
    mov ds,ax  ; Let ds be this segment
    mov si,80h ; at 80h will be the lenth of the command line
    xor bx,bx 
    mov bl,[si]; bl isthe lenth of command line
    inc si     ; si points to the command line string
    mov byte ptr [si + bx],'$'; put end of string at the end
    
    mov dx,si  ; Show the command line
    mov ah,9
    int 21h
    
;***********************************

MOV AH,4CH
INT 21H
    END start
#5

أشكرك أخي CHIK

وآسف على عدم التحديد من البدايه, فكما قلت الجميع يعمل ويفكر ومشغول بال 32 بيت

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

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