emu8086

  • كل ما تريد معرفته عن emu8086

    كل ما تريد معرفته عن emu8086

    Emu8086 هو محاكي برمجي يستخدم لتشغيل وتطوير برامج التجميع (Assembly) المكتوبة لمعالج Intel 8086. يعمل Emu8086 على توفير بيئة تطويرية محاكاة لمعالج Intel 8086 وأجهزته المرافقة.

    إليك بعض المعلومات حول Emu8086:

    1. واجهة المستخدم: يتميز Emu8086 بواجهة مستخدم بسيطة وسهلة الاستخدام. تتيح للمبرمجين كتابة وتصحيح وتشغيل برامج التجميع بسهولة.

    2. محاكاة المعالج: يعمل Emu8086 على محاكاة معالج Intel 8086 بشكل دقيق. يمكن للمبرمجين تشغيل وتطوير برامج التجميع للمعالج 8086 واختبارها في بيئة محاكاة قبل تنفيذها على أجهزة حقيقية.

    3. تصحيح الأخطاء: يوفر Emu8086 أدوات لتصحيح الأخطاء ومراقبة سير التنفيذ لبرامج التجميع. يمكنك تتبع التعليمات البرمجية وعرض قيم المسجلات والذاكرة أثناء التشغيل.

    4. الدعم اللغوي: يدعم Emu8086 لغة التجميع (Assembly Language) لمعالج Intel 8086. يمكنك استخدام أوامر التجميع المعتادة لتطوير برامجك.

    5. ميزات إضافية: يحتوي Emu8086 على مجموعة من الميزات الإضافية مثل تحرير الملفات المصدرية وتحويلها إلى ملفات تنفيذية وتطبيقات مستقلة، وتوفير وظيفة تشغيل خطوة بخطوة لتتبع التنفيذ.

    Emu8086 هو أداة مفيدة للمبرمجين الذين يرغبون في تعلم وتطوير برامج التجميع لمعالج Intel 8086. يسمح لك Emu8086 بتجربة البرمجة على منصة محاكاة قبل الانتقال إلى أجهزة حقي

    قية.بالطبع! إليك المزيد من المعلومات وبعض الأمثلة حول Emu8086:

    1. البرمجة بلغة التجميع: Emu8086 يستخدم لتطوير برامج التجميع باستخدام لغة التجميع. هذه اللغة تستخدم لكتابة التعليمات البرمجية المنفذة مباشرة من قبل المعالج. يستخدم الترميز الثنائي لتمثيل التعليمات والبيانات.

    2. محاكاة المعالج: Emu8086 يوفر بيئة محاكاة تشبه العمل الفعلي لمعالج Intel 8086. يمكنك تطوير وتشغيل برامجك ومشاهدة كيفية تفاعلها مع المعالج والذاكرة.

    3. ملفات المصدر والتنفيذ: يمكنك إنشاء ملفات مصدرية باستخدام لغة التجميع في Emu8086 وتحريرها وتجريبها. بعد ذلك، يمكنك تحويل الملفات المصدرية إلى ملفات تنفيذية (ملفات .exe) التي يمكن تشغيلها على نظام التشغيل الخاص بك.

    4. تحليل وتصحيح الأخطاء: إذا واجهت أخطاء في برامجك، يمكنك استخدام أدوات Emu8086 لتحليل الأخطاء وتصحيحها. يمكنك تتبع خطوات التنفيذ ومراقبة قيم المسجلات والذاكرة لمساعدتك في تحديد الأخطاء وإصلاحها.

    مثال على برنامج التجميع

    هنا مثال بسيط لبرنامج تجميع يقوم بطباعة رسالة على الشاشة:

    .model small
    .stack 100h

    .data
    message db ‘Hello, World!’, ‘$’

    .code
    main proc
    mov ah, 09h
    mov dx, offset message
    int 21h

    mov ah, 4Ch
    int 21h
    main endp

    end main

    هذا البرنامج يستخدم خدمة 09h للقراءة والكتابة، ويستخدم الخدمة 4Ch لإنهاء البرنامج.

    Emu8086 يمكن أن يكو ن أداة قوية لتعلم وتطوير برامج التجميع. يمكنك تصفح المزيد من الأمثلة والموارد عبر الإنترنت لتوسيع معرفتك ومهاراتك في البرمجة بلغة التجميع.

    إليك بعض الأمثلة الإضافية لبرامج التجميع التي يمكنك تطويرها باستخدام Emu8086:

    1. برنامج يقوم بطباعة أعداد صحيحة من 1 إلى 10:

    .model small
    .stack 100h

    .data

    .code
    main proc
    mov cx, 10 ; عدد التكرارات

    mov ax, 1 ; العدد الأول
    loop_start:
    ; طباعة العدد
    mov ah, 02h
    mov dl, ‘0’
    add dl, al
    int 21h

    ; طباعة المسافة
    mov dl, ‘ ‘
    int 21h

    inc ax ; زيادة العدد بواحد

    loop loop_start

    mov ah, 4Ch
    int 21h
    main endp

    end main

    2. برنامج يقوم بجمع عددين صحيحين وطباعة الناتج:

     

    .model small
    .stack 100h

    .data
    num1 dw 5
    num2 dw 3
    result dw ?

    .code
    main proc
    mov ax, num1
    add ax, num2 ; جمع العددين

    mov result, ax

    ; طباعة الناتج
    mov ah, 02h
    mov dl, ‘0’
    add dl, ah
    int 21h

    mov ah, 02h
    mov dl, ‘0’
    add dl, al
    int 21h

    mov ah, 4Ch
    int 21h
    main endp

    end main

    3. برنامج يقوم بطلب اسم المستخدم ويطبع رسالة ترحيبية:

    .model small
    .stack 100h

    .data
    name db 20 dup(‘$’)

    .code
    main proc
    mov ah, 0Ah
    mov dx, offset name
    int 21h ; استدعاء الخدمة لقراءة السلسلة من المستخدم

    ; طباعة رسالة الترحيب
    mov ah, 09h
    mov dx, offset message
    int 21h

    mov ah, 4Ch
    int 21h
    main endp

    end main

    هذه أمثلة بسيطة لبرامج التجميع التي يمكنك تجربتها باستخدام Emu8086. قم بتطويرها أو قم بإنشاء برامج تجميع جديدة واستكشف إمكانيات البرمجة بلغة التجميع.

  • emu8086 مجموعة اكواد أساسية وشرحها في لغة الاسمبلي وتطبيقها بإستخدام المحرر

    هذه مجموعة من كودات البرمجة الاساسية المستخدمة في لغة أسمبلي و بالرغم من أن الجميع يعتقد أن لغة الأسمبيلي هي لغة قديمة و لا إحتياج لها يدرك جميع المحترفين و الخبراء في علم الحاسوب و البرمجة و الألة بأن هذه اللغة هي الأساس و القلب النابض لما يعرف بالحاسوب حيث أنها تعتبر اللغة الاقرب للغة الألة و هي اللغة التي تبنى عليها المترجمات الخاصة بلغات البرمجة الاخرى .

     

    جدول  ASCII



     : كود مرحبا بالعالم


    .model tiny
    .code
    org 100h

    main proc near

    mov ah,09h
    mov dx,offset message
    int 21h

    mov ah,4ch
    mov al,00
    int 21h

    endp
    message db “Hello World $”

    end mai



    كود اعادة طباعة حرف مدخل


    .data

    .code

    mov ah, 1h
    int 21h

    mov dl, al
    mov ah, 2h
    int 21h

    end



    كود عرض رقم 2 عن طريق اضافة ما يقابله من جدول  ASCII

    حيث ان الرمز المقابل ل 50 هو رقم 2


    .model small

    .data

    .code

    main proc

    mov dl, 50

    mov ah, 2h

    int 21h

    endp

    end main



    كود جمع رقمين فى  Hex و عرض الرمز المقابل له


    .model small
    .data
    .code
    main proc
    mov dl, 2h
    add dl, 30h
    mov ah, 2h

    int 21h

    endp

    end main



    كود عرض ناتج جمع رقمين


    .model small

    .data

    .code

    main proc

    mov dl, 2

    mov dl ,2

    add dl, 48

    mov ah, 2h

    int 21h

    endp

    end main



    كود عرض ناتج عمليى طرح


    .model small

    .data

    .code

    main proc

    mov dl, 2

    sub dl ,1

    add dl, 48

    mov ah, 2h

    int 21h

    endp

    end main



    تعريف متغير و اعطاءه قيمة


    .model small

    .data

    count1 db 2 ; المتغير
    .code

    main proc

    mov dl, count1

    add dl, 48

    mov ah, 2h

    int 21h

    endp

    end main



    كيفية تخزين قسمة اقل الى مسجل ذو قيمة اكبر


    .model small

    .data

    var1 db 1 ;
    .code

    main proc

    mov ax, 0

    add al, var1

    endp

    end main



    زيادة تلقائية بمعدل 1


    .model small
    .data
    .code
    main proc
    mov dl, 3

    inc dl ; الزيادة

    add dl, 48
    mov ah, 2h

    int 21h

    endp

    end main

    انقاص تلقئى للقيمة بمعدل 1


    .model small
    .data
    .code
    main proc
    mov dl, 3

    dec dl ; الانقاص يحدث هنا

    add dl, 48
    mov ah, 2h

    int 21h

    endp

    end main



    مثال على القفز الى نقطة


    .model small
    .data
    .code
    main proc

    top: ;نقطة العودة
    mov dl, 5 ; ادخل الى المسجل

    add dl, 48 ; اضافة الى المسجل

    mov ah, 2h ; طباعة على اشاشة

    int 21h ;

    jmp top ; التوجيه الى نقطة العودة

    endp

    end main



    كود جملة دوارة مع التحكم فى عدد المرات


    .model small
    .data
    .code
    main proc

    mov cx, 5 ; عدد المرات الذى سيفذها الدوران هى خمس مرات

    top:
    mov dl, 6

    add dl, 48

    mov ah, 2h

    int 21h

    loop top ; الدوران و العودة الى top

    endp



    مثال على الجمل الدوارة المركبة


    .model small
    .data

    .code

    main proc

    mov cx, 5 ; تحديد عدد مرات الدوران

    lop1: ; نقطة بدء الدوران الاول
    mov dl, 6

    add dl, 48

    mov ah, 2h

    int 21h

    lop2: ; نقطة بدء الدوران الثانى

    mov dl, 7

    add dl, 48

    mov ah, 2h

    int 21h

    loop lop2 ; الذهاب الى الدوران الثانى

    mov cx, 5 ; اعادة تحديد عدد الدوران

    loop lop1 ; الذهاب الى الدوران الاول

    endp

    end main



    مثال على Push & pop وظيفة Pop هى الحصول على اخر قيمة تم ادخالها بطريق Push


    .model small
    .data
    .code
    main proc

    mov ax, 1
    push ax

    pop cx

    mov ah, 2h

    int 21h

    endp

    end main



    مثال على popf & pushf


    .model small
    .data

    Veribl dw “Hello”
    .code
    main proc

    pushf

    pop Veribl
    push Veribl
    popf

    mov ah, 2h

    int 21h

    endp

    end main


    انشاء اجراء و استدعاؤه


    .model small
    .data

    .code

    main proc

    call myproc

    endp

    myproc proc
    mov dl, 5

    add dl, 48

    mov ah, 2h
    int 21h

    ret

    myproc endp

    end main



    مثال على And


    .model small
    .data

    .code

    main proc

    mov ah, 00000101b
    mov bh, 00000001b

    and ah, bh

    endp

    end main


    مثال على Or


    .model small
    .data

    .code

    main proc

    mov ah, 00000100b
    mov bh, 00000011b

    or ah, bh

    endp

    end main


    مثال على Xor


    .model small
    .data

    .code

    main proc

    mov ah, 11111111b
    mov bh, 11111110b

    xor ah, bh

    endp

    end main


    مثال على not


    .model small
    .data

    .code

    main proc

    mov ah, 01111110b
    not ah

    endp

    end main

    مثال على test


    .model small
    .data

    .code

    main proc

    mov ah, 01111110b
    test ah, 01111110b

    endp

    end main


    مثال على المقارنة بين قيمتن ايهما اكبر و معرفة النتيجة من خلال Flag ZF , CF


    .model small
    .data

    .code
    main proc
    mov ax, 5
    cmp ax, 5
    Endp


    القفز المشروط

    المعنى

    الكلمة المختزلة

    القفز إذا كان CF = 1

    JC

    القفز إذا كان CF = 0

    JNC

    القفز إذا كان OF = 1

    JO

    القفز إذا كان OF = 0

    JNO

    القفز إذا كان SF = 1

    JS

    القفز إذا كان SF = 0

    JNS

    القفز إذا كان CX = 0000

    JCXZ

    القفز في حالة التساوي/أو إذا كان الناتج يساوي الصفر

    JE/JZ

    القفز إذا كان أكبر أو يساوي/القفز إذا لم يكن أصغر

    JGE/JNL

    القفز إذا كان فوق/القفز إذا لم يكن تحت أو يساوي

    JA/JNBE

    القفز إذا كان فوق أو يساوي/القفز إذا لم يكن تحت

    JAE/JNB

    القفز إذا كان تحت/القفز إذا لم يكن فوق أو يساوي

    JB/JNAE

    القفز إذا كان تحت أو يساوي/القفز إذا لم يكن فوق

    JBE/JNA

    القفز إذا كان أكبر/القفز إذا لم يكن أصغر أو يساوي

    JG/JNLE

    القفز إذا كان أصغر أو يساوي/القفز إذا لم يكن أكبر

    JLE/JNG

    القفز إذا لم يكن يساوي/القفز إذا كان الناتج يساوي قيمة غير صفرية

    JNE/JNZ

    القفز إذا كانت خانة Parity غير موجودة/القفز إذا كان PF = 0

    JNB/JBO

    القفز في حالة وجود خانة Parity/القفز إذا كان PF = 1

    JP/JPE

     


    مثال على القفز فى حالة اذا كان Flag = fz عند المقارنة


    .model small
    .data

    .code

    main proc

    mov ax, 5

    cmp ax, 5

    jz lp1

    mov bx, 1

    lp1:

    mov bx, 6

    Endp

    end main



    مثال على القفز فى حالة التساوى Je


    .model small
    .data

    .code

    main proc

    mov ax, 100

    cmp ax, 100

    je lp1

    mov bx, 1

    lp1:

    mov bx, 6

    Endp

    end main



    مثال على القفز jcxz


    .model small
    .data

    .code

    main proc

    mov cx, 1
    mov ax, 1

    sub cx, ax

    jcxz lp1

    mov bx, 1

    lp1:

    mov bx, 6

    Endp

    end main



    مثال على القفز Ja


    .model small
    .data

    .code

    main proc

    mov ax, 11
    mov bx, 12

    cmp bx, ax

    ja lp1

    mov bx, 1

    lp1:

    mov bx, 6

    Endp

    end main



    LOOPZ / LOOPE القفز إلى الحجرة المعرَّفة بواسطة اللافتة القصيرة إذا كان  CX لا يساوى الصفر


    مثال

    .model small
    .data

    .code

    main proc

    mov cx, 5
    mov bx, 5

    lop:

    mov dl, 6
    add dl, 48

    mov ah, 2h

    int 21h

    cmp bx, 5
    loopz lop

    Endp

    end main


    SAL/SHL : إزاحة رياضية/إزاحة منطقية و كلاهما نحو اليسار


     

    مثال

     

    .model small

    .data 

     

     

     

    .code 

     

     

      main proc

             

       mov ax, 1

       shl ax, 1

      

       

     

       

      Endp

     

      end main



    SAR/SHR : إزاحة رياضية/إزاحة منطقية و كلاهما نحو اليمين


    مثال

    .model small
    .data

    .code

    main proc

    mov ax, 1
    shr ax, 2

    Endp

    end main



    MUL : ضرب بدن إشارة , DIV : تقسيم بدون إشارة


    .model small
    .data

    .code
    main proc
    mov al, 5h
    mov bl, 2h
    mul bl
    Endp

    end main



    مثال على Div


    .model small

    .data

    .code

    main proc

    mov ax, 0080h
    mov bl, 2

    div bl

    Endp

    end main



    مثال بسيط على الرسم


    name “vga”

    ; this program draws a tiny rectangle in vga mode.

    org 100h

    jmp code

    ; dimensions of the rectangle:
    ; width: 10 pixels
    ; height: 5 pixels

    w equ 10
    h equ 5

    ; set video mode 13h – 320×200

    code: mov ah, 0
    mov al, 13h
    int 10h

    ; draw upper line:

    mov cx, 100+w ; column
    mov dx, 20 ; row
    mov al, 15 ; white
    u1: mov ah, 0ch ; put pixel
    int 10h

    dec cx
    cmp cx, 100
    jae u1

    ; draw bottom line:

    mov cx, 100+w ; column
    mov dx, 20+h ; row
    mov al, 15 ; white
    u2: mov ah, 0ch ; put pixel
    int 10h

    dec cx
    cmp cx, 100
    ja u2

    ; draw left line:

    mov cx, 100 ; column
    mov dx, 20+h ; row
    mov al, 15 ; white
    u3: mov ah, 0ch ; put pixel
    int 10h

    dec dx
    cmp dx, 20
    ja u3

    ; draw right line:

    mov cx, 100+w ; column
    mov dx, 20+h ; row
    mov al, 15 ; white
    u4: mov ah, 0ch ; put pixel
    int 10h

    dec dx
    cmp dx, 20
    ja u4

    ; pause the screen for dos compatibility:

    ;wait for keypress
    mov ah,00
    int 16h

    ; return to text mode:
    mov ah,00
    mov al,03 ;text mode 3
    int 10h

    ret


    مرحبا بالعالم بكود اصغر


    org 100h

     

    jmp start

     

    msg:    db      “Hello, World!”, 0Dh,0Ah, 24h

     

    start:  mov     dx, msg

            mov     ah, 09h

            int     21h

           

            mov     ah, 0

            int     16h

    ret


    I am text block. Click edit button to change this text. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut elit tellus, luctus nec ullamcorper mattis, pulvinar dapibus leo.

    [recent_posts style=”title_only” category=”tip” columns=”1″ order=”DESC” orderby=”rand” posts_per_page=”5″]

    [recent_posts style=”title_only” category=”line” columns=”4″ order=”DESC” orderby=”rand” posts_per_page=”8″]
زر الذهاب إلى الأعلى
إغلاق

أنت تستخدم إضافة Adblock

يرجى تعطيل مانع الإعلانات حيث أن موقعنا غير مزعج ولا بأس من عرض الأعلانات لك فهي تعتبر كمصدر دخل لنا و دعم مقدم منك لنا لنستمر في تقديم المحتوى المناسب و المفيد لك فلا تبخل بدعمنا عزيزي الزائر