masm
model small
.data
file_name db 128 dup (" ") ;буфер, для пути к файлу
point_fname dd file_name
string db 100 dup (" ")
len_string=$-string
point_string dd string
handle dw 0 ;дескриптор файла
size_f dd 0 ;размер файла
.stack 256
.486
.code
main:
;копируем командную строку в file_name
;вначале уберем (установкой указателя) ведущие пробелы в командной строке перед путем к файлу:
mov di,81h
mov al," "
mov cx,128
repe scasb
dec di
push di
pop si
mov ax,@data ;адрес сегмента данных - в регистр ax
mov es,ax ;ax в es
mov cl,ds:[80h]
dec cl
lea di,file_name
rep movsb
push es
pop ds
работа с файлами, принцип
Код:
вообще прога выводит на экран содержимое блокнотовского файла, имя которого указывается в командной строке. Ну я так догадываюсь именно имя файла в этом фрагменте и вводится, только куда, как, в какие регистры, что? Почему именно 80h и зачем push es pop ds? Не может ли кто-нибудь поподробнее рассказать?
Короче, в DOS перед образом программы в памяти (все равно, загруженной из COM- или EXE-файла) находится область PSP размером 256 байт, последние 128 байт которой называются DTA и являются файловым буфером по умолчанию для устаревших файловых функций, а также исползуются для хранения строки параметров при запуске программы. В ячейке [80h] при этом содержится длина строки - это типа коротких строк в Паскале, не нольтерминальных строк. Самое главное, что при старте программы в регистрах ds и es содержится сегментный адрес именно PSP, а не сегмента данных программы. В программе сначала идет копирование имени из PSP в сегмент данных, а потом настройка регистра ds на сегмент данных (с помощью пары команд push es/pop ds) - у тебя сначало было es<--@data, а теперь ds<--es, т.е. в итоге ds<--@data.
нужно? можно покомандно объяснить....
почитай учебники и всё поймёшь. и проблем не будет со сдачей лабораторных....
dec cl, видимо, нужен для того, чтобы избавиться от кода 0x0D в конце строки, который попадает туда из-за того что пользователь нажимает Enter, когда заканчивает ввод команды с параметрами. Хотя лично я бы не стал опираться на это и сделал разбор строки параметров более детальным, а следовательно менее подверженным возможным ошибкам при невыполнении этого и других условий.