ASSEMBLER, PS nr 4
Napisać program, który wypisuje:
1.
Zawartości pól z PSP (kod rozkazu, adres zakończenia programu, obsługi CTRL-
Break, obsługi błędu krytycznego.
2. Wiersz wejściowy programu (parametry linii komend).
Blok wstępny programu (PSP) zajmuje 256 (100H) bajtów.
Wartości początkowe rejestrów programów typu COM i EXE
Rejestr
CS
IP
DS
ES
SS
SP
Program typu COM
segment programu (PSP)
100H
segment programu (PSP)
segment programu (PSP)
segment programu (PSP)
FFFEH lub długość przydzielonej
pamięci minus 2 jeżeli pamięć mniejsza
niż 64 KB
Program typu EXE
dowolna (w assemblerze adres
segmentu zawierającego pierwszy
rozkaz do wykonania)
dowolna (w assemblerze względny
adres pierwszego rozkazu do
wykonania w jego segmencie)
segment programu (PSP)
segment programu (PSP)
dowolny ( w assemblerze segment z
atrybutem STACK)
dowolny ( w assemblerze rozmiar
segmentu z atrybutem STACK)
Blok wstępny programu (PSP)
Adres pola
długość
Zawartość
00H
2
INT 20H (kod rozkazu)
02H
2
Pamięć niedostępna dla programu (adr. Segmentowy)
04H
1
Zerezerwowane
05H
5
0AH
4
adres zakończenia programu (seg: offset) (*)
0EH
4
adres programu obsługi CTRL-BREAK
12H
4
adres programu obsługi błędu krytycznego
2CH
2
Adres otoczenia programu (segment)
80H
128
bufor transmisji dyskowych (DTA) początkowo zawiera wiersz
wejściowy (command line)
(*) dwa pierwsze bajty zawierają offset , następne dwa segment
Pole 80H wiersz wejsciowy przekazany do PSP ma następującą postać
| 80H | 81H | …. |
| długość |
| ciągu | przekazany wiersz wejściowy bez nazwy programu, zaczynający sie od znaku następującego po
| znaków | nazwie programu najczęściej spacji. Ostatni znak przekazywany to (0DH) powrót karetki nie
wliczany do długości
np linia poleceń c:\> win /row
| 5 |_win/row(0DH)
_ = spacja