Страница 1 из 1

Ассемблер.Турбо дебаггер. ОЧЕНЬ нужна помощь!Работа с текстовым файлом.Строчн. и проп

Добавлено: 22 май 2008, 18:12
K0sinus
Здравствуйте!Помогите пожалуйста!Валят в универе,надо срочно сдать задачу.
Необходимо прочесть из текстового файла английский текст (не длинный), преобразовать маленькие символы в заглавные и сохранить в другой текстовый файл.Чисто интуитивно я понимаю,что надо в ASCII аблице прибавить 20 к коду символов.А вот как это сделать,я не знаю...и работа с файлами для меня загадка...Прошу написать полную программу.Заранее огромнейшее спасибо!!!

Вот примерно то,что просят(в плане синтаксиса и пр. -это просто чтение файла и как я понял копирование в буфер)

Код: Выделить всё

TITLE file
.model small
.stack 100h
.data
buf	db 	100 dup(?)
FM	dw	?	;для хранения номера файла, получаемого от DOS
Name1		db	"D:\6421\Lab5\text.txt", 0   ; местоположение файла, заданное в формате
.code
file proc										        ; ASCII

mov ax, @data
mov ds, ax
mov ax, 3D00h   ; в ah задан номер функции открытия файла, в al задан режим 
    ; доступа.
lea dx, 	Name1     ;в ds:dx размещается адрес строки, содержащей идентификацию 
                            ;файла.
int 21h                 ; вызов функций открытия файла.
mov dl,"O"              ; символ для идентификации ошибки, которая могла возникнуть
                            ; при открытии файла
jc	_ERR      ; если ошибка возникает при открытии файла, то осуществляется 
    ; переход (ближний) к обработке ошибки.
;выполнение дальнего перехода осуществляется так:     jnc	mm
								;jmp	_ERR
	;mm:	
mov FM, ax	    ; если нет ошибок, то FM сохраняется.
;чтение данных из файла.
mov ah, 3Fh	; в ah задан номер функции чтения из файла.
mov bx, FM	; регистр bx должен содержать логический номер файла.
mov cx, 100	; в cx количество читаемых байтов.
lea dx, buf	; в ds:dx указывается адрес буфера для ввода данных из файла.
int 21h		; вызов функции чтения.
mov dl, "R"
jc	_ERR
; закрытие файла
mov ah, 3Eh	;в ah задан номер функции закрытия файла.
mov bx, FM
int 21h
mov dl, "C"
jc	_ERR
jmp 	exit
_ERR:	mov ah, 02h	; вывод символа, идентифицирующего возможную ошибку.
	int 21h
exit:	ret
file endp
end
а вот такого же плана,но с сохранением в файл,но тут ещё заменяют первый символ заданным словом:

Код: Выделить всё

TITLE main
.model small
.stack 100h
.data
buf	db 	100 dup(?)
FM	dw	?	;для хранения номера файла, получаемого от DOS
Name1		db	"D:\6421\Zhilin 5\Text1.txt", 0   ; местоположение файла,заданное в формате
Name2		db	"D:\6421\Zhilin 5\Text2.txt", 0 
myname db "Belov"
buf2	db	106 dup(?)
cx_	dw	0
mes4 db    0Dh,0Ah,'TEXT: ','$'
mes1 db	   0Dh,0Ah,'create error ','$'	
mes2 db	   0Dh,0Ah,'write error ','$'
mes3 db	   0Dh,0Ah,'open error ','$'
.code
main: 										        ; ASCII

mov ax, @data
mov ds, ax
mov ax, 3D00h   ; в ah задан номер функции открытия файла, в al задан режим 
    ; доступа.
lea dx, Name1     ;в ds:dx размещается адрес строки, содержащей идентификацию 
                            ;файла.
int 21h                 ; вызов функций открытия файла.
mov dl,"O"              ; символ для идентификации ошибки, которая могла возникнуть
                            ; при открытии файла
;jc	 _ERR      ; если ошибка возникает при открытии файла, то осуществляется 
    ; переход (ближний) к обработке ошибки.
;выполнение дальнего перехода осуществляется так:     jnc	mm
								;jmp	_ERR
	;mm:	
mov FM, ax	    ; если нет ошибок, то FM сохраняется.
;чтение данных из файла.
mov ah, 3Fh	; в ah задан номер функции чтения из файла.
mov bx, FM	; регистр bx должен содержать логический номер файла.
mov cx, 100	; в cx количество читаемых байтов.
lea dx, buf	; в ds:dx указывается адрес буфера для ввода данных из файла.
int 21h		; вызов функции чтения.
mov dl, "R"
;jc	_ERR
; закрытие файла
mov ah, 3Eh	;в ah задан номер функции закрытия файла.
mov bx, FM
int 21h
mov dl, "C"
;jc	_ERR

;my

lea si,buf
lea di,buf2
mov cx,100
my:	
	mov	cx_,cx
	cmp byte ptr [si],20h
	je	povt
	cmp byte ptr [si],30h
	jl	bukva1
	cmp byte ptr [si],39h
	jg	bukva1
	jmp	povt
bukva1:
	mov	cx,7	
	lea	bx,myname

bukva2:		
	mov	al,[bx] 
	mov [di],al
	inc	di
	inc	bx
	loop	bukva2
	mov	cx,cx_
	inc	si
	jmp	povt2

povt:	mov al,[si]
	mov [di],al
	inc si
	inc di
	loop my
povt2:	
	cmp [si],0h
	je	nome
	mov al,[si]
	mov [di],al
	inc si
	inc di
	loop povt2

;nomy
nome:
	mov	ah,3CH
	mov	cx,00	
	lea	dx,Name2
	int 	21h
	;jc	error1
	mov	fm,ax

	mov	ah,9
	lea	dx,mes4
	int	21h

	mov 	ah,40h
	mov	bx,1
	mov	cx,100
	lea	dx,buf2
	int	21h

	mov	ah,40h
	mov	bx,fm
	mov	cx,100
	lea	dx,buf2
	int 	21h
	;jc	error2
	;jmp	exit


jmp 	exit
_ERR:	mov ah, 02h	; вывод символа, идентифицирующего возможную ошибку.
	int 21h

exit:
	mov ah,01h
	int 21h

mov ax, 4c00h  
    int 21h        

End main 
;ret
;file endp
;end