Новичок
Профиль
Группа: Участник
Сообщений: 2
Регистрация: 10.12.2014
Репутация: нет Всего: нет
|
| Код | ;-------------- Поле стека ------------- stk segment stack 'stack' db 256 dup("?") stk ends ;------------- Поле данных ------------- data segment para public 'data'
buffer db 100,?,101 dup ('$') ; 100 - 1 - это кол-во вводимых символо mas db 49 dup (?) big_buff db 150,148 dup ('$') add_buff db 150 dup ('$')
text db 'Please, enter a string of words',16,'$' text1 db ' words less than ' text2 db 'To continue, enter "1"',13,10,'To exit press enter',13,10,16,0,'$' text3 db 'Reading from the file press 1',13,10,'Inputting from keyboard press "Enter"',16,0,'$' text4 db 'Press',16,13,10,'1 - Inputting in file',13,10,'2 - Processing',13,10,'3 - Read the file','$' text5 db 13,10,'$' text6 db 'Read data',16,13,10,'$' text7 db 13,10,'To continue, Please "Enter"','$' text8 db 'Enter the name of file','$' text9 db 'Enter the name of catalog','$' text10 db '.txt',0
save dw ? exc dw ? item db 30h ;----------- Proc Line text0 db 13,10,'$' ;----------- Proc file bufin_F db 30,28 dup ('$') bufin_C db 30,28 dup ('$') handle dw ? filename db 'File\0\String.txt',0 catalog_n db 'File\0',0 F_name db 'File\0\Result.txt',0 ;----------- Proc StrCon Num dw ? ; Num:=? Поле в 1 байт StrNum db 5 dup (?),'$' ; Хранение результата перевода counter dw ? ;----------- Proc Input buff db 5,6 Dup(?)
data ends ;----------- Текст программы ----------- code segment para public 'code'
assume cs:code, ds:data, es:data, ss:stk ;________________ START ________________ start: mov ax,data mov ds,ax mov ax,ds mov es,ax ;------------- BASIC PROG -------------- cld ; Рухаємося в прямому напрямку lea si,catalog_n ; Адресу вихідного lea di,bufin_C + 2 ; Адресу рядка призначення mov cx,28 ; CX використовуємо в префіксі REP rep movs catalog_n,bufin_C
lea si,filename lea di,bufin_F + 2 mov cx,28 rep movs filename,bufin_F jmp c3
b7: mov di,2 clean1: mov buffer[di],'$' inc di cmp di,99 jne clean1
mov di,2 clean2: mov big_buff[di],'$' inc di cmp di,150 jne clean2
c3: xor ax,ax xor bx,bx xor cx,cx mov counter,0 mov save,0 mov Num,0 mov exc,0
mov ax,03 ;функция очистки экрана int 10h xor ax,ax ;_________ MENU I lea dx,text4 call WrStr call Line call Input cmp ax,1 je i1 cmp ax,2 je m1 cmp ax,3 je r1
;--------- Inputting in file i1: mov ax,03 ;функция очистки экрана int 10h
mov al,item mov bufin_C[7],al mov filename[5],al mov bx,offset F_name mov [bx][5],al
lea dx,text call WrStr call Line
mov ah,39h mov dx,offset bufin_C + 2 int 21h
mov ah,3ch mov cx,0 mov dx,offset filename int 21h mov handle,ax
mov ah,0ah mov dx,offset buffer int 21h
cld mov cx,100 mov al,0dh mov di, offset buffer + 2 REPNE SCAS buffer sub di,3
mov ah,40h mov bx,handle mov cx,di mov dx,offset buffer + 2 int 21h
call Close_F
inc item ;_________ NEXT↑ jmp r2 r1: jmp r3 r2: ;_________ NEXT↓
;_________ MENU II m1: mov ax,03 ;функция очистки экрана int 10h lea dx,text3 call WrStr call Input cmp ax,1 je f1
;_________ Inputting from keyboard mov ax,03 ;функция очистки экрана int 10h lea dx,text call WrStr call Line
mov ah,0ah mov dx,offset buffer int 21h jmp k1 ;_________ Reading from the file f1: ;--------- Open mov ah,3dh mov al,2 mov dx,offset filename int 21h mov handle,ax ;--------- Read mov ah,3fh mov bx,handle mov cx,99 mov dx,offset buffer + 2 int 21h mov bx,ax add bx,2 mov al,0dh mov buffer[bx],al ;--------- Exit call Close_F ;_________ NEXT↑ jmp r4 r3: jmp r5 r4: ;_________ NEXT↓
;--------- Output on scren mov ax,03 ;функция очистки экрана int 10h lea dx,text6 call WrStr call Line lea dx,buffer + 2 call WrStr call Line lea dx,text7 call WrStr mov ah,1 ;Функція затримання програми int 21h ;_________ Processing k1: mov ax,03 ;функция очистки экрана int 10h ;--------- Search end cld mov cx,100 mov al,0dh mov di,offset buffer add di,2 REPNE SCAS buffer je F F: mov exc,di dec di mov buffer[di],' ' inc di mov buffer[di],0dh ;--------- Search space xor bx,bx mov ax,offset buffer + 2 mov save,ax mov mas[bx],101
t1: xor ax,ax cld mov cl,mas[0] t3: mov al,' ' mov di,save cmp di,exc je t4 REPNE SCAS buffer je FOUND
NOTFOUND: lea dx,text call WrStr jmp b7
FOUND: xor ax,ax mov ax,di sub ax,save cmp ax,1 je t2 sub di,2
push bx mov ax,di mov bx,save sub ax,bx pop bx
inc al inc bx mov mas[bx],al mov al,mas[0] sub al,mas[bx] dec al mov mas[0],al add di,2 mov save,di jmp t1 t2: dec cx mov mas[0],cl mov save,di jmp t3
;_________ NEXT↑ jmp b6 b5: jmp b7 b6: ;_________ NEXT↓ ;_________ NEXT↑ jmp r6 r5: jmp r7 r6: ;_________ NEXT↓
;--------- Search max t4: xor ax,ax mov si,1 mov Num,si mov al,mas[si] dec si
t6: add si,1 cmp al,mas[si] jl t5 mov Num,si mov al,mas[si] t5: cmp bx,si jne t6 ;--------- Search min max xor cx,cx mov si,0
t8: inc si cmp mas[si],al jle t7 inc cx t7: cmp bx,si jne t8 ;--------- Output push Num
mov Num,cx call StrCon cld lea si,StrNum lea di,big_buff + 2 mov cx,4 rep movs StrNum,big_buff
;_________ NEXT↑ jmp b4 b3: jmp b5 b4: ;_________ NEXT↓
lea si,text1 lea di,big_buff + 6 mov cx,17 rep movs StrNum,big_buff pop Num call StrCon
lea si,StrNum lea di,big_buff + 23 mov cx,4 rep movs StrNum,big_buff mov big_buff[27],0dh mov big_buff[28],0ah
lea si,buffer + 2 lea di,big_buff + 29 mov cx,100 rep movs buffer,big_buff mov dx,offset big_buff + 2 call WrStr
mov dx,offset F_name call Create_F
mov ax,exc add ax,25
mov cx,ax mov dx,offset big_buff + 2 call Input_F
call Close_F
jmp m_e ;_________ Read the file j1: mov ax,03 ;функция очистки экрана int 10h
r7: lea dx,text9 call WrStr call Line call Input add al,30h cmp al,item jg j1 sub al,30h mov Num,ax call StrCon cld lea si,StrNum + 3 lea di,filename + 5 mov cx,1 rep movs StrNum,filename
mov ax,03 ;функция очистки экрана int 10h
lea dx,text8 call WrStr call Line
xor di,di xor si,si
mov ah,0ah mov dx,offset bufin_F int 21h
mov cl,bufin_F[1] mov ax,cx
cld lea si,bufin_F + 2 lea di,filename + 7 rep movs bufin_F,filename
mov cx,5 mov di,offset filename + 7 add ax,di lea si,text10 mov di,ax rep movs text10,filename ;_________ NEXT↑ jmp b2 b1: jmp b3 b2: ;_________ NEXT↓
;--------- Open mov dx,offset filename call Open_F ;--------- Read mov ah,3fh mov bx,handle mov cx,150 mov dx,offset add_buff int 21h mov cx,ax ;сколько реально прочитано ;--------- Exit call Close_F
;--------- Output on scren mov ax,03 ;функция очистки экрана int 10h lea dx,text6 call WrStr call Line lea dx,add_buff call WrStr call Line lea dx,text7 call WrStr mov ah,1 ;Функція затримання програми int 21h
mov di,2 clean3: mov add_buff[di],'$' inc di cmp di,150 jne clean3
mov ax,03 ;функция очистки экрана int 10h jmp m_e1 ;_________ MENU END m_e: call Line call Line m_e1: lea dx,text2 call WrStr call Input cmp ax,1 je b1
;mov ah,1 ;Функція затримання програми ;int 21h ;---------------- END PROG ------------ mov ah,4ch int 21h ;_______________ ADD PROC _____________ ;------------- Proc Create_F ---------- Create_F proc near
push ax mov ah,3ch mov cx,0 int 21h mov handle,ax pop ax ret
Create_F endp ;------------- Proc Input_F ----------- Input_F proc near
push ax mov ah,40h mov bx,handle int 21h pop ax ret
Input_F endp ;------------- Proc Open_F ------------ Open_F proc near
push ax mov ah,3dh mov al,2 int 21h mov handle,ax pop ax ret
Open_F endp ;------------- Proc Close_F ----------- Close_F proc near push ax mov ah,3eh mov bx,handle int 21h pop ax ret Close_F endp ;-------------- Proc Line ------------- Line proc near push ax lea dx, text0 mov ah,09h int 21h pop ax ret Line endp ;-------------- Proc WrStr ------------- WrStr proc near push ax mov ah,09h int 21h pop ax ret WrStr endp ;-------------- Proc StrCon ------------ StrCon proc push ax push cx push dx push bx push si
mov bx,-1 p1: inc bx xor ax,ax mov StrNum[bx],al cmp bx,3 jne p1 mov cx, 10 lea si, StrNum + 3 mov ax, Num
p2: cmp ax, 10 jb p3 cwd div cx add dl, 30h mov [si], dl dec si jmp p2 p3: add al, 30h mov [si], al pop si pop bx pop dx pop cx pop ax ret StrCon endp ;-------------Proc Input--------------- Input proc push cx push dx push bx push si push di xor ax,ax
mov ah,0ah mov dx,offset buff int 21h mov dl,0ah mov ah,02 int 21h
mov si,offset buff+2 xor ax,ax mov bx,10 repeat: mov cl,[si] cmp cl,0dh jz ennd sub cl,30h mul bx add ax,cx inc si jmp repeat ennd: pop di pop si pop bx pop dx pop cx ret Input endp ;________________ END __________________ code ends end start
|
|