background image

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