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

مساعده في الوصول الى حل لمشكلة في سؤال بالاسمبلي

مغلقمُجاب
بدأه رجاء مصطفى في 27 نوفمبر 2013 · 2 رد · 1,416 مشاهدة · في لغة Assembly لأنظمة 16, 32, 64 بت
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

طلب منا كطلاب ان نقوم بكتابة برنامج بالأسمبلي يقوم بجمع الارقام من 1 الى 5 ثم تحويل النتيجة الى أسكي

 

قمت انا بكتابة الكود لكني اواجه مشكلة بتحويل النتيجة الى أسكي

[table].MODEL SMALL
.STACK 100H
.CODE
MAIN PROC
MOV BX, 0
MOV CX, 5
MOV AX, 0
Location: INC AX
ADD BX, AX
LOOP Location

AAA
[/table]

END MAIN

 

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

تم تعديل هذه المشاركة بواسطة رجاء مصطفى في 27 نوفمبر 2013 في 22:20

#2 أفضل إجابة

حلقة التكرار تستمر بإضافة صفر على صفر، يمكنك استخدام العداد cx وجمع الأعداد تنازليا، 5 + 4 + 3 + 2 + 1 (من الأفضل لو تستخدم الأحرف الصغيرة):

    mov     ax, 0       ; ax = 0
    mov     cx, 5       ; cx = 5
location:
    add     ax, cx      ; ax += cx => 5+4+3+2+1
    loop    location    ; cx--

عملية تحويل العدد 15 إلى عدد آسكي يمكن عملها بأخذ باقي قسمة العدد على 10 ثم أخذ باقي قسمة العدد الناتج على 10 إلى أن ينتج صفر، مثلاً لتحويل 123:

 

123 ÷ 10 = 12 و 123 % 10 = 3

12 ÷ 10 = 1 و 12 % 10 = 2

1 ÷ 10 = 0 و 1 % 10 = 1  توقف طالما نتيجة القسمة صفر

 

الأعداد 1 و 2 و 3 يمكن حفظها في المكدس واستعادتها لاحقاً، أضف 48 للرقم أو '0' كي تحوله إلى حرف:

    ; جمع الأعداد
    mov     ax, 0       ; ax = 0
    mov     cx, 5       ; cx = 5
location:
    add     ax, cx      ; ax += cx => 5+4+3+2+1
    loop    location    ; cx--

    ; تجزئة العدد
    mov     cx, 0       ; cx = 0
    mov     bx, 10      ; bx = 10, constant
converter:              
                        ; do {
    mov     dx, 0       ;   clear dx
    div     bx          ;   ax = ax / 10, dx = ax % 10
    push    dx          ;   push digits 15 => 5, 1    
    inc     cx          ;   cx++
    cmp     ax, 0       ; } while( ax != 0 );
    jne     converter   ;   

    ; طباعته حرف آسكي   
print:
    pop     dx          ; restore digits 5, 1
    add     dx, '0'     ; make it ascii
    mov     ah, 2       ; print it
    int     21h
    loop    print

تم تعديل هذه المشاركة بواسطة Mr.B في 27 نوفمبر 2013 في 23:33

1
#3

مشكور أخي على المساعده كنت بحاجة لهذا التوضيح

يعطيك العافية

هذا الموضوع مغلق.

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

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

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

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

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