Новичок
Профиль
Группа: Участник
Сообщений: 8
Регистрация: 25.10.2006
Репутация: нет Всего: нет
|
Вообщем не могу понять! на диске D создал файл MYFILE.asm! програма полностью читает файл и выводит на экран, но как сделать чтоб читала прога 8 байт из етого файла начиная с 5ого и выводила на экран? | Код | TITLE ASCREAD (COM) Чтение ASCII файла CODESG SEGMENT PARA 'Code' ASSUME CS:CODESG,DS:CODESG,SS:CODESG,ES:CODESG ORG 100H BEGIN: JMP MAIN ; ------------------------------------------------- SECTOR DB 512 DUP(' ') ;Область ввода DISAREA DB 120 DUP(' ') ;Область вывода на экран ENDCDE DW 00 HANDLE DW 0 OPENMSG DB '*** Open error ***' PATHNAM DB 'D:\MYFILE.ASM', 0 ROW DB 00 ; ------------------------------------------------- MAIN PROC NEAR ;Основная программа MOV AX,0600H CALL Q10SCR ;Очистить экран CALL Q20CURS ;Установить курсор CALL E10OPEN ;Открыть файл, ; установить DTA CMP ENDCDE,00 ;Ошибка при открытии? JNE A90 ; да - выйти, A20LOOP: ; нет - продолжить CALL R10READ ;Чтение первого сектора CMP ENDCDE,00 ;Конец файла, нет данных? JE A90 ; да - выйти CALL G10XPER ;Выдать на экран A90: RET ;Завершить программу MAIN ENDP ; Открыть файл на диске: ; --------------------- E10OPEN PROC NEAR MOV AH,3DH ;Функция открытия MOV AL,00 ;Только чтение LEA DX,PATHNAM INT 21H JNC E20 ;Проверить флаг CF CALL X10ERR ; ошибка, если установлен RET E20: MOV HANDLE,AX ;Запомнить номер файла RET E10OPEN ENDP ; Построчный вывод данных на экран: ; -------------------------------- G10XPER PROC NEAR CLD ;Направление слева-направо LEA SI,SECTOR G20: LEA DI,DISAREA G30: LEA DX,SECTOR+512 CMP SI,DX ;Конец сектора? JNE G40 ; нет - обойти, CALL R10READ ; да - читать следующий CMP ENDCDE,00 ;Конец файла? JE G80 ; да - выйти LEA SI,SECTOR G40: LEA DX,DISAREA+80 CMP DI,DX ;Конец DISAREA? JB G50 ; нет - обойти, MOV [DI],0D0AH ; да - установить CR/LF CALL H10DISP ; и выдать на экран LEA DI,DISAREA G50: LODSB ;Загрузить [SI] в AL ; и увеличить SI STOSB ;Записать AL в [DI] ; и увеличить DI CMP AL,1AH ;Конец файла? JE G80 ; да - выйти CMP AL,0AH ;Конец строки? JNE G30 ; нет - повторить цикл, CALL H10DISP ; да - вывести на экран JMP G20 G80: CALL H10DISP ;Вывести последнюю строку G90: RET G10XPER ENDP ; Вывод строки на экран: ; --------------------- H10DISP PROC NEAR MOV AH,40H ;Функция вывода на экран MOV BX,01 ;Номер (Handle) LEA CX,DISAREA ;Вычислить NEG CX ; длину ADD CX,DI ; строки LEA DX,DISAREA INT 21H CMP ROW,22 ;Последняя строка экрана? JAE H20 ; нет - выйти INC ROW JMP H90 H20: MOV AX,0601H ;Прокрутка (скроллинг) CALL Q10SCR CALL Q20CURS H90: RET H10DISP ENDP ; Чтение дискового сектора: ; ------------------------ R10READ PROC NEAR MOV AH,3FH ;Функция чтения MOV BX,HANDLE ;Устройство MOV CX,512 ;Длина LEA DX,SECTOR ;Буфер INT 21H MOV ENDCDE,AX RET R10READ ENDP ; Прокрутка (скроллинг) экрана: ; ---------------------------- Q10SCR PROC NEAR ;в AX адрес элемента MOV BH,1EH ;Установить цвет MOV CX,0000 ;Прокрутка MOV DX,184FH INT 10H RET Q10SCR ENDP ; Установка курсора: ; ----------------- Q20CURS PROC NEAR MOV AH,02 ;Функция MOV BH,00 ; установки курсора MOV DH,ROW MOV DL,00 INT 10H RET Q20CURS ENDP ; Вывод сообщения об ошибке на диске: ; ---------------------------------- X10ERR PROC NEAR MOV AH,40H ;Функция вывода на экран MOV BX,01 ;Номер устройства MOV CX,18 ;Длина LEA DX,OPENMSG INT 21H MOV ENDCDE,01 ;Индикатор ошибки RET X10ERR ENDP
CODESG ENDS END BEGIN
|
Это сообщение отредактировал(а) H2M_nikola01 - 27.10.2006, 12:17
|