اكواد أساسية وشرحها

  • 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

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