Programowanie w językach symbolicznych - LABORATORIUM
Sprawozdanie z ćwicz. Nr 1 z dn. 4.04.1998 - Asembler
1.. Cel ćwiczenia - poznanie narzędzi do tworzenia programów (edycji,
asemblacji, linkowania, debugowania).
Napisanie 3 prostych programów a asemblerze.
2. Narzędzia do tworzenia: Asembler, Linker, Debugger. Wykorzystywano Turbo
Assembler v. 2.0 Borland -
TASM.EXE, Turbolinker Turbo Link v3.0 - TLINK.EXE, Turbo Debugger v 2.0
Borland - TD.EXE,
Turbo Debugger Symbol Table Stripper v. 2.0 .(do zamiany plików EXE na COM).
Opcje programów
Turbo Assembler Version 2.0 Copyright (c) 1988, 1990 Borland International
Syntax: TASM [options] source [,object] [,listing] [,xref]
/a,/s Alphabetic or Source-code segment ordering
/c Generate cross-reference in listing
/dSYM[=VAL] Define symbol SYM = 0, or = value VAL
/e,/r Emulated or Real floating-point instructions
/h,/? Display this help screen
/iPATH Search PATH for include files
/jCMD Jam in an assembler directive CMD (eg. /jIDEAL)
/kh#,/ks# Hash table capacity #, String space capacity #
/l,/la Generate listing: l=normal listing, la=expanded listing
/ml,/mx,/mu Case sensitivity on symbols: ml=all, mx=globals, mu=none
/mv# Set maximum valid length for symbols
/m# Allow # multiple passes to resolve forward references
/n Suppress symbol tables in listing
/o,/op Generate overlay object code, Phar Lap-style 32-bit fixups
/p Check for code segment overrides in protected mode
/q Suppress OBJ records not needed for linking
/t Suppress messages if successful assembly
/w0,/w1,/w2 Set warning level: w0=none, w1=w2=warnings on
/w-xxx,/w+xxx Disable (-) or enable (+) warning xxx
/x Include false conditionals in listing
/z Display source line with error message
/zi,/zd Debug info: zi=full, zd=line numbers only
Turbo Link Version 3.0 Copyright (c) 1987, 1990 Borland International
Syntax: TLINK objfiles, exefile, mapfile, libfiles
@xxxx indicates use response file xxxx
Options: /m = map file with publics
/x = no map file at all
/i = initialize all segments
/l = include source line numbers
/s = detailed map of segments
/n = no default libraries
/d = warn if duplicate symbols in libraries
/c = lower case significant in symbols
/3 = enable 32-bit processing
/v = include full symbolic debug information
/e = ignore Extended Dictionary
/t = create COM file
/o = overlay switch
/ye = expanded memory swapping
/yx = extended memory swapping
Turbo Debugger Symbol Table Stripper Version 2.0 (c) 1988, 1989 Borland Intl
Syntax: TDSTRIP [options] exefile|objfile [outfile]
-s Symbol table is put in a file with the same name as
exefile but with an extension of .tds. If you specify an
outfile, a symbol table will be put in outfile.
If you don't specify the -s option, the symbol table is
removed from the exefile. If you specify an outfile, the
original exefile is left unchanged and a version with no
symbol table is put in outfile. Ignored on .OBJ's
-c COM file is generated from the EXE file. Ignored on .OBJ's
If you don't supply an extension with exefile, .exe is presumed.
If you don't supply an extension with outfile, .exe is added when
you don't use -s, .obj is added if an .obj name is provided,
and .tds is added when you do use -s.
Turbo Debugger will look for the symbol file when it loads an
exefile that does not have a symbol table.
3. Programy w asemblerze napisane
i skompilowane
1) POWITAN.ASM - program typu EXE wyświetlający tekst „Witaj” na
ekranie. Program zawiera
- dyrektywę Assume CS: Code, DS: data,
- segment data z definicją łańcucha znaków „Witaj”, zakończonego powrotem do
nowej linii (0dh, 0ah)
oraz znakiem końca łańcucha ‘$” dla DOS
- segment kodu (code segment)
- definicję stosu - zarezerwowano 200h bajtów
Program poddano asemblacji komendą TASM POWITAN.ASM i utworzył się program
POWITAN.OBJ.
Następnie dokonano linkowania: TLINK POWITAN.OBJ - utworzył się program
POWITAN.ASM.
Potem powtórzono ten proces ale z innymi opcjami:
TASM Powitan.asm,,Powitan.lst /zi (zi - debug info full). Powitan.lst - plik
listingu.
TLINK Powitan.asm /v (/v = include full symbolic debug information)
2) POWCOM.ASM - program o tej samej funkcji jak poprzedni ale w
wersji COM - POWCOM.ASM
Program ten ma
- dyrektywę ASSUME cs:code, ds:code - assume odnoszą się do tego samego
segmentu kodu
segment kodu (code segment) a
w nim:
- dyrektywę ORG 100h, która zmienia zawartość pozycji asemblera -
program rozpocznie się od adresu 100h względem segmentu
- etykietę start:
- etykietę begin
- code ends - kończy segment kodu
- end start - koniec programu z informacją, że wykonanie
programu rozpocząć od start.
Program po asemblacji najpierw z linkowano z opcją -t: TLINK -t Powcom.obj
uzyskując program wykonywalny
Powcom.com o znacznie mniejszej wielkości niż typu EXE.
Następnie poddano linkowaniu z opcją /v: TLINK Powcom.obj /v - utworzył się
program Powcom.exe,
który zamieniono na COM przy pomocy programu Tdstrip:
TDSTRIP -c -s POWCOM.EXE. Utworzył się też plik Powcom.tds.
Programy typu COM są krótsze od EXE. Nie nastepuje w nich ładowanie rejestru
segmentu danych,
stos tworzony w tym samym segmencie kodu na końcu, nie wolno tworzyć własnego
segmentu stosu.
Jeden segment może mieć 64 KB, czyli taka może być max wielkość programu typu
COM,
bo mieszczą się w jednym segmencie.
3) MALDUZ.ASM typu COM, zamieniający małe litery na duże i kończący się
naciśnięciem klawisza ESC
Program zawiera tylko segment kodu, deklarację łańcucha znaków zachęty,
etykiety begin, bez_zm, wyświetl, koniec
Występują wywołania funkcji DOS: 09h - wyświetl string, 08h - wczytaj znak, 02h
- wyświetl znak, 04ch
- zakończ proces, z wykorzystaniem skoku do obsługi przerwania int 21h.
Występują polecenia mov - ładowanie, jmp - skok bezwarunkowy, jl - skok gdy
mniejsze, jg -
skok gdy większe, cmp - porówanie, sub - odejmowania (20h w celu zamiany liter)
Program skompilowano najpierw do wersji EXE a potem zamieniono na COM przy
pomocy TDSTRIP.
4. Turbo Debugger TD
W menu górnym m.in. opcje: File (Open - otwieranie pliku, domyślnie EXE, Resident
- TD staje się rezydentnym),
View (Breakpoints, Stack, CPU, registers, Numeric processor, Clipboard), Run (w
tym Trace,
Animate - animacja wykonania programu), Breakpoints, Options (Language, np.
assembler).
5.