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

برنامج لتحديد موقع رقم معين في مصفوفة

بدأه yousefal في 31 مارس 2012 · 2 رد · 1,642 مشاهدة · في أرشيف قسم الـــ Assembly
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

مرحبا

برنامج يعمل تمام ، مهمته المقارنة بين عدد صحيح وبين مصفوفة بحيث حين يجد الرقم نفسه في المصفوفة يعيد قيمة المسجل bx بمعنى اخر ترتيب الرقم في المصفوفة ثم نقلت قيمة هذا المسجل إلى المتغير m أريد من البرنامج ان يتوقف حين يجد الرقمين المتشابهين لكنه لا يتوقف ويعيد القيمة 5 بدلا من 4 ،، البرنامج بسيط جدا جدا اتمنى ان تساعدوني لمعرفة المشكلة في الكود ..

org 100h


mov cx,5
mov ax,0
mov bx,0

next: add al,array[bx]
      cmp al,4 ; we assume4 but we can change it.. 
      je final



mov ax,0
inc bx

loop next 



final : mov dl,bl 
        mov m,dl 
        ret

;data

array1 db 1,2,3,4,0  
m db ?  


ret

وهذا كود اخر لتحسين مصفوفة ، إن كان لديكم اقتراحات لتحسينه او جعله يكون من خلال intruppts

  
org 100h
mov cx,5
mov ax,0
mov bx,0

next: add al ,array1[bx]
add al,array2[bx]
mov sum[bx],al
mov ax,0
inc bx
loop next
;data
array1 db 1,2,3,4,5
array2 db 4,3,1,5,8
sum db ?,?,?,?,?
ret

ملاحظة : انا استخدم برنامج emu8086

#2

يوجد الخطأ في هذا السطر:

next: add al,array[bx]

أنت تريد نقل عنصر المصفوفة إلى المسجل AL ثم مقارنة قيمته باستعمال التعليمة CMP و القفز اذا تحقق الشرط. لكن انظر، انت استعملت التعليمة ADD و التي تقوم بإظافة قيمة العنصر إلى المسجل al عوضا عن استعمال تعليمة النقل MOV.

الكود بعد التصحيح:

org 100h

      mov cx,5
      mov ax,0
      mov bx,0

next: mov al,array[bx]
      cmp al,4 ; we assume4 but we can change it.. 
      je final

      mov ax,0
      inc bx
      loop next 

final: mov dl,bl 
       mov m,dl 
       ret

;data
array db 1,2,3,4,0  
m db ?
1
#3

+1

لاهتمامك ،رغم اني قمت بإيجاد كود أفضل منه وسارفقه هنا ، علي غيري يستفيد منه يوما ...

.model small
.stack 100
.data

array db 1,2,3,4,5

m db ? 

no db 2


.code

mov ax, @data
mov ds, ax


lea bx, array 
xor di, di
xor dl, dl ; to point to the index   (the value of index will store in si)
mov cx, 5

start: 

mov al, no
cmp al,[bx + di]
je print
inc dl
inc di


loop start






print:
mov ah, 2 
add dl, 30h
int 21h

jmp end




end:

mov ah, 4ch
int 21h

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…