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

السؤال

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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...