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

هل يمكن شرح البرنامج بالتفصيل وعمله ؟

بدأه طارق عبيد في 24 مايو 2009 · 1 رد · 926 مشاهدة · في أرشيف قسم الـــ Assembly
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

تحية طيبة بهذا الصباح لجميع الأعضاء ،

لقد قمت بتطبيق البرنامج التالي ولم تظهر لدي أي مشاكل ولكن لم استطيع ادخال اي سلسلة رمزية فهل المشكلة بإصدار البرنامج لدي أم بكود البرنامج .

مع العلم انني اريد عمل برنامج يقوم بإدخال سلسلة رمزية ومن ثم طباعتها (String).

وشكراً لكم لحسن تعاونكم

.model small
.stack 100h
data segment
  str db "Enter String$"
  str1 db 40h dup('$')
  str2 db "The string is $"
data ends
code segment
assume cs:code,ds:data
start:
	  mov ax,@data
	  mov ds,ax
	  mov dx,offset str
	  mov ah,09h
	  int 21h
	  mov dx,offset str1
	  mov ah,0ah
	  int 21h
	  mov dx,offset str2
	  mov ah,09h
	  int 21h
	  mov dx,offset str1
	  mov ah,09h
	  int 21h
	  mov ah,4ch
	  int 21h
code ends
end start
#2

1. لديك نفس المشكلة في استخدام 100h كبداية، كما أوضحت لك في الموضوع الآخر، إلا لو كان الناتج لديك ملف COM، أنا لدي EXE.

2. لديك مشكلة أخرى هي أنك لم تقرأ جيداً استخدام الوظيفة 0Ah من المقاطعة 21h

انظر الصفحة التالية:

http://www.ctyme.com/intr/rb-2563.htm

Format of DOS input buffer:

Offset Size Description (Table 01344)

00h BYTE maximum characters buffer can hold

01h BYTE (call) number of chars from last input which may be recalled

(ret) number of characters actually read, excluding CR

02h N BYTEs actual characters read, including the final carriage return

ما يهمني هنا هو أول سطر، الإزاحة 0 في الـ buffered input ستحمل عدد البايتات التي تم إدخالها، يعني لو كتبت abcdef ستجد فيها الرقم 6

انظر الصورة

post-7008-1243165751_thumb.png

لذلك اكتب

mov dx,offset str2
inc dx

وانتبه إلى ما داخل الإطار الأخضر، هذه ناتجة عن النقر على Enter، عليك أن تقوم بإلغائها. كيف؟ بسيطة، لديك عدد الحروف بالتالي تستطيع الوصول إلى نهاية السلسلة وكتابة $ بدلاً منها :)

Do as I say, not as I do

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

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