PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : برنامه هایی به زبان ماشین



Admin
7th June 2010, 12:11 AM
سلام دوستان ...
از این به بعد من در این بخش برنامه هایی به زبان اسمبلی به عنوان تمرین برای دانشجویان كامپیوتر قرار می دم.
امیدوارم مفید واقع بشه ...

ضمنآ اگه شما هم برنامه ای دارید در این بخش ارائه بدید.

موفق باشید

Admin
7th June 2010, 12:12 AM
برنامه ای كه حروف A تا Z را در دو فایل مجزا قرار داده و دو فایل masm.asm و procs.asm را به هم link کرده که در فایل main برنامه ی مربوط به main برنامه و در فایل procs برنامه ی proc ها قرار می گیرد.

برنامه:

برنامه ی main:


extern pushchar:far,showchar:far
cds segment
assume cs:cds
main proc far
call pushchar
call showchar

mov ah,4ch
int 21h
ret
main endp
cds ends
end main
برنامه ی proc:

public pushchar,showchar

stk segment
dw 32 dup(?)
stk ends
cds segment
assume ss:stk,cs:cds
pushchar proc far
mov bp,sp
mov al,'B'
mov ah,'A'
L1:push ax
cmp al,'Z'
add ax,02h
jne L1
push cx
push dx
ret
pushchar endp
showchar proc far
mov dl,[bp]
L2:mov ah,02h
int 21h
cmp dl,'Z'
dec bp
jne L2
ret
mov ah,4ch
int 21h
showchar endp
cds ends
end

Admin
7th June 2010, 12:13 AM
برنامه اي كه يك string را چاپ كند ( براي چاپ String ميتوان از تابع 0A استفاده كرد اما در اينجا منظور يادگيري چاپ string با استفاده از يك حلقه است)


stk segment para 'stack'

DW 32 dup(?)

stk ends

dts segment para 'sata'

ronaldo db 'this is my second program'

dts ends

cds segment para 'code'

ASSUME SS:STK,CS:CDS,DS: DTS

main proc far

mov ax,seg dts
mov ds,ax
MOV CX,25

mov ah,02
mov bx,offset ronaldo

li:mov dl,[bx]

int 21h
inc bx

loop li

mov ah,4ch
int 21h
ret
main endp
cds ends
end main

Admin
7th June 2010, 12:13 AM
همون برنامه قبلي با استفاده از proc


stk segment para 'stack'

DW 32 dup(?)

stk ends

dts segment para 'sata'

str db 'this is my second program'

dts ends

procs segment
assume cs:procs

print proc far

MOV CX,25

mov ah,02
mov bx,offset str

li:mov dl,[bx]

int 21h
inc bx

loop li

mov ah,4ch
int 21h


print endp
procs ends
cds segment para 'code'

assume ss:stk,cs:cds,ds: dts

main proc far
mov ax,seg dts
mov ds,ax
call print
mov ah,4ch
int 21h
ret
main endp
cds ends
end main

Admin
7th June 2010, 12:14 AM
برنامه اي كه با فشردن يك كليد از كيبورد آنرا دريافت كرده و بدون Echo ( بدون نمايش دادن روي مانيتور ) ذخيره كند سپس آنرا با تابع 02 نمايش دهد.


stk segment

DW 32 dup(?)

stk ends

dts segment

str1 db 'Push a key please: '
str2 db ' is pushed key '

dts ends

cds segment

assume cs:cds,ds: dts,ss:stk

main proc far
mov ax,seg dts
mov ds,ax


mov cx,20
mov ah,02
mov bx,offset str1

li:
mov dl,[bx]
int 21h
inc bx

loop li



mov ah,08
int 21h

mov dl,al
mov ah,02
int 21h
mov cx,16
mov ah,02
mov bx,offset str2
l:
mov dl,[bx]
int 21h
inc bx

loop l

mov ah,4ch
int 21h

main endp
cds ends
end main

Admin
7th June 2010, 12:14 AM
برنامه اي براي انتقال يك رشته از source به destination كه هر دوي آنها در Data Segment قرار دارند


procs segment
assume cs:procs
strcpy proc far
mov bp,sp
mov si,[bp+4]
mov di,[bp+6]
cld
While1: cmp byte ptr[si],0
jz endWhile
movsb
jmp While1
endWhile: mov byte ptr[di],0
ret
strcpy endp
procs ends


stk segment
dw 32dup(?)
stk ends
dts segment
str db "this is a test",0
des db 15 dup(?)
dts ends
cds segment
assume cs:cds,ss:stk,ds: dts
main proc far
mov ax, seg dts
mov ds,ax
mov es,ax
mov ax,offset des
push ax
mov ax,offset str
push ax
call strcpy
mov al,4ch
int 21h
ret
main endp
cds ends
end main

Admin
7th June 2010, 12:15 AM
برنامه ی add2 برای قرار دادن دو عدد و جمع آن دو در یک stack ...

برنامه:


stk segment
dw 32 dup(?)
stk ends
dts segment
flda dw 250
fldb dw 128
fldc dw ?
dts ends
cds segment
assume ss:stk,ds:dts,cs:cds
main proc far
mov ax,dts
mov ds,ax
mov ax,flda
push ax
mov ax,fldb
push ax
call add2
ret
main endp
cds ends
procs segment
assume cs:procs
add2 proc far
mov bp,sp
mov ax,[bp+2]
add ax,[bp+4]
mov fldc,ax
mov ah,4ch
int 21h
ret
add2 endp
procs ends
end

Admin
7th June 2010, 12:15 AM
برنامه ی add2 فقط در دو فایل جدا از هم که به هم link باید بشه ...

برنامه main:


extern add2:far

stk segment
dw 64 dup(?)
stk ends

dts segment
flda dw 250
fldb dw 125
fldc dw ?
dts ends

cds segment
assume cs:cds,ss:stk,ds:dts
main proc far
mov ax,seg dts
mov ds,ax
mov ax,flda
push ax
mov ax,fldb
push ax
call add2
mov ah,4ch
int 21h
ret
main endp
cds ends
end main

برنامه procs: (متن برنامه ی add2)


public add2
extern flda:word,fldb:word,fldc:word
procs segment
assume cs:procs
add2 proc far
mov bp,sp
mov ax,[bp+2]
add ax,[bp+4]
mov fldc,ax
ret
add2 endp
procs ends

Admin
7th June 2010, 12:16 AM
برنامه ی نمایش 256 كاراكتر اصلی ...


page 60,132
title show 256 character
stseg segment stack
dw 32 dup(?)
stseg ends
;-----------------------
cdseg segment
main proc far
assume cs:cdseg,ss:stseg
mov dl,0h
mov ah,02h
l1: int 21h
inc dl
cmp dl,255
jne l1
mov ah,4ch
int 21h
main endp
cdseg ends
end main

Admin
7th June 2010, 12:18 AM
برنامه ای كه 80 كاراكتر را از ورودی بگیرد و حروف اول آنها اگر كوچك بودند به حرف بزرگ تبدیل كند و نمایش بدهد.


stk segment
dw 64 dup(?)
stk ends
dts segment
max db 81
len db ?
str db 80 dup(?)
dts ends
cds segment
assume ss:stk,ds:dts,cs:cds
main proc far
mov ax,seg dts
mov ds,ax
mov es,ax
mov ah,0Ah
mov dx,offset max
int 21h
mov cl,len
mov ch,0
mov di,offset str
mov al,' '
cld
jmp chk

next:repne scasb
jcxz finish

chk:cmp byte ptr [di],'a'

jb next
cmp byte ptr [di],'z'
ja next
sub byte ptr [di],20h
jmp next

finish: mov byte ptr [di],'$'
mov ah,09
mov dx,offset str
int 21h
mov ah,4ch
int 21h
ret
main endp
cds ends
end main

Admin
7th June 2010, 12:18 AM
برنامه اي كه تعداد كاراكتر a را شمارش كند و با ايجاد يك پيغام مناسب بروي مانيتور نمايش دهد.


stk segment
dw 32 dup(?)
stk ends

dts segment

max db 81
len db ?
str db 80 dup(?)

dts ends

procs segment
assume cs:procs,ds:dts

prnt proc far
mov ax,bx
mov bl,10
div bl
add al,30h
add ah,30h
mov bl,ah
mov ah,02h
mov dl,al ;
int 21h
mov dl,bl ;
int 21h
ret
prnt endp
procs ends

cds segment
assume cs:cds,ds:dts,ss:stk

main proc far
mov ax, seg dts
mov ds,ax
mov es,ax
mov ah,0Ah
mov dx,offset max
int 21h
mov bx,offset str
add bl,len
mov byte ptr[bx],'$'
inc len
mov cl,len
mov ch,0

mov di,offset str
mov al,'a'
cld
mov bl,0

li : repne scasb
jcxz exit
inc bl
jmp li

exit :
mov al,bl
mov ah,0

call prnt

mov ah,4ch
int 21h
ret
main endp
cds ends
end main

Admin
7th June 2010, 12:19 AM
برنامه ای با استفاده از ماكرو كاراكتر های A و B را نمایش می دهد.


mputchar macro char
push ax
push dx
mov ah,02
mov dl,char
int 21h
pop dx
pop ax
endm
mexit macro
mov ah,4ch
int 21h
endm
stk segment
dw 32 dup(?)
stk ends
cds segment
assume ss:stk,cs:cds
main proc far
mputchar 'A'
mputchar 'B'
mexit
ret
main endp
cds ends
end main

Admin
7th June 2010, 12:20 AM
برنامه اي كه با تابع 2c ساعت سيستم را خوانده و در يك رشته نمايش ميدهد .


stk segment
dw 32 dup(?)
stk ends
dts segment
time db 'hh:mm$'
dts ends
cds segment
assume cs:cds,ds:dts,ss:stk
tabdil proc near
xor ah,ah
mov bl,10
xor bh,bh
div bl
or al,30h
mov byte ptr[di],al
or ah,30h
mov byte ptr[di+1],ah
ret
tabdil endp

main proc far
mov ax,seg dts
mov ds,ax
mov es,ax
mov ah,2ch
int 21h
mov al,ch
mov di,offset time
call tabdil
mov al,cl
add di,3
call tabdil
mov ah,09h
mov dx,offset time
int 21h
mov ah,4ch
int 21h
ret
main endp
cds ends
end main

Admin
7th June 2010, 12:23 AM
برانامه اي كه تعداد كاراكتر هاي a , A را در متن دريافتي شمارش كرده و مجموع آنرا چاپ ميكند .



stk segment
dw 32 dup(?)
stk ends

dts segment
max db 81
len db ?
str db 80 dup(?),'$'
txt db 0dh,0ah,'number of a`s and A`s are = ','$'
dts ends

procs segment
assume cs:procs,ds:dts
itoa proc far
mov di,offset txt
add di,001eh
mov ax,bx
xor bx,bx
mov bl,10
div bl
or al,30h
mov byte ptr[di],al
or ah,30h
mov byte ptr[di+1],ah
ret
itoa endp
procs ends

cds segment
assume cs:cds,ds:dts,ss:stk
main proc far
mov ax,seg dts
mov ds,ax
mov es,ax
mov ah,0Ah
mov dx,offset max
int 21h
mov di,offset str
xor bx,bx
mov cl,len
mov ch,0
mov al,'a'
li1 :
repne scasb
jnz arezoo
inc bx
jmp li1
arezoo :
mov di,offset str
mov cl,len
mov ch,0
mov al,'A'
li2 :
repne scasb
jnz finish
inc bx
jmp li2
finish :
call itoa
mov ah,09
mov dx,offset txt
int 21h
mov ah,4ch
int 21h
ret
main endp
cds ends
end main

Admin
7th June 2010, 12:23 AM
اینم یه برنامه ی جدید نوشته شده توسط خودم ...!!

برنامه ای كه ماشین زیر را شبیه سازی می كنه ...!

aSb <--- S

یعنی فقط رشته های مانند رشته ی زیر رو قبول می کنه و رشته های دیگه رو قبول نکرده و پیغام نادرست رو به کاربر می ده.

ab یا aabb یا aaaabbbb و ...

به هز تعداد که کاربر بخواد.


stk segment
dw 128 dup(?)
stk ends
dts segment
max db 251
len db ?
str db 252 dup(?)
alert1 db 'enter string to compare (only a and b char)','$'
falert db 'false','$'
falert2 db 'True','$'
dts ends
cds segment
assume cs:cds,ss:stk,ds:dts
main proc far
mov ax,seg dts
mov ds,ax
mov es,ax
mov dx,offset alert1
mov ah,09h
int 21h
mov dx,offset max
mov ah,0ah
int 21h
;--------------------------------------------------------------
mov di,offset str
mov cl,len
xor ch,ch
cld
mov al,'a'
mov bl,0
sho1: repne scasb
inc bl
jcxz data1
jmp sho1
;--------------------------------------------------------------
data1:
mov al,'b'
mov dl,bl
mov di,offset str
mov cl,len
xor ch,ch
mov bl,0
;--------------------------------------------------------------
sho2:repne scasb
inc bl
jcxz data2
jmp sho2
;--------------------------------------------------------------

data2:
mov cl,dl
xor ch,ch
cmp cl,bl
je data3

data3:
mov cl,bl
mov di,offset str
nextp: cmp byte ptr [di],'a'

jne finish1

inc di
loop nextp
mov cl,bl
nextpp: cmp byte ptr [di],'b'

jne finish1
inc di
loop nextpp
jmp finish2

finish1: mov ah,09h
mov dx,offset falert
int 21h
jmp endf

finish2: mov ah,09h
mov dx,offset falert2
int 21h

endf: mov ah,4ch
int 21h
ret
main endp
cds ends
end main

استفاده از تمامی مطالب سایت تنها با ذکر منبع آن به نام سایت علمی نخبگان جوان و ذکر آدرس سایت مجاز است

استفاده از نام و برند نخبگان جوان به هر نحو توسط سایر سایت ها ممنوع بوده و پیگرد قانونی دارد