اذهب إلى المحتوى
  • 1

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

عبدالله ناشب

السؤال

Recommended Posts

  • 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

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...