مجموعة من كودات البرمجة الاساسية المستخدمة في لغة أسمبلي و بالرغم من أن الجميع يعتقد أن لغة الأسمبيلي هي لغة قديمة و لا إحتياج لها يدرك جميع المحترفين و الخبراء في علم الحاسوب و البرمجة و الألة بأن هذه اللغة هي الأساس و القلب النابض لما يعرف بالحاسوب حيث أنها تعتبر اللغة الاقرب للغة الألة و هي اللغة التي تبنى عليها المترجمات الخاصة بلغات البرمجة الاخرى .
جدول 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