Znak po znaku. Musisz zrobić sobie pętelkę. Chyba, że masz gdzieś pod ręką jakąś funkcję pomocniczą odczytującą jeden wyraz z łańcucha.
Robisz prostą pętelkę, kopiującą po jedym znaku do jakiegoś bufora, aż trafisz na spację.
Ponieważ chcesz przekazać nazwę pliku do funkcji otwierającej, możesz trochę zoptymalizować to. Musisz jedynie zapamiętać adres pierwszej litery ścieżki, a zamiast pierwszej spacji po nazwie pliku wstawisz 0. W ten sposób do funkcji otwierającej plik przekazać będziesz mógł adres początku (koniec wyznacza 0). A dalsze parametry już musisz odczytywać w sposób konwencjonalny.
Tutaj masz kod odczytujący z lini poleceń nazwę pliku, tworzący ten plik, a następnie zapisujący drugi parametr do niego. Troszkę przerobisz i będzie w sam raz do Twoich zastosowań.
Kod Segment
Org 100h
Assume cs:Kod,ds:Kod
start:
mov di, 80h ;ładuje początek lini poleceń
mov cl, [di]
test cl, cl
jz koniec ;czy jest są jakieś parametry?
mov al, 20h
inc di
repe scasb ;pomija początkowe spacje
mov dx, di ;początek pierwszego parametru
dec dx
test cl, cl ;jeżeli okazałoby się, że parametrem są tylko spacje
jz koniec ;to kończymy
repne scasb ;przeskakuje pierwszy parametr
mov byte ptr [di-1], 0 ;ASCIIZ, koniec pierwszego parametru-nazwy pliku
push cx ;przyda nam się jeszcze
mov ah, 3ch ;tworzenie pliku, nazwa pliku pod ds:dx, które wcześniej zapamiętaliśmy
xor cx, cx ;brak atrybutów
int 21h
mov bx, ax ;uchwyt pliku
mov ah, 40h ;zapis do pliku
pop cx ;ile znaków do zapisania
mov dx, di ;początek tekstu do zapisania
int 21h
mov ah, 3eh
int 21h
koniec:
mov ax, 4C00h
int 21h
end start
ends Kod