Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ; a program to demonstrate creating a file and then reading from
- ; it
- .model small
- .stack
- EXTRA_SEG SEGMENT PARA 'EXTRA'
- StartOFile1 dw ?
- EXTRA_SEG ENDS
- .data
- pkey db "press any key...$"
- errornotfound db "Ops! This Word, Isn't Here!!! Please Try Again.",0ah,0dh,"$"
- SAVE_CNT dw ?
- START_ADDR dw ?
- findword db "<>Dear User! What Word, Do You Want To count It? ","$"
- askDirectory DB "enter directory of file :",0ah,0dh,"$"
- str DB "=" , '$'
- Handle DW ? ; to store file handle
- fileDirectory db 400 dup(?)
- temp dw ?
- enter db "",0ah,0dh,"$"
- plus dw 0
- FileName DB "File.txt",0 ; file to be opened
- OpenError DB "An error has occured(opening)!$"
- ReadError DB "An error has occured(reading)!$"
- tst db "lllllllllllll",0ah,0dh,"$"
- Buffer DB 100 dup (?) ; buffer to store data
- linef db 13,10,"$"
- home db 13,"$"
- lengthword dw ?
- word dw 100 dup(?)
- checkendsentence db ?
- checkendword db ?
- lengthremainsentence dw ?
- lengthremain dw ?
- remainsentence db 20 dup(?)
- lenghtsentence dw 0
- j dw 0
- succes db "found",0ah,0dh,"$"
- tedad db 0
- i db 0
- string dw 300 dup(?)
- .code
- main proc far
- mov ax,@data ; base address of data segment
- mov ds,ax ; put this in ds
- call ask_directory
- lea dx,fileDirectory
- mov al,2 ; access mode - read and write
- mov ah,3Dh ; function 3Dh -open a file
- int 21h ; call DOS service
- mov Handle,ax ; save file handle for later
- jc ErrorOpening ; jump if carry flag set - error!
- mov dx,offset Buffer ; address of buffer in dx
- mov bx,Handle ; handle in bx
- mov cx,100 ; amount of bytes to be read
- mov ah,3Fh ; function 3Fh - read from file
- int 21h ; call dos service
- jc ErrorReading ; jump if carry flag set - error!
- mov bx,Handle ; put file handle in bx
- mov ah,3Eh ; function 3Eh - close a file
- int 21h ; call DOS service
- mov cx,100 ; length of string
- mov si,OFFSET Buffer ; DS:SI - address of string
- xor bh,bh ; video page - 0
- mov ah,0Eh ; function 0Eh - write character
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- mov j,di
- mov di,0;in inja dare kare onieki word ro kharab mikone
- NextChar:
- ;push di
- lodsb ; AL = next character in string
- cmp al,00h ;ghablan '$' bod
- ;jz l9
- jz prc
- ;shayad inja store kardan mikhad
- mov ah,00h
- mov string[di],ax
- inc di
- inc lenghtsentence
- mov dl,al
- mov AH , 02h
- int 21h
- ;inc di
- loop NextChar
- ;call bubble
- prc:
- mov di,j
- mov ah,9
- mov dx, offset enter
- int 21h
- mov ah,9
- mov dx, offset enter
- int 21h
- call ask_word
- ;;be enter berese dg nemikhoneee
- call find_word
- mov ah,9
- mov dx, offset pkey
- int 21h
- ; wait for any key....
- mov ah, 1
- int 21h
- mov ax, 4c00h ; exit to operating system.
- int 21h
- ; li:
- ; mov ah,9
- ; mov dx, offset tst
- ; int 21h
- ; jmp li1
- ;
- ;
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ErrorOpening:
- mov dx,offset OpenError ; display an error
- mov ah,09h ; using function 09h
- int 21h ; call DOS service
- mov ax,4C01h ; end program with an errorlevel =1
- int 21h
- ErrorReading:
- mov dx,offset ReadError ; display an error
- mov ah,09h ; using function 09h
- int 21h ; call DOS service
- l9:
- ;;;;;;;;;;;;;;;;;;;;;
- mov ah,9
- lea dx,linef
- int 21h
- ;;;;;;;;;;;;;;;;;;;;;;
- lea bx,Buffer
- mov di,0
- l1:
- cmp di,75
- jz l2
- mov si,0
- l3:
- cmp si,75
- jz l4
- mov ch,[bx+si+1]
- mov dh,[bx+si]
- cmp dh,ch
- ja l5
- mov [bx+si],ch
- mov [bx+si+1],dh
- l5:
- inc si
- jmp l3
- l4:
- inc di
- jmp l1
- l2:
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- lea bx,Buffer
- mov si,0
- ln1:
- cmp si,75
- ;cmp [bx+si],"$"
- jz ln2
- mov AH , 02h
- mov dl ,[bx+si]
- int 21h
- inc si
- jmp ln1
- ln2:
- ;;;;;;;;;;;;;;;;;;;;;;;;;;
- mov ah,9
- lea dx,linef
- int 21h
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;;;;;;;;;print enter;;;;;;
- lea bx,Buffer
- mov si,0
- mov i,49
- lk1:
- cmp si,75
- ja lk2
- mov ch,[bx+si+1]
- mov dh,[bx+si]
- pusha
- cmp dh,"$"
- jz lk2
- mov dl,dh
- mov AH , 02h
- int 21h
- mov AH , 9
- lea DX , str
- int 21h
- lw3:
- cmp i,";"
- jb lw2
- mov ah,02h
- mov dl,"1"
- int 21h
- sub i,10
- jmp lw3
- lw2:
- mov ah,02h
- mov dl,i
- int 21h
- mov ah,9
- lea dx,home
- int 21h
- popa
- cmp dh,ch
- jz lk5
- pusha
- mov ah,9
- lea dx,linef
- int 21h
- popa
- mov i,48
- lk5:
- inc i
- inc si
- jmp lk1
- lk2:
- ;;;;;;;;;;;;;;;;;;;;;;;;;;
- mov ah,9
- lea dx,linef
- int 21h
- mov ah,9
- lea dx,linef
- int 21h
- mov ah,8
- int 21h
- mov AX , 4c00h
- int 21h
- main endp
- ask_directory proc
- mov ah,9
- lea dx, askDirectory ;jomle baraye gereftane vorodi
- int 21h
- mov si,0
- sent:
- mov ah,1h
- int 21h
- cmp al,0dh ;comper al,enter
- je exit1
- mov fileDirectory[si],al ;string bod ghablan
- inc si
- jmp sent
- exit1:
- mov ah,9
- mov dx, offset enter
- int 21h
- mov ah,9
- mov dx, offset enter
- int 21h
- ret
- endp
- ;--------------------ask word proc------------
- ask_word proc
- mov ah,9
- lea dx, findword
- int 21h
- again:
- mov ah,1h
- mov temp,di
- mov di,0
- mov di,temp
- int 21h
- mov ah,0
- cmp ax,0dh
- je next2
- mov ah,0
- mov word[di],ax
- inc di
- jmp again
- next2:
- dec di
- mov lengthword,di
- mov ah,9
- mov dx, offset enter
- int 21h
- mov ah,9
- mov dx, offset enter
- int 21h
- ret
- endp
- ;---------------------find word proc---------
- find_word proc
- ;
- ; ; mov ax,StartOFile
- ; lea ax , string
- ; mov StartOFile1,ax
- ; mov ax,0000h
- ; ; cnt1:
- ;; add cnt,1
- ;
- ; mov ax, word
- ; LEA DI,StartOFile1
- ; cld
- ; SCASW
- ; ;je cnt1
- ;; jne
- ; ;testesh kardam, inja eshtebah kar mikone
- ; jz li
- ;
- ;
- ;
- ; li1:
- ;
- mov si,0;baraye jomalate file ; bayad andazeye file ro bezaram
- mov di,0;baraye kalameye morede nazar
- doagain:
- ; cmp al,b.word[di]; di bashe ya si???????
- ; jne next_word
- ; ; jmp this_word
- mov ah,0
- mov ax,string[si]
- mov ah,0
- mov ax, word[di]
- ; mov ah,0
- cmp ax, string[si];al bod ghable string dw
- jne nextword
- jmp thisword
- nextword:
- inc si
- call check_end_sentence
- cmp checkendsentence,2ah;ascii code for *
- ;cmp checkendsentence,00h
- je exitthis
- mov ax, string[si];kalameye badi dar file ro mikhone
- mov ah,00h
- cmp ax, 20h ;ascii code for blank(bebine kalame tamom shode ya na)
- jne nextword
- inc si
- call check_end_sentence
- cmp checkendsentence,2ah
- je exitthis
- ;inc si ;ino ezafe kardam ke vaghti be blank resid nare dar doagain blanko ba word moghayese kone
- jmp doagain
- thisword:
- inc si
- call check_end_sentence
- ; cmp checkendsentence,00h
- cmp checkendsentence,2ah
- je exitthis
- inc di
- call check_end_word
- cmp checkendword,2ah
- je found
- mov ah,0
- mov ax, word[di]
- cmp ax, string[si]
- jne againword
- jmp thisword
- againword:
- mov di,0
- jmp nextword
- found:
- mov ah,9
- mov dx, offset enter
- int 21h
- mov ah,9
- mov dx, offset succes
- int 21h
- mov ah,9
- mov dx, offset enter
- int 21h
- inc tedad;badesh tedad ro mirizam to al va print al ro mikhonam:D
- mov di,0
- jmp doagain
- exitthis:
- mov ah,9
- mov dx, offset enter
- int 21h
- mov ah,9
- mov dx, offset enter
- int 21h
- ret
- endp
- ;------Check The Word Is End Or Not.------
- check_end_word proc
- cmp di,lengthword
- jne exit2
- inc si
- mov lengthremainsentence,si
- mov di,0
- ;saveremain:
- ; mov ax,string[si]
- ; mov ah,0
- ; mov remainsentence[di],al
- ; cmp si,lenghtsentence
- ; je savepoint
- ; inc di
- ; inc si
- ; jmp saveremain
- ;
- ;savepoint:
- ; mov lengthremain,di
- ; mov si,lengthremainsentence
- ; mov di,lengthword
- ; inc di
- mov checkendword,2ah
- ; decsi:
- ; dec si
- ; dec di
- ; cmp di,0
- ; jne decsi
- exit2:
- ret
- endp
- ;------Check The Sentence Is End Or Not.------
- check_end_sentence proc
- cmp si,lenghtsentence
- jne end
- mov ah,9
- lea dx,errornotfound
- int 21h
- mov checkendsentence,2ah
- jmp end
- end:
- ret
- endp
- ;==========bubble sort=========
- bubble proc
- push ds
- push cx
- push ax
- push bx
- mov ax,@data
- mov ds,ax
- lea di,buffer; khodam
- mov START_ADDR,di
- mov cx,es:[di]
- ;inja bayad cx be andazeye lengthsentence bashe
- mov save_cnt,cx
- INIT:
- mov bx ,1
- dec SAVE_CNT
- jz STORED
- mov cx,20
- ;mov cx,SAVE_CNT
- mov di,START_ADDR
- NEXT1: add di,2
- mov ax,es:[di]
- cmp es:[di+2],ax
- jae CONT
- xchg es:[di+2],ax
- mov es:[di],ax
- sub bx,bx
- CONT: loop NEXT1
- cmp bx,0
- je INIT
- STORED: mov di,START_ADDR
- pop bx
- pop ax
- pop cx
- pop ds
- ret
- endp
- ;======end of bubble sort========
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement