.MODEL tiny
DOSSEG
.STACK 100h
.DATA
i dw 0
parm_msg DB "УгЄ ¦ЁвҐ Ї а ¬Ґвал","$"
vxod_str db ""
.CODE
mov cl,ds:80h ; количество символов
; в командной строке
mov si,81h ; со смещением 81h
; начинается область
; параметров
cld
mov bp,cx
mov bx,cx
get_parаmetr:
lods BYTE PTR es:[si] ; загружаем в al
; очередной
; символ строки
; параметров
mov vxod_str[bp],al ; запись в переменную символа с командной строки
loop get_parametr
jmp print_parametr
print_parametr :
; для начала хотел бы вывести то что есть в строке но выводит с конца строки а надо с начала что здесь изменить??
mov al,vxod_str[bp]
mov ah,2 ; выводим его на экран
mov dl,al
int 21h
dec vxod_str[bp] ; переход на следующий элемент
jmp end_progr
end_progr:
.EXIT 0
END
PSP чтение из командной строки 81h и запись в переменную
вот код
Код:
print_parametr - выводит только последний элемент и если его декрементировать зная количество символов то можно дойти до начала в принципе можно сделать цикл который это сделает но я думаю что начало сохранения этих параметров где то лежит только вот где не пойму
Начало строки параметров находится в PSP по адресу 80h. Участок для хранения строки параметров имеет размер 128 байт. Сегментный адрес PSP передается программе при старте в регистрах ds и es.
Цитата: Phantom-84
Начало строки параметров находится в PSP по адресу 80h. Участок для хранения строки параметров имеет размер 128 байт. Сегментный адрес PSP передается программе при старте в регистрах ds и es.
так в ds у меня хранится количество символов в строке?? а в es тогда начало строки и можно написать так
Код:
mov al,vxod_str[es] ;нельзя, а как можно??
Цитата: metal_anton
так в ds у меня хранится количество символов в строке?? а в es тогда начало строки и можно написать так
как написать цикл для прохода строки от начала до конца?? если можно кодом подскажите
Код:
mov al,vxod_str[es] ;нельзя, а как можно??
Количество символов в строке у тебя (а точнее у DOS) хранится в начале самой строки. Ты нигде регистр ds не меняешь.
Код:
cld
mov si,81h
mov cl,[si-1] ; получаешь длину строки
mov ch,0
next:
lodsb
...
; здесь обрабатываешь очередной символ строки
...
loop next
mov si,81h
mov cl,[si-1] ; получаешь длину строки
mov ch,0
next:
lodsb
...
; здесь обрабатываешь очередной символ строки
...
loop next
Цитата: Phantom-84
Код:
next:
lodsb
...
; здесь обрабатываешь очередной символ строки
...
loop next
lodsb
...
; здесь обрабатываешь очередной символ строки
...
loop next
а как обрабатывать у меня получается тока с конца строки и то не верно прошу если не сложно напишите именно вывод строки с начала до конца спасибо большое
Код:
mov ah,40h
mov bx,STDOUT
mov cl,[80h]
mov ch,0
mov dx,81h
int 21h
mov bx,STDOUT
mov cl,[80h]
mov ch,0
mov dx,81h
int 21h