Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.01.2011, 13:04   #1
Nevesta_Sira
 
Регистрация: 02.01.2011
Сообщений: 6
По умолчанию TASM файлы

Помогите подкорректировать код...
Код:
model large
.stack 100h
.data
 file_name db 'f.txt',0
 mes1 db 'Ошибка открытия файла$'
 mes2 db 'Ошибка закрытия файла$'
 mes3 db '-----НАЧАЛО-----$'
 mes4 db '------КОНЕЦ-------$'
 mes5 db 'Найдено $'
 mes6 db ' слов(о), состоящих из $'
 mes7 db ' символов$'
 str	db '*$'
 unset db 13,10,'$'
 handle dw 0
 buf db ?
 dd dw ?
 mass dw 50 dup(?)
 i dw ?
.code
 start:
   mov ax,@data
  mov ds,ax
  call far ptr open_file
   lea dx,mes3
  mov ah,09h
  int 21h
  call far ptr new_line
  call far ptr write_file
  call far ptr new_line
  lea dx,mes4
  mov ah,09h
  int 21h
  call far ptr new_line
  call far ptr work
  call far ptr close_file
  call far ptr output_mass
 call far ptr readkey
 call far ptr exit_prog
;===procedure open_file===
 open_file proc far
   mov al,0
   lea dx,file_name
   mov ah,3dh
   int 21h
   jc open_error
   mov handle,ax
   jmp open_ok
  open_error:
    lea dx,mes1
    mov ah,09h
    int 21h
   call far ptr readkey
   call far ptr exit_prog
  open_ok:
  retf
 open_file endp
;===procedure write_file===
 write_file proc far
   mov bx,handle
   xor cx,cx
   xor dx,dx
   mov al,0h
   mov ah,42h
   int 21h
  out_file:
  ;читаем 1 байт
   mov cx,1
  ;в память buf
   lea dx,buf
   mov ah,3fh
   int 21h
  ;если EOF или ошибка чтения
   cmp ax,cx
   jnz close
  ;выводим на экран
   mov dl,buf
   mov ah,02h
   int 21h
  jmp out_file
  close:
  retf
 write_file endp
;===procedure close_file===
 close_file proc far
  ;дескриптор файла
   mov bx,handle
   mov ah,3eh
   int 21h
   jc close_error
   jmp close_ok
  close_error:
   ;выводим ошибку
    lea dx,mes2
    mov ah,09h
    int 21
   call far ptr readkey
   call far ptr exit_prog
  close_ok:
  retf
 close_file endp
;===procedure work===
 work proc far
  			;обнуляем массив
  xor si,si
  mov cx,21
   @a:
   	mov mass[si],0
   	add si,2
  	loop @a
 			 ;указатель на начало файла
   	mov bx,handle
   	xor cx,cx
   	xor dx,dx
   	mov al,0h
   	mov ah,42h
   	int 21h
  			;индекс массива
   	xor si,si
  cycle_work:
  			;читаем 1 байт
   	mov cx,1
  			;в память buf
   	lea dx,buf
   	mov ah,3fh
   	int 21h
  	add si,2
  			;если EOF
  	cmp ax,cx
    	jnz @s
  	cmp buf,20h
  	jne l1
  @s:
   	dec si
   	dec si
   	add mass[si],1
  	 xor si,si
   	cmp ax,cx
   	jnz EOF
  l1:
 	 jmp cycle_work
  EOF:
  	retf
 work endp
 
;===procedure output_mass===
 output_mass proc far
  					;создаём цикл, проход 20 раз
   mov i,1
  					;индекс массива
   mov si,2
   cycle_output:
   					 ;выводим mes5
     	lea dx,mes5
	mov ah,09h
     	int 21h
    					;выводим элемент массива
     					;колличество цифр будем хранить в cx
      	xor cx,cx
     					;копируем элемент в ax
      	mov ax,mass[si]
     					;и заносим в bx десятку
     	mov bx,10
     lv1:
     					;делим число на десять
      	xor dx,dx
      	div bx
     					;помещаем остаток в стэк
      	push dx
      	inc cx
      	cmp ax,0
    					 ;повторяем пока число не станет ноль
      	jne lv1
     					;теперь вывод
      	xor ax,ax
      	mov ah,02h
     lv2:
     			;извлекаем очередную цифру из стэка
      	pop dx
       	     			
     	add dl,30h
     	 
     	     			
      	int 21h
     			;повторяем столько раз, сколько насчитали цифр
     	loop lv2
    			;выводим mes6
     	lea dx,mes6
     	mov ah,09h
     	int 21h
    			;выводим i
     			;колличество цифр будем хранить в cx
      	xor cx,cx
     			
      	mov ax,i
     			
      	mov bx,10
     lvv1:
     			
     	 xor dx,dx
      	div bx
     			
      	push dx
      	inc cx
      	cmp ax,0
     			;повторяем пока число не станет ноль
      	jne lvv1
    			 ;теперь вывод
      	xor ax,ax
     	 mov ah,02h
     lvv2:
     			
     	 pop dx
     			
     	 add dl,30h
     			
      	int 21h
     			
    	loop lvv2
    			
    	lea dx,mes7
     	mov ah,09h
     	int 21h
    			
     	call far ptr new_line
   			
     	add si,2
   	inc i
   	cmp i,21
   	jne cycle_output
  retf
 output_mass endp
;===procedure readkey===
 readkey proc far
  mov ah,01h
  int 21h
  retf
 readkey endp
;===procedure exit_prog===
 exit_prog proc far
  mov ah,4ch
  int 21h
  retf
 exit_prog endp
;===procedure new_line===
 new_line proc far
  lea dx,unset
  mov ah,09h
  int 21h
  retf
 new_line endp
 end start
необходимо чтобы программа выдавала количество слов звездами....т.е. например 6 слов из 5-букв то в программме "найдено слов из 5 букв-******"
Nevesta_Sira вне форума Ответить с цитированием
Старый 06.01.2011, 15:18   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Проверить ДОС не на чем, но я бы примерно так делал:
Код:
push    cs
pop     ds

 xor cx,cx
 mov si,c
 dec si;
ok:
 inc si
 cmp byte [si],0
je done;
 cmp byte [si],' '
 jne no
 inc cx
no:
 jmp ok;
done:
wow:
 mov ax,2
 mov dl,'*'
 int 21h
loop wow

 mov     ah, 1
 int     21h             ; DOS - KEYBOARD INPUT
 mov     ah, 4Ch
 int     21h


 ret
Где c db "hello world my",0
По идее три звездочки должно вывести
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
TASM дело тонкое!:) (Где в TASM IDE?) 3.14oner Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 9 15.11.2011 16:20
TASM Hant111 Фриланс 5 23.03.2010 21:54
TASM romale Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 16.12.2009 23:03
tasm>>fasm better Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 11 09.02.2009 19:34