Консультация № 44451
28.05.2006, 05:30
0.00 руб.
0 6 1
Еще один вопрос... Что неверно в этой программе (открытие текстового документа), возможно я что то не так понял, помогите плз..

Приложение:
ideal model smallstack 256datasegfilename db ‘D:\TASM\BIN\1.txt‘,0 ;пробовал и полный адрес и текущ. каталогBuffer equ $numb dw 0codesegstart: mov ax,@datamov ds,axmov ax,3D00hmov dx,offset filenameint 21hmov [numb],axmov ah,3Fhmov cx,0FF00h ;честно говоря не знаю для чего эта строчкаmov dx,offset Bufferint 21hmov ah,10hint 16hmov ah,3Ehmov bx,[numb]int 21hexit: mov ax,4c00hint 21hend start

Обсуждение

Неизвестный
28.05.2006, 14:45
общий
это ответ
Здравствуйте, Бородин Евгений Викторович / kain!

Если вы решаете такую задачу то я вам рекомендую делать это через модель памяти TINY т.е. формат файла *.COM, где все сегментные Регистры равны между собой, это уменьшит код программы и упростит сопровождение.

Далее идёт код который демонстрирует только Открытие и Закрытие файла.

CSEG segment
assume cs:CSEG,ds:CSEG,ss:CSEG,es:CSEG
org 100h
Begin:
;====================
;Open file
;OUT: ax = handle
mov ax,3D00h
lea dx,filename
int 21h
;====================
xchg ax,bx ;bx = handle
;====================
;Close file
mov ah,3Eh
int 21h
;====================
ret ;exit
;====================
filename db ‘1.txt‘,0
CSEG ends
end Begin

У вас в коде есть отрывок:

mov [numb],ax ;Здесь вы сохраняете Handle

mov ah,3Fh ;Номер функции Чтения из Файла
mov cx,0FF00h ;Колличество считываемых байт
mov dx,offset Buffer ;Адрес буфера куда будут читаться данные
int 21h

Этот отрывок предназначен для чтения из файла. В данном отрывке не хватает загрузки в регистор BX, хэндла файла т.е. правельная версия выглядит так:

mov [numb],ax ;Здесь вы сохраняете Handle

mov bx,ax ;bx = HANDLE FILE

mov ah,3Fh ;Номер функции Чтения из Файла
mov cx,0FF00h ;Колличество считываемых байт
mov dx,offset Buffer ;Адрес буфера куда будут читаться данные
int 21h

С, Уважением MnEm0n!C.
Неизвестный
28.05.2006, 15:25
общий
2Пан Павел КонстантиновичЯ добавил эту строчку, но все равно не открывает... Так же как и было - включаю программу, файл не открывается,чистая строчка...ждет нажатия клавиши...что то еще не так?
Неизвестный
29.05.2006, 19:07
общий
А вы хотите ещё вывести на экран?
Неизвестный
29.05.2006, 21:31
общий
Все у тебя прекрасно "открывается".Просто "открыть" и вывести на экран - разные вещи.Попробуй следующую добавку (собственно она на экран и выводит текст)size_of_file=200hidealmodel smallstack 256datasegfilename db ‘D:\TASM\BIN\1.txt‘,0 ;пробовал и полный адрес и текущ. каталогBuffer db size_of_file dup (0)numb dw 0codesegstart: mov ax,@datamov ds,axmov ax,3D00hmov dx,offset filenameint 21hmov bx,axmov [numb],axmov ah,3Fhmov cx,size_of_file ;честно говоря не знаю для чего эта строчкаmov dx,offset Bufferint 21h<b>mov cx,axmov bx,offset Bufferl1:mov al,byte ptr ds:[bx]inc bxint 29hloop l1</b>mov ah,10hint 16hmov ah,3Ehmov bx,[numb]int 21hexit: mov ax,4c00hint 21hend start
Неизвестный
29.05.2006, 23:33
общий
2СтасВроди все понятно, но почему то в строчке:mov al,byte ptr ds:[bx] пишет ошибку Pointer expression needs brackets - как это понимать, ведь квадратные скобки на месте. Пожалуйста, Стас, проверьте эту програму, может это у меня с ТАСМом чтото...--- Заранее благодарен
Неизвестный
30.05.2006, 00:05
общий
Спасибо, наконецто догадался!! :)
Форма ответа