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

[مخالف]سؤال بلغة السي بلص بلص

مغلق
بدأه flame_man2007 في 20 مارس 2007 · 3 رد · 706 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

أرجو أن تقبلوني كصديق جديد لكم في هذا المنتدى الرائع , عندي سؤال الى محترفي البرمجة ممكن يساعدوني في حلة.

أكتب برنامج بلغة السي بلص بلص يقرء مجموعة تعليمات لغة التجميع من ملف , نخزن label في متغير مصفوفة , operation code في متغير اخر , والمعاملات operand في متغير أخر,مثلاً

there Mov Ax,10h

Mov Bx,Ax

Ret

ثم جد طول البرنامج عن طريق structure يخزن كل شفرة وعدد البايتات التي تأخذها وعند قرائة كل شفرة نبحث عن تلك الشفرة في هذة structure ونخزن طول الشفرة في متغير,

2 there Mov Ax,10h

4 Mov Bx,Ax

1 Ret

نخزن طول البرنامج بمتغير يدعى locctr , ثم نجد symtab وهو structure يخزن جميع labels هذة البرنامج الذي يعتبر خرج pass1 للمجمع,

ارجو ان الفكرة قد وصلت.

#2

ما معقولة محد يعرف يحلة , هو عبارة عن ملف نصي text يحتو على بضع تعليمات بلغة التجميع , ما نقوم بة سوى قراءة النص و تجزئة هذة التعليمات ,زين ممكن حد يعطيني ماصدر تفيدني , هذة هي محولتي لحل جزء من مطاليب البرنامج

there mov ax,bx

mov bx,[there]

ret

---------------------------------------------------------------------------------

#include <stdio.h>

#include <iostream.h>

#include <conio.h>

#include <string.h>

struct op

{

char instr[100];

int leingth;

};

int main()

{

// load operation table

op optabs[5];

strcpy(optabs[0].instr, "mov");

optabs[0].leingth = 2;

strcpy(optabs[2].instr, "ret");

optabs[2].leingth=1;

//**********************

FILE *fp;

int i,locctr=0;

char ch,lab[100],op[100],opr[100];

fp=fopen("D:\\a.txt","r");

ch=getc(fp);

while( ch != EOF )

{

for ( i=0; ch != ' ' ; ++i)

{

lab=ch;

ch=getc(fp);

}

lab='';

while(ch == ' ') ch=getc(fp);

for(i=0;ch!= ' ' && ch != EOF ; ++i)

{

op=ch;

ch=getc(fp);

}

op='';

for(int j=0 ; j<3 ; j++)

{

if (strcmp(optabs[j].instr,op)==0)

locctr = locctr + optabs[j].leingth;

}

if(ch == ' ' ) ch=getc(fp);

for ( i=0 ; ch != '\n' && ch != EOF ; ++i)

{

opr=ch;

ch=getc(fp);

}

opr='';

}

cout<<locctr;

fclose(fp);

getch();

return 0;

}

#3

ماعرفت الحل :( ..

#4

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

قواعد طرح المشاركات

/index.php?showtopic=29343

Sr. Software Development Engineer
Hulu, LLC
My Blogs

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

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