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

[ تمت الإجابة ]برنامج جمع بسيطة

بدأه Prelware D في 3 أغسطس 2009 · 5 رد · 1,153 مشاهدة · في أرشيف قسم الـــ Assembly
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

لقد قمت بصنع هذا البرنامج البسيط لجمع قيميتين

الكود:

data segment

out1 dw 'enter two Nu the num must be under 10 $' 
in1 db 0
out2 dw 0ah,0dh,'enter the 1st Nu $'
in2 db 0
out3 dw 0ah,0dh,'enter the 2nd Nu $'
in3 db 20h,0
out4 dw 0ah,0dh,'you have entered $'
out5 dw 20h,'and $'
out6 dw 20h,'the num is $'
ends


stack segment
dw 100 dup(0)
ends


code segment
start:

mov ax, data
mov ds, ax
mov es, ax


lea dx,out1
mov ah,9h
int 21h


lea Dx,out2
mov ah,9h
int 21h


mov ah,1
int 21h
mov in1,al 


lea Dx,out3
mov ah,9h
int 21h


mov ah,1
int 21h
mov in2,al 


lea Dx,out4
mov ah,9h
int 21h


mov ah,2
mov dl,in1
int 21h 


lea Dx,out5
mov ah,9h
int 21h


mov ah,2
mov dl,in2
int 21h


add in3,in1
add in3,in2


lea Dx,out6
mov ah,9h
int 21h


mov ah,2
mov dl,in3
int 21h


mov ah,1
int 21h
mov ax,4c00h
int 21h


ends
end start

تم تعديل هذه المشاركة بواسطة Prelware D في 3 أغسطس 2009 في 13:20

Danial Tarraf

Prelware D&D Association

Lattakia/Syria

#2

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

يرجى إعادة تنسيق الكود ,,

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

يجب نقل إحدى القيمتين إلى أحد المسجلات ثم جمع القيمة الثانية عليه

mov ax,5
add ax,3	;now ax=8

ADD

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

feed.1.gif

#3

شكراُ أخي GHOST2010

لقد قمت بإعادة تنسيق الكود

ولكن أنا أريد جمع قيمة موجودة في متغير

جمع القيمة الموجودة في In1 مع In3

ثم جمع in3 مع in2

يعني يجب أن يكون

In3=In1+in2

Danial Tarraf

Prelware D&D Association

Lattakia/Syria

#4

السلام عليكم

جربة الكود التالي أخي GHOST2010

ولكن اعطاني نفس الخطأ

 mov ax,0
	add ax,in1 
	add ax,in2
	mov in3,ax

تم تعديل هذه المشاركة بواسطة Prelware D في 3 أغسطس 2009 في 21:47

Danial Tarraf

Prelware D&D Association

Lattakia/Syria

#5

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

اقتباس
add in3,in1

add in3,in2

كما قال الشبح :) لا يمكن أن تتم عملية memory to memory بل يجب النقل لأحد المسجلات أولا ..

اقتباس
mov ax,0

add ax,in1

add ax,in2

mov in3,ax

لا يمكن نقل أو اجراء عملية بين متغير من بايت واحد db مع مسجل من بايتين ..

لديك الرقمين في in1 و in2 ، قم أولا بنقل in1 الى المسجل al :

mov al,in1

الأن مثل لو كانت قيمه in1 هي الحرف 5 (ستكون قيمتها ascii هي 35H ) فقم بطرح 30H من al حتى يكون القيمه هي 5 .

sub al,30H

الأن نفس الكلام للمتغير الثاني .. ويمكنك طرح القيمه قبل ادخالها في In2 ..

mov ah,1

int 21

sub al,30H

mov in2,al

الأن فقط أجمع in2 مع al :

add al,in2

بعد ذلك أجمع لal القيمه 30H حتى تحصل على الحرف ..

add al,30H

واعرضه

mov ah,2

int 21H

أرجوا ان تكون الفكره واضحه ،،ويمكنك قرائه جدول الascii للتعرف على القيم ..

بالتوفيق :) .

http://informatic-ar.com منصة تعليمية عربية في علوم الحاسب والبرمجة

https://moalfat.com  للكتب الالكترونية والكورسات التعليمية

Everything we see now is just an engineering solution based on old science

#6

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

أشكرك على ردك المفيد,,أظن أنني قد فهمت ما تهدف إليه

سوف أكتب الشرح والرجاء أن تقوم بالنقض إن وجد أية أخطاء

قمنا باستخدام القسم الأدنى من المسجل ax أي al وذلك لأننا

قما أثناء تعرف المتغير In1 مثلاً..بأستخدام Db وهذا يعني أحجز 1 بت من مسجل الـ A

بينما اذا استخدمنا dt فهذا يعني احجز 8 بت من A أي كل الـ al

والخطأ من أستخدام Ax لأن Ax تتألف من قسمين هما Al,Ah

----------

تكون الأرقام من الصفر المقدر بـ 30h حتى 9 المقدرة بـ 39h

عندم قمنا بوضع القيمة 5 في المتغير الأول In1 حفظ بقيمة 35h

ثمنا قمنا بطرح 30h من 35h بقي لدينا 5h

والمتغير الثاني إن قمنا بتعريفة على أنه 4

يأخذ شكل 34H

إن قمنا بطرحه 30h منه يصبح 4h

ثم قمنا بجمع العديدن 5hوh4

نتج لدينا h9 أضفنا له 30h

أصبحت 39h وهو الرقم 9

----------

أرجو أن يكون ما كتبت صحيح :blush:

وأشكرك مرة أخرى

تم تعديل هذه المشاركة بواسطة Prelware D في 4 أغسطس 2009 في 00:51

Danial Tarraf

Prelware D&D Association

Lattakia/Syria

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