Witam wszystkich asemblerowych wyjadaczy...
Od razu do rzeczy: niedawno zaczalem sie bawic tym jezykiem i co krok napotykam na glupie problemy:] Potrafie zczytywac znaki podane jako parametr uruchomieniowy ale nie potrafie zapisac tego parametru jako zmiennej moge jedynie nadpisywac dana zmienna kolejnym znakiem. A chcialbym aby podany parametr tworzyl plik o tejze nazwie...
Ogolnie schemat programy prezentuje sie nastepujaco:
.model small
.286
.stack 512
.code
assume ds:nothing
start:
mov bx, 80h ; adres bloku PSP
mov cl, ds:[bx] ; dlugosc parametrow
xor ch, ch
or cx, cx
jz koniec
petla:
inc bx
mov dl, ds:[bx] ; pobiez znak
mov ah, 02h
int 21h ; wyswietl znak
loop petla
koniec:
mov ax, 4C00h
int 21h
end start
Jezeli zainicjuje jakies dane w segmencie .data to bede musial przypisac do mov ax, @dane mov ds, ax. To chyba spowoduje ze nie bede mogl pobierac znakow poprzez ds:[bx]? W jaki sposob dolozyc jakas zmienna text db "?" ktora pomiesci w sobie kolejne znaki z ds:[bx]?
Stosy i kolejki... poszukam. Ogolnie chcialbym polaczyc poprzedni program z tym ponizej, tak aby nazwa pliku z drugiego programu (text_file) wprowadzany byl jako parametr uruchomieniowy. Ponizszy program tworzy plik o zadeklarowanej juz nazwie i zapisuje do niego glupotki poki nie ctr z. Moje proby z przydzieleniem ds'owi @data powodowaly ze nie zczytywal znakow z parametru... wiec moze jakas rotacja miedzy ds dla segmentu danych a ds:[bx] dla czytania kolejnego znaku... aha, jak sie zapisuje poszczegolne znaki aby zlepic je w jedna zmienna?
.model small
.stack 512
.data
text_file db "copy.txt", 0
character db ?
handle dw ?
.code
assume ds:@data
start:
mov ax, @data
mov ds, ax
mov ah, 3Dh ; otworz plik
mov al, 1
mov dx, offset text_file
int 21h
jnc otwarty
mov ah, 3Ch ; utworz plik
mov dx, offset text_file
mov cx, 0
int 21h
jc koniec
otwarty:
mov handle, ax
mov ah, 42h ; do konca pliku
mov bx, handle
xor cx, cx
xor dx, dx
mov al, 2
int 21h
petla:
mov ah, 08h
int 21h ; czytaj znak
or al, al
jnz ok
mov ah, 08h
int 21h
jmp petla
ok:
cmp al, 1Ah ; Ctrl-Z - koniec
je zamnknij
mov character, al
mov ah, 02h
mov dl, al
int 21h ; wyswietl znak
mov ah, 40h ; zapisz znak
mov bx, handle
mov dx, offset character
mov cx, 1
int 21h
jmp petla
zamnknij:
mov ah, 3Eh
mov bx, handle
int 21h
koniec:
mov ax, 4C00h
int 21h
end start