Category "IS-DOS - programmers" No 3
Prokopenko SV
Ed. Eliseev, VA
"The format object modules *. obj
IS-DOS Assembler "
________________________________________
This article discusses the object module format adopted in
the IS-DOS and supported by IS-DOS assembler and linker object
modules link.com. This format is an official standard IS-DOS.
If you want to move to the IS-DOS finished object modules from
other operating systems (such as CP / M 80), or write your own
translator of any high-level language, we strongly
recommend that you stick with it
format that would allow the sharing of your developments with
IS-DOS Assembler and simplify the creation of
ready-made library of procedures for the IS-DOS.
The article is written primarily
for professional programmers and software developers wishing to
create tools
Programming for the IS-DOS.
________________
Files in the format *. obj created
IS-DOS Assembler and provide input
files for the linker link.com.
The task is to create link.com
downloadable code module from *. com
one or more object modules
received broadcast program texts.
Object file *. obj consists of
several regions, with lengths and relative displacements of the
beginning of the file identified in its first 32 bytes (see
Table 1):
Table 1.
Description of object files
--------------------------------------- Deposed. length value
---------------------------------------
0,1 (2) - a reference to the area of global
Ballroom Character Module -
region [1] (the shift from
beginning of the file)
2,3 (2) - the length of the field
4,5 (2) - a reference to the area of complex
symmetric with respect to the expression
stresses that determine the global
Ballroom symbols of the module -
region [2] (the shift from
beginning of the file)
6.7 (2) - the length of the field
8.9 (2) - a reference to the area of
programmatic area code
[3] (offset from the beginning
file)
10.11 (2) - the length of the field
12.13 (2) - a reference to the region of hell
ests custom
cell module and the remaining
shihsya nevychislennymi in
translation time expression
stresses that determine the
values of these cells
region [4] (the shift from
beginning of the file)
14.15 (2) - the length of the field
16-29 (14) - reserve
30-31 (2) - checksum lane
Out of 30 bytes file.
--------------------------------------
The checksum is considered the standard for IS-DOS way: a
two-byte cell, summed up the values of individual bytes of a
file.
Further, in the object module are listed above the field
in the named order. Linker link.com important that followed the
first area of global symbols (offset from the beginning of
the file = 32). The order of the remaining areas are not
important.
________________
Region 1. Global symbols
defined in this module.
All global symbols of the module are placed in this area
as a 16 byte records in a format close to the format
Table of global symbols *. gtb. The differences relate only to
character values and tag (*) these values. (See Table 2.)
-------------(*) Tag (English tag - a label ztiketka) -
Part of the data item (one or more bits of the word), which
determines its type. (Editor's note.)
-------------
Table 2.
The structure of global symbols.
---------------------------------------
Offset. length value
---------------------------------------
0,1 (2) - a reference to the previous
record
2,3 (2) - a reference to the following
record
4 (1) - number of characters in
the name of the symbol (N)
5 (N) - marks the name of the symbol
(Symbols)
5 + N (1) - the tag value of the symbol
6 + N (2) - symbol value
---------------------------------------
Possible tag values of the symbol:
1 - a symbol defined in terms of external
seekability expression that
must be recorded in the 2
object module. In this case,
bytes at offset 6 and 6 + N + N +1 is not
defined.
In other cases, the actual value
character is in a word at offset
6 + N.
% 10000000 - tag absolute value
symbol.
% 1 ******* - tag relative or
complex relative importance
symbol, where ******* - the degree of
relativity (see description Assem
Blair p.p.3.5.1, transferability when
expression evaluation). Relative
positive values are determined by relative
relative to the beginning of the module.
The degree of relativity here - it's
number of displacements, ie a number specifying how many times
a unit address must be added or subtracted to / from the value
symbol when linking to a particular address. This number is
defined as the 7-digit number with the sign bit in the bit
number 6.
Here, bit 6 plays the same role that
and bit 7 in the 8-bit signed number.
Thus, if 6 bits = 1, then
module address will not be added, and subtracted from the value
of the symbol when linking.
For example, after defining in assembler $ MET EQU - $
($-a reference to the program counter) $ MET object file
receive the tag value # FF, and the layout of the module
address will be subtracted from the values $ MET once.
________________
Area 2. Outside of seekability
expressions for the global symbols
defined in this module.
Expressions must be written in
postfix (*) form, separated
from another source 9 and lie in the same manner as that of the
global symbols related to these expressions.
-------------(*) Postfix form of the expressions -
a form in which the operands are first written, and then -
Operators for example 2 instead of 4 + 2 + 4. (Editor's note.)
-------------
Operands are written in standard form (see Table. 4 in the
section "Format of the expressions"). As an example of such an
expression can be reduced as follows:
Let MET - label offset from
beginning of the module # 33.
For the global label $ met EQU
MET/256 in the object file will be placed
such expression in region 2 (hex format):
80 33 00 80 00 01 2F.
# 33256 /
________________
Area 3. The code module.
The area should contain the code of the processor up to a
configurable value of bytes and words. And everything must be
defined relative 2-byte values. Bytes, not defined in the
module, or certain as external, complex relative, and
also relative, but not 2-byte
length can be any value (assembler writes back 0).
________________
Area 4. Addresses and values
custom cell module.
The region consists of the records (two types), and should
okanchivaetsya 4 bytes # FF.
Types:
1.Adresa 2-byte cells with a relative value.
For example, in a fragment of MET: LD
HL, MET value at MET +1 will be
simple relative (to the register is loaded label value) and,
therefore, address MET +1 should be written in 4 areas
as a record type 1. This address is an offset from the beginning
area code object module to a custom cell. In this case, the
relative importance of the custom will be lie on the address in
the code module. Therefore, to set up 2-byte cell is enough to
know its address. This, practically, the most common type of
custom values for layout modules.
2. All other addresses of cells whose values are not
determined until the end during the broadcast (along with the
expressions that define these values). Format this record is as
follows (see Table 3)
Table 3
Address format custom cells.
--------------------------------------- Deposed. length value
---------------------------------------
0.1 (2) - # FFFF - sign of the beginning
la record to distinguish it from
record type 1.
2 (1) - tag is determined by the value
notation:
0 - 2-byte word
1 - 1 - byte cell
2 - cell - the argument
short transition teams
of the type
JR AAA; JR CC, AAA; where
CC-condition for the transition.
3 - number of bits (for any
command of bit operations)
4 - type of interruption (the argument
ment teams IM)
5 - number of restarts (the argument
ment team RST)
3,4 (2) - address is set
cell (the same as that
in the case record type 1)
5 -... ... - An expression in postfix
form (for details see
below under the heading "Four
Math Expressions ").
... (1) - Code 9 - a sign of the end
expression.
---------------------------------------
Format expressions.
To speed up computation
expressions when linking them is usually written in postfix
form, ie when the operators come after their arguments.
Recognizes the following operators:
Binary:
+ 2B addition
- 2D subtraction
* 2A multiplication
/ 2F division
'& 26 bitwise logical "and".
@ 40 bitwise logical "or".
! 21 bitwise logical exclusion
sponding to "or".
? 3F MOD operator
Unary:
, 2C minus sign (the sign of number)
^ 5E squaring (2 ^)
The recording format of the arguments following
(See Table 4).
Table 4.
The format of the operands in expressions.
---------------------------------------
Offset. length value
---------------------------------------
0 1 - Tag value of the argument.
1 2 - Numeric value argument
ment.
or
1 N - Symbolic value
argument length in the N values
Cove, is used to
inclusion in the expression
undefined in the module
characters. N can be
1 to 6.
---------------------------------------
Types of tags:
If the high bit - 1, then the argument
has a numeric value.
% 10000000 - the argument ab
absolutely
% 1 ******* - relative or complex
the relative value of the argument
******* degree (see the description of the degree of
description of the area 1).
If the high bit - 0, then the argument NEs
us to undefined symbol in module
ox, and the tag determines the number of settlement
leduyuschih him symbol characters.
For example, the tag% 00000 *** asterisks indicate the
number of characters in the symbol. This number can be from 1
to 6.
Examples of records of expressions:
Expression
<MET+1> / 256 '& amp2 ^ 3,
where MET - mark with a relative shift in the module # 10, will
appear in object module as the next line in the
hex format:
81 10 00 80 01 00 80 00 01 2B 2F
MET 1 + 256 /
80 03 00 5E 26
March 2 ~ '&
81 - tag relative importance of degree 1 (for the label MET).
80 - the tag of the absolute values for the numbers
1, 256 and 3.
Expression
2 * <MET+1>,
where MET - not defined in the module symbol will appear in the
object module as the following string in hex format:
80 02 00 03 4D 45 54 80 01 00 2B 2A
2 M E T 1 + *
80 - the tag of the absolute values for the numbers
2 and 1.
03 - the tag character values for the undefined symbols MET 3
characters. ________________________________________