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.