• 1

كيف أكتب برنامج لإيجاد الأعداد الموجبة والسالبة ضمن مجال مُعطى باستخدام إسمبلي؟

السلام عليكم ورحمة الله وبركاتة ممكن مساعدتكم هذا الواجب في الصور أرجو حله لي بلغة أسمبلي (نظامDos) وجزاكم الله خير.

حل.jpg

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
  • 0

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

data segment
        num db -3,1,-5,6,-7,9,'#'
        p_cnt db 0h
        n_cnt db 0h

data ends


code segment
        assume ds:data,cs:code

start:
        mov ax,data
        mov ds,ax

        lea si,num
main:
        cmp num[si],0h
        jg pos
        inc si
        add n_cnt,01h
        cmp num[si],'#'
        je exit
        jmp main

pos:
        add p_cnt,01h
        inc si
        cmp num[si],'#'
        je exit
        jmp main

exit:
        mov bl,p_cnt
        mov cl,n_cnt

        mov ax,4c00h
        int 21h

code ends
        end start

سيقوم هذا البرنامج باختبار كل رقم على حدة وسيضيف +1 إلى p_cnt إذا كان الرقم موجب وسيضيف +1 إلى n_cnt إذا كان الرقم سالب، وبعد ذلك سيقوم بطباعة الناتج على شاشة الحاسوب.

ملاحظة: سيتوقف البرنامج عند وصوله إلى رمز #
وجدت أمثلة أخرى مثل هذه:

MOV AX, DATA
MOV DS, AX
MOV CL, 05
XOR BL, BL
XOR DL, DL
LEA SI, SERIES
 
NEXT2:  MOV AL, [SI]
SHR AL, O1
JNC NEXT1
INC BL
JMP NEXT3
NEXT1:  INC DL
NEXT3:  INC SI
DEC CL
JNZ NEXT2
MOV POS, DL
MOV NEG, BL
END

في العادة ستكون شيفرات اختبار نوع الرقم (سالب أو موجب) مشابهة لهذه:

cmp eax, 0
jl isNegative
;or
test eax, 0x80000000
jne is_signed
;or
test eax, eax
js signed
;or
test al, al
js is_signed
; or
test eax, 80h
jne is_signed

المصادر 1 2 3

1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة

يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن