Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Прокомментировать код, Прокомментировать код 
:(
    Опции темы
Призрак35
  Дата 10.12.2014, 21:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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

PM MAIL   Вверх
Призрак35
Дата 19.12.2014, 18:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 10.12.2014

Репутация: нет
Всего: нет



Google,  smile 
Google,  smile 
Google,  smile 
Google,  smile 
PM MAIL   Вверх
ФедосеевПавел
Дата 19.12.2014, 21:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 291
Регистрация: 7.2.2009

Репутация: 4
Всего: 10



Ух какой грозный смайлик.

Могу прокомментировать.

Код топикстартера написан на языке ассемблера для процессора семейства x86. Операционная система, к API которой неоднократно обращается код - DOS версии 3.00 и выше. также присутсвуют вызовы BIOS. Компилятор - скорее всего TASM. Комментарии содержат слова из трёх языков, что говорит о лингвистических способностях автора или о возможном коллективном труде международной группы разработчиков. Код оформлен в едином стиле, что говорит о жёстком контроле над оформлении исходников.

Резюме:
Если коллектив авторов сможет защитить эту лабу, то он продолжит учёбу в ВУЗе. smile 
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm для начинающих"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm для начинающих | Следующая тема »


 




[ Время генерации скрипта: 0.0784 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.