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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.12.2011, 15:57   #1
Kelevra23
Новичок
Джуниор
 
Регистрация: 24.11.2011
Сообщений: 2
Вопрос Вывод файла *.тхт на экран (assembler)

Задача - вывод на экран монитора текстового файла (*.txt) с возможностью прокрутки его содержимого (обеспечить обычный скроллинг).
С выводом на экран файла и скроллиногом разобрался! Теперь нужно обеспечить возможной ввода имени файла (какой будем читать) непосредственно внутри программы, с этим проблемы!
Для приёма имени файла использую функцию DOS - приём текстовой строки. Я так понимаю, что проблема в длине имени которое читается из памяти при открытии файла на чтение, но самому исправит не удается! ops:
Помогите найти ошибку или укажите в каком направлении двигаться!

Код ниже, пишу под i8060 TASM:

Код:
.model tiny
org 100h

.code
main PROC 
    
mov ax,@data
mov ds,ax

mov ah,0                          ;установка текстового режима           
mov al,2
int 10h

mov dx,offset msg           ;выводим  подсказик
mov ah,9
int 21h

mov dx,offset for_in       ;функция приёма текстовой строки (по адресу for_in)
mov ah,0ah
int 21h

    
; Открываем файл на чтение 
mov ax,716Ch                  ; специально используем функцию которая позволяет работать с файлами у который длинное имя (больше 8 бит)
mov bx,0 
mov cx,0 
mov dx,1 
mov si,OFFSET for_in+1   ; по идее введёное ранее имя файла хранится по адресу (for_in+1) т.к. перед принимаемой строкой ещё записывается её длина
int 21h 
jc quit 
mov inHandle,ax

; Функция чтения
mov ah,3Fh 
mov bx,inHandle 
mov cx,BufSize 
mov dx,OFFSET buffer
int 21h
jc quit 
mov bytesRead,ax
mov ofset, 0

; Вывод буфера на экран
vw:
push es
push 0b800h
pop es
xor di,di
mov cx,2000
mov ax,0700h
rep stosw
pop es

mov ah, 02
mov dx, 0
mov bh, 0
int 10h

mov ah,40h 
mov bx,1 
mov cx,5fch 
mov dx,OFFSET buffer 
add dx, ofset
int 21h

inp:
mov ah, 6
mov al, 0
mov dl, 0ffh
int 21h


cmp al, 72
jz up

cmp al, 80
jz down

cmp al, 113
jz qt

jmp inp

up:                         ;стрелочки для скроллинга
sub ofset, 80
jmp vw

down:
add ofset, 80
jmp vw

qt: 
; Close the file
mov ah,3Eh 
mov bx,inHandle 
int 21h 
jc quit 





quit: 
main ENDP

EXIT:
mov ah,4ch
int 21h

.data
msg db 'Please type the name file to read:$'

for_in  DB  9               ;число принимаемых  символов до 8ми        
           DB  ?               ;число принятых символов
           DB  8 DUP(?) *  ;буфер для приёма текстовой строки
           
BufSize = 50000
inHandle dw ?
buffer db BufSize DUP(?)     ;буфер для чтения файла тхт
bytesRead dw ?
ofset dw ?


END main
Kelevra23 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывод пикселя на экран (Assembler) Demonhunterus Помощь студентам 0 30.09.2011 19:39
вывод на экран однофамильцев из файла (си++) Kolyan11 Помощь студентам 15 01.06.2011 09:44
Assembler - ввод данных (имени и фамилии) с клавиатуры и вывод на экран МартинИ Помощь студентам 1 25.05.2010 00:40
вывод информации на экран о состоянии памяти на текущем диске А(assembler) alien9356 Фриланс 2 15.06.2009 15:41
вывод файла на экран! Шушелла Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 9 29.10.2007 09:34