Gondil, я сделал следующий код для вас в EMU8086 (ассемблер 8086 с синтаксисом Intel). Он читает символ файла, отображающий их. Он считает каждую разрыв строки, после прочтения 24 Разрывы строк он отображает сообщение (Страница полностью, нажмите любую клавишу), затем продолжает чтение файла:
.stack 100h
.data
filename db 'myfile.txt',0 ;NOTICE DE ZERO AT THE END.
filehandler dw ?
msj db 'Page full. Press any key to continue...',13,10,'$'
mychar db ' $' ;CHAR FROM FILE. DOLLAR SIGN TO DISPLAY IT.
lines db 0 ;COUNTER FOR LINES DISPLAYED.
.code
;INITILIZE DATA SEGMENT.
mov ax,@data
mov ds,ax
call clear_screen
;OPEN FILE.
mov ah, 3dh ;SERVICE TO OPEN FILE.
mov al, 0 ;MODE READ ONLY.
mov dx, offset filename
int 21h
mov filehandler, ax
;DISPLAY FILE'S CHARACTERS STOPPING ON EVERY FULL PAGE.
repeat:
;READ ONE CHAR.
mov ah, 3fh ;SERVICE TO READ FROM FILE.
mov bx, filehandler
mov cx, 1 ;HOW MANY BYTES TO READ.
mov dx, offset mychar ;VARIABLE TO STORE THE READ BYTE.
int 21h ;AX RETURNS WITH HOW MANY BYTES WHERE READ.
;CHECK EOF (END OF FILE).
cmp ax, 0
je eof
;DISPLAY CHAR.
mov ah, 9
mov dx, offset mychar
int 21h
;FIND OUT IF CHAR IS LINE BREAK.
cmp mychar, 13
je linebreak
cmp mychar, 10 ;IGNORE.
je notlinebreak
jmp notlinebreak
linebreak:
inc lines
notlinebreak:
;FIND OUT IF PAGE IS FULL.
cmp lines, 24
je pagefull
jmp notfull
pagefull:
call page_is_full
mov lines, 0 ;COUNTER RESTARTS.
notfull:
jmp repeat ;REPEAT PROCESS FOR NEXT CHARACTER.
eof:
;CLOSE FILE.
mov ah, 3eh ;SERVICE TO CLOSE FILE.
mov bx, filehandler
int 21h
;FINISH PROGRAM PROPERLY.
mov ax,4c00h
int 21h
;==============================================================
;DISPLAY MESSAGE OF FULL PAGE AND WAIT FOR KEY.
proc page_is_full
;DISPLAY MESSAGE.
mov ah, 9
mov dx, offset msj
int 21h
;STOP UNTIL USER PRESSES ANY KEY.
mov ah, 7
int 21h
ret
endp
;--------------------------------------------------------------
proc clear_screen
mov ah,0 ;SERVICE TO SET SCREEN MODE.
mov al,3 ;MODES 0..7 ARE TEXT SCREEN.
int 10H ;BIOS SCREEN SERVICES.
ret
endp
Я использую разрыв строки Microsoft (обнаруживая характер 13 и игнорирование 10) , вы можете изменить его для стиля Unix (детектирование символа 10 и игнорирование 13).
Если некоторые текстовые строки файла были слишком длинными, просто добавьте еще один счетчик для длины строки, когда он достигнет 79 символов, увеличьте счетчик «строк».
Надеюсь, это поможет вам.
Если вы говорите о выходе в окно консоли, то это обычно обрабатывается командной оболочкой. Например, в Windows вы можете вывести стандартный вывод на 'more', выполнив что-то вроде MyApplication | more' в командной строке. Однако, если вы хотите запросить продолжение самостоятельно, вам нечего останавливать на подсчете символов при их печати, а затем отображать приглашение, когда выводится определенное количество символов или строк. –