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

عملية التجميع وتنفيذ البرنامج

بدأه Xacker في 2 أكتوبر 2005 · 18 رد · 4,497 مشاهدة · في أرشيف قسم الـــ Assembly
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

هذا هو الجزء الجديد والتابع للسلسلة الحالية في تعلم لغة التجميع.. اعتذر عن التاخير.. وعن الاختصار في شرح هذا المقال :rolleyes: باي حال.. المقالات الاخرى على الطريق حيث اني نفضت غبار الكسل مرة اخرى.. تحياتي

عملية التجميع وتنفيذ البرنامج.zip

Do as I say, not as I do

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

#2

أخي Xacker

لدي سؤال، هل تكتب من معلوماتك او تترجم ؟

d4baa0.gif
#3

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

Do as I say, not as I do

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

#4

بارك الله فيك أخي ... لا يهم إن كانت المقالات مترجم - المهم أنها عربية جهازة للقراءة

#5

شكرا جزيلا

جاري التحميل ...

اعتقد انو الاهم هوا انو لغة الموضوع موجهة للمبتدئين بغض النظر عن ان الموضوع عربي او انجليزي

شخصيا ما بواجه مشكلة مع الانجليزي

#6

هذه المرة تاخرت في قراءة الموضوع

لكنه رائع كالعادة وبانتظار المزيد

#7

العفو

Do as I say, not as I do

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

#8

انا مبتدى في لغة الاسمبلي

مشكور اخي

الحياة رهان كبير مثل الرهان العادي في الثاني تفوز بالحظ اما في الاول فتفوز بالجد

#9

جزاك الله خيرا أخي الكريم , هذا النوع من العلم ما نحتاجة low level = power of ASM

عندي سؤال أخي العزيز خارج الموضوع.

أريد أن أكتب رقم 5+5

أحدد رقم int variable 5 و أضيف عليه 5 ثم أطبعهم.

.model small
.stack 100h
.data
number db '5'
.code
main  proc
	  mov	ax,@data
	  mov	ds,ax
	  mov	ah,9
	  mov	dx,offset number
	  int	21h
	  add  number,5  
	  mov	ax,4C00h
	  int	21h
main  endp
end   main

للأسف الناتج يخرج 5وكلام غريب بعدها :)

أريد مثل هذا لكن بالأسمبلي

#include <stdio.h>
int main()
{
int number=5;
number+=5;
printf("%d",number); 
return 0;
}

تم تعديل هذه المشاركة بواسطة croconile في 29 مارس 2008 في 10:04

rasool4k.gif

[وسط]mimetex.cgi?MSN:root@root-shell.net.

[/وسط]

#10

السلسلة النصية يجب ان تنتهي بـ $ في 16بت.

الرقم لديك سلسلة نصية الى ان يثبت العكس :lol:

لم اعد اذكر ان كنت تستطيع استخدام ADD مع عناوين ذاكرة.. انظر في هذه النقطة, هل يمكن للـ dest ان تكون mem ؟

راجع ملف الـ opcodes

بكلا الأحوال انتبه الى ان الجمع في الاسمبلي يخضع الى انظمة العد. 5 + 5 != 10

انما 0Ah

فان كانت عملية الجمع صحيحة او كنت مرغماً على نقل قيمة العدد اولا الى مسجل > استخدام ADD لاضافة عدد آخر اليه

فعليك ان تقوم بتحويل المجموع الى صيغة عشرية قبل الطباعة

ملاحظات سريعة ارجو ان تجد فيها بعض الفائدة..

السلام عليكم

Do as I say, not as I do

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

#11
Xacker كتب:
بكلا الأحوال انتبه الى ان الجمع في الاسمبلي يخضع الى انظمة العد. 5 + 5 != 10

انما 0Ah

فان كانت عملية الجمع صحيحة او كنت مرغماً على نقل قيمة العدد اولا الى مسجل > استخدام ADD لاضافة عدد آخر اليه

فعليك ان تقوم بتحويل المجموع الى صيغة عشرية قبل الطباعة

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

جزاك الله خيرا أخي غفلت نظام العد

.model small
.stack 100h
.data
number db 31h,'$';رقم واحد بالهكس
.code
main  proc
	  mov	ax,@data
	  mov	ds,ax
	  mov	ah,9
	  mov	dx,offset number
	  add   number,05h;بعدما تم تحديد مكان الرقم نزيدة لجعلة 36 أي الرقم 6
	  int	21h
	  mov	ax,4C00h
	  int	21h
main  endp
end   main
rasool4k.gif

[وسط]mimetex.cgi?MSN:root@root-shell.net.

[/وسط]

#12

انتبه الى أمر آخر, وهو أن السلاسل النصية فقط ما يحتاج الى $ تنهي السلسلة, وهنا أنت تقوم بتحديد بايت وليس سلسلة نصية بالتالي لست بحاجة الى استخدام $

بنفس الوقت, عليك باستخدام مقاطعة تقوم بطباعة محرف واحد فقط كي لا يحدث خطأ ما, أما استخدام مقاطعة لطباعة السلاسل النصية فاستخدمها في أوانها وعند الحاجة فقط.

السلام عليكم

Do as I say, not as I do

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

#13

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

نصائحك ذهبية بسم الله ما شاء الله :)

.model small
.stack 100h
.code
main  proc
  mov ah,2;طباعة حرف واحد
  mov dl,31h;رقم واحد
  add dl,05h;أضف خمسة
  int 21h
  mov ax,4c00h
  int 21h
main endp
end main

سؤال آخر خارج الموضوع :P

الملف التنفيذي حجمة أكبر من 500 بايت بقليل.

لكن هناك الكثير من الفراغات 0x00 هل هناك مجال لحذف هذه المسافة أو تقليلها :P

تم تعديل هذه المشاركة بواسطة croconile في 4 أبريل 2008 في 08:23

rasool4k.gif

[وسط]mimetex.cgi?MSN:root@root-shell.net.

[/وسط]

#14

انظر هنا هذه المشاركة:

/index.ph...st&p=770697

Do as I say, not as I do

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

#15

على أي أساس قمت بتعديل الكود استاذي.

وجدت موضوع مميز هنا

و الأمر يحتاج مني كثير من البحث.

شكرا لك حبيبي في الله

rasool4k.gif

[وسط]mimetex.cgi?MSN:root@root-shell.net.

[/وسط]

#16

This will come in handy

;)

لا تنساني بالدعاء

Do as I say, not as I do

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

#17

sweet :)

لكن ما قصدت هذا :)

المشوار علي أن أكمله وحيدا :]

rasool4k.gif

[وسط]mimetex.cgi?MSN:root@root-shell.net.

[/وسط]

#18
croconile كتب:
الملف التنفيذي حجمة أكبر من 500 بايت بقليل.

لكن هناك الكثير من الفراغات 0x00 هل هناك مجال لحذف هذه المسافة أو تقليلها :P

انت تكتب 16bits يمكنك ان تنتج ملف تنفيذي DOS COM بحجم الاوامر 14 bytes

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

coconile.rar

d4baa0.gif
#19

أكرمكم الله و أثابكم و بارك فيكم , جزاكم الله خيرا.

rasool4k.gif

[وسط]mimetex.cgi?MSN:root@root-shell.net.

[/وسط]

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