برنامه های اسمبلی 8086
زبان برنامه : اسمبلی
توضیحات برنامه : توسط این برنامه شما می توانید از کاربر یک عدد n رقمی صحیح علامت دار دریافت نمایید و مغلوب آن را چاپ نمایید به طور مثال :
عدد دریافتی : 125- خروجی برنامه : 521-
سورس برنامه :
| کد: |
| sseg segment dw 50 dup(?) sseg ends dseg segment s dw ? dseg ends cseg segment assume cs:cseg,ss:sseg,ds:dseg getch proc mov ah,0 int 16h ret getch endp putch proc push bx mov bh,0 mov bl,0fh mov ah,0eh int 10h pop bx ret putch endp start:mov cx,0 call getch cmp al,'+' jne manfi mov s,0 jmp get manfi:mov s,1 get:call putch lp1:call getch cmp al,13 je chap push ax inc cx call putch jmp lp1 chap:mov al,' ' call putch mov dx,s cmp dx,0 jne man mov al,'+' call putch jmp lp2 man:mov al,'-' call putch lp2:pop ax call putch dec cx jz end jmp lp2 end:mov ah,4ch int 21h cseg ends end start |
lبا توجه به مقدار متغییر s متوجه می شویم که عددی که وارد شده است منفی است یا مثبت که 0 نشانگر عدد مثبت و 1 عدد منفی می باشد.
که ابتدا ما تک تک رقم ها را دریافت کرده و آنها را داخل یک پشته میریزیم و موچاپ تک تک رقم ها را از پشته خارج کرده و به ترتیب چاپ می کنیم برنامه بسیار ساده ای هستش
++++++++++++++++++++++++++
مشخصات برنامه :
نام برنامه : بدست آوردن ب.م.م و ک.م.م
زبان برنامه : اسمبلی
سورس برنامه :
| کد: |
seg1 segment a dw 20 b dw 15 zarb dw ? bmm dw ? kmm dw ? seg1 ends seg2 segment assume cs:seg2,dc:seg1 L:mov ax,seg1 mov ds,ax mov ax,a mov bx,b mul bx mov zarb,ax f2:mov dx,0 mov ax,a mov bx,b div bx cmp dx,0 je f1 mov a,bx mov b,dx jmp f2 f1:mov bmm,bx mov ax,zarb div bmm mov kmm,ax mov ah,4ch int 21h seg2 ends end L |
این برنامه ب.م.م و ک.م.م دو عدد 15 و 20 رو که توی متغییر های a و b ذخیره شده اند بدست می اورد ( که مقدار این دو متغییر رو شما می توانید در اول برنامه تغییر دهید)
شیوه کار این بر نامه به این صورت هستش که اول دو عدد را در یکدیگر ضرب کرده و نتیجه رو در متغییر zarb ذخیره میکنه و سپس دو عدد اولیه را بر هم تقسیم متوالی می کنه تا باقی مانده 0 شود در این که در این صورت اخرین خارج قسمت ما که داخل شط قرار دارد ب.م.م می باشد و ما آن را داخل متغییر bmm قرار می دهیم و حال از تقسیم حاصل ضرب دو عدد اولیه ( که در متغییر zarb قرار دارند ) بر ب.م.م ، ک.م.م اعداد ما حاصل می شود که ما آن را داخل متغییر kmm ذخیره می کنیم .
در انتها ب.م.م و ک.م.م به ترتیب داخل متغیر های bmm و kmm در برنامه ذخیره شده اند.
+++++++++++++++++++++++
نام برنامه : محاسبه میانگین و ماکزیمم و مینیمم
زبان برنامه : اسمبلی
سورس برنامه :
| کد: |
seg1 segment a dw 3 b dw 5 c dw 4 min dw ? max dw ? sum dw 0 avg dw 0 seg1 ends seg2 segment Assume CS:seg2,DS:seg1 L:mov ax,seg1 mov ds,ax ;shoroe jam shodan adad ba ham mov ax,a add ax,b add ax,c ; be dast avardane miyangin mov sum,ax mov bx,3 div bx mov avg,ax ;shoro mogayese barae taine min va max mov ax,a cmp ax,b ja f1 mov ax,b mov max,ax mov cx,a mov min,cx cmp ax,c ja f3 mov bx,c mov max,bx mov dx,sum mov ax,avg jmp end f1:mov max,ax mov bx,b mov min,bx mov cx,sum mov dx,avg cmp ax,c ja f2 mov cx,c mov max,cx mov ax,sum mov dx,avg jmp end f2:cmp c,bx ja end mov cx,c mov min,cx mov bx,avg mov dx,sum jmp end f3:mov dx,avg mov bx,c cmp bx,min mov bx,sum ja end mov min,bx mov cx,sum mov dx,avg jmp end end:mov ah,4ch int 21h seg2 ends end L |
در این برنامه متغییر های a و b و c 3متغییری هستند که اعدادی را که ذخیره کردن میانگین و ماکزیمم و مینیمم آنها محاسبه می شوند که مقدار آنها را می توان به دلخواه هر عددی انتخاب کرد .
که در این برنامه ابتدا 3 عدد را با هم جمع می کنیم و داخل متغییر sum ذخیره می کنیم و سپس تقسیم بر 3 کرده و میانگین این اعداد را داخل avg قرار می دهیم و بعد 3 عدد را برای تعیین ماکزیمم و مینیمم با یکدیگر مقایسه می کنیم .
+++++++++++++++++++++++++++++++
مشخصات برنامه :
نام برنامه : چاپ یک کارکتر در کل صفحه
زبان برنامه : اسمبلی
سورس برنامه :
| کد: |
chap segment assume cs:chap start:mov ah,0 int 16h cmp ah,1 je exit mov bh,0 mov bl,25h mov cx,2000 mov ah,0ah int 10h jmp start exit:mov ah,4ch int 21h chap ends |
در این برنامه ما با استفاده از وقفه 16h و تابع شماره 0 آن یک کاراکتر از کاربر در یافت کرده و کد اسکی ان را داخل al قرار می دهیم و سپس این کاراکتر رو با کد اسکی 1 که برای کلید enter هستش مقایسه می کنیم اگه برابر بودش از برناکمه خارج می شیم در غیر این صورت کل صفحه را با این کاراکتر پر می کنیم یعنی کاراکتر را در کل صفحه چاپ می کنیم .
یکسری متغییر های خواس در این برنامه :
1- bh : که شماره صفحه ای را که قرار کاراکتر در ان چاپ شود مشخص می کنه که می توانداز اعداد 0 ، 1 ،2 ، 3 و ... 7 را شامل بشه
2- bl : کد رنکی را که قرار کاراکتر با ان رنگ چاپ بشود مشخص می کند
3- cx : تعداد دفعاتی که قرار کاراکتر چاپ بشود را مشخص می کند ( در اینجا طبق پیش فرض فرض شده است که هر صفحه شاما 2000 کاراکتر می باشد )
و در اخر سر هم با وقفه شماره 10h و تابع شماره 0ah ان شروع به چاپ کاراکتر در صفحه می کنیم
++++++++++++++++
مشخصات برنامه :
نام برنامه : محاسبه تعداد ارقام یک عدد n رقمی
زبان برنامه : اسمبلی
سورس برنامه :
| کد: |
seg1 segment n dw 65535 x dw ? seg1 ends seg2 segment assume CS:seg2,DS:seg1 L:mov ax,seg1 mov ds,ax mov CX,0 mov BX,10 mov ax,n Q:mov dx,0 DIV BX inc CX CMP ax,0 JNE Q mov x,cx mov ah,4ch int 21h seg2 ends end L |
هر عددی را که می خواهیم می توانیم داخل متغییر n که در اول برنامه تعریف کردیم قرار دهیم کار این برنامه به این صورت هستش که عددمون رو تقسیم بر 10 می کنیم و تا زمانی که خارج قسمتمون برابر 0 نشده این کار رو تکرار می کنیم .
متغییر های برنامه :
1- cx : که شمارنده تعداد ارقام عدد ما می باشد و در اول برنامه مقدار آن را برابر 0 قرار می دهیم
2- bx : مقدار این متغییر را برابر 10 قرار می دهیم تا عددمان را بر آن تقسیم کنیم
ابتدا cx را برابر 0 و bx را برابر 10 قرار می دهیم و عددمان را نیز داخل شط و حال ax را تا زمانی که خارج قسمتمان برابر 0 نشده تقسیم بر 10 می کنیم و وقتی برابر 0 شد قدار cx را در x قرار می دهیم که نشان دهنده تعداد ارقام عدد ما می باشد.
+++++++++++++++++++
وبلاگ تخصصی مسلم