home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Shareware BBS: 10 Tools
/
10-Tools.zip
/
ASDT.LZH
/
ASDT.INF
(
.txt
)
< prev
next >
Wrap
OS/2 Help File
|
1990-11-20
|
93KB
|
4,131 lines
ΓòÉΓòÉΓòÉ 1. ASDT - Application/System Debugging Tool ΓòÉΓòÉΓòÉ
Preface
This manual describes the IBM Application/System Debug Tool, ASDT, which aids
software debugging under IBM Operating System/2. Using ASDT, you can:
o Debug OS/2 device drivers and applications that run in either the protected
or real mode or both.
o Gain control from OS/2 via Int 1, Int 3, NMI, or a hot key. Additionally,
gain control on certain error conditions (Int 0, Int 6, Int C, and Int D).
o Step execution (single, multiple, or procedure).
o Stop program execution at up to 162 specified points.
o Display or alter processor registers.
o Display or alter processor memory (ASCII or EBCDIC translation).
o Display LDT, GDT, and IDT entries.
o Assign register or variable contents to other registers or variables.
o Search memory to find a character string in hex, ASCII, or EBCDIC.
o Compare two areas of memory.
o Copy one area of memory to another.
o Fill an area of memory with a specific character.
o Disassemble blocks of instructions (ASM86(*) or Intel (MASM) mnemonics).
o Evaluate numeric expressions with scratch pad space for results.
o Maintain a separate screen for your program.
o Support APA modes for all adapters.
o Read in a profile during initialization phase for later execution.
o Print out the ASDT screen, formatted instructions, or formatted memory.
o Terminate the current process and return to OS/2.
o Invoke user-defined function routines.
o Identify the invocation path of the current thread or of a thread associated
with a specific breakpoint.
o Halt and resume threads to view screen groups or to begin a new OS/2
session.
o Restore/take specific interrupts to/from OS/2 to support device drivers that
have a need to control these interrupts.
o Use multiple screens or a remote terminal to view both your application
screen and the ASDT screen at the same time.
o Use the 80386 hardware debug registers to trap instruction execution or
specific memory reads or writes.
* - ASM86 is an IBM Internal cross assembler (not provided with this program).
ASDT uses a full screen format to display breakpoints, registers, memory,
disassembled instructions, and other information.
System Requirements
ASDT runs on an IBM PC/AT or PS/2 under OS/2 1.1 and later and uses
approximately 122KB of memory.
ΓòÉΓòÉΓòÉ 1.1. Getting Started ΓòÉΓòÉΓòÉ
ΓòÉΓòÉΓòÉ 1.1.1. Introduction ΓòÉΓòÉΓòÉ
ASDT runs under IBM OS/2 as a device driver. It runs in both the protected
(virtual) mode and the DOS compatibility box (real) mode. This user's guide and
reference manual deals mostly with the protected-mode aspects of ASDT. However,
it points out some key areas of differences of ASDT operation in protected mode
versus real mode. Where the manual is not explicit about this, you should
assume similar actions for either mode.
The device driver or application program that you wish to debug should contain
an Int 3 at a location where you want ASDT to gain control the first time. This
location is often the first instruction of your device driver or application
program.
You can also make ASDT gain control through an NMI or a hot key. The ASDT hot
key is the PrtSc key (by default), which must be activated before ASDT will
recognize it as a request to obtain control. You can activate the hot key
either by using the SK command (see SK - Set Keyboard Hot Key) or by using the
/K option discussed below.
ΓòÉΓòÉΓòÉ 1.1.2. Installing ASDT ΓòÉΓòÉΓòÉ
1. Use LoadRam2 (supplied on the diskette) to unpack the ASDT.RAM file (in
the PROGRAMS directory of the diskette) into a directory specified by the
PATH statement in your CONFIG.SYS.
For example, from the diskette drive prompt (eg. A:), type:
LOADRAM2 A:\PROGRAMS\ASDT.RAM C:\PSTOOLS /D
This should unpack the following files into the PSTOOLS directory on your
C drive (providing that this directory exists):
README TXT // General guidelines
ASDT EXE // the first of two EXE files for ASDT.
ASDT2 EXE // the second of two EXE files for ASDT.
UX DLL // the DLL file for ASDT.
ASDT INF // Help file -- type 'VIEW ASDT'
(For more information on LoadRam2 see the help provided with LoadRam2, or
type "LoadRam2 ?" ).
2. Copy UX.DLL into a sub-directory which is in your LIBPATH statement in the
CONFIG.SYS file. (e.g. C:\PSTOOLS\DLL).
3. Add the following commands to your CONFIG.SYS file:
DEVICE=[PATH] ASDT.EXE [profile] [options]
DEVICE=[PATH] ASDT2.EXE
where: profile - a file containing ASDT commands (file name
must be fully qualified)
options -
/K=nn - set nn as the hot key scan code (=nn is
optional, and ASDT defaults the hot key to be
the PrtSc key)
/M - have ASDT use multiple screens
/R=n - have ASDT use a remote terminal (using COMn)
/U=nn - specify the user mask for ASDT (nn represents
the user mask)
/W - have ASDT use window assumptions
/n - (where n is one of 0, 1, 2, 3, 6, C, or D)
have ASDT not take over INT n
This allows OS/2 to install ASDT as a device driver. After installation,
ASDT can gain control on various interrupts or a hot key.
If you want to debug another device driver during its initialization phase,
make sure ASDT is installed prior to that device driver in your CONFIG.SYS
file.
You may specify an ASDT profile file name for ASDT to read in. Once ASDT is in
control, you can execute your profile with the EP - Execute Profile command.
ΓòÉΓòÉΓòÉ 1.1.3. How to Begin Debugging with ASDT ΓòÉΓòÉΓòÉ
To begin debugging, you need to know how to do several key things. The
following list describes these debugging steps and assumes the default ASDT
function keys are set.
Debug Task ASDT Command to Use
Start ASDT To cause ASDT to take control from OS/2, run the program
you wish to debug making sure it contains an Int 3
instruction ('CC'x).
Note: ASDT can gain control through several interrupts.
However, an Int 3 instruction that has been
inserted into your program is the most common
interrupt taken.
Single Step ST (key F8)
Executes one instruction in your program.
Set Breakpoints Sn
Sets one of the breakpoints to an address in your program.
Examples: S1 = CS:IP+23 sets a breakpoint 23 bytes from
the instruction about to be executed.
Execute EX (key F7)
Executes your program until it terminates, until it
reaches a breakpoint, or until it reaches an ASDT-captured
interrupt.
Set Registers Set any register by entering its name followed by an
expression containing its new value.
Examples: AX=BX+CX sets register AX. ES=DS sets register
ES. BP=SP+CX sets register BP.
Disassembly/Memory L1-L9, M1-M6
Creates a disassembly or memory window (whichever is the
primary window) on one of the window area lines.
Windowing NW (key F4)
Toggles among disassembly, memory, LDT/GDT, and IDT
windows.
Get Help HP (key F1)
Displays a single help screen listing ASDT commands.
Return to OS/2 TP (key F3)
In protected mode, TP is valid only for processes that are
not running at level 0. For those processes that are
running at level 0, you need to execute (EX) to completion
to return to OS/2. In the DOS compatibility box, you
should use the TP command only to terminate an application
(not a device driver, a resident interrupt handler, etc.).
See Entering ASDT Commands for a discussion of ASDT command line handling and
Window Area for a discussion of ASDT window editing.
ΓòÉΓòÉΓòÉ 1.1.4. Function Keys ΓòÉΓòÉΓòÉ
ASDT sets function keys F1-F10 for you. You can change them to other valid ASDT
commands, and you can also set the shifted, controlled, and alternate function
keys. The default keys are:
F1 Help (HP)
F2 Define Keys (DK)
F3 Terminate Process (TP)
F4 Next Window (NW)
F5 Repeat Find (FX)
F6 Application Screen (SC)
F7 Execute User Program (EX)
F8 Single Step User Program (ST)
F9 Procedure Step User Program using S9 (S9=EX+IL;EX;S9)
F10 Retrieve Command (RC)
ΓòÉΓòÉΓòÉ 1.2. Using the ASDT Display ΓòÉΓòÉΓòÉ
For the disassembly and memory windows, the ASDT display has the following
areas:
Line 1 ASDT's name, release, release date, primary window, current
character translation, and current screen.
Lines 2-3 breakpoints and scratch pad variables.
Line 4 general registers, flags, and top four words of stack.
Line 5 specific registers and flags.
Line 6 selector registers.
Line 7 SP register, instruction pointer, code origin, and step count.
Line 8 address about to be executed, location counter, next
instruction (disassembled), and operand address and contents.
Line 9 command line.
Line 10 messages and trace information.
Lines 11-25 window area containing line numbers, new window indications,
and views of disassembly, memory, or table elements.
For the LDT/GDT and IDT windows, the following changes are made:
Line 1 GDT address, IDT address, LDT register, process id, thread id,
and task state register.
Line 8 LDT/GDT or IDT indicator, address about to be executed,
location counter, next instruction (disassembled), and operand
address and contents.
Lines 11-25 LDT/GDT or IDT window containing line numbers and LDT, GDT, or
IDT descriptor entries.
A disassembly line is divided into three editable sections: the selector and
offset parts of the address, the hexadecimal instruction, and the
instruction's operand value. In addition, ASDT displays the instruction
mnemonic and the operand address.
A memory line is divided into three editable sections: the selector and
offset parts of the address, the hexadecimal memory, and the equivalent
ASCII/EBCDIC characters.
An LDT, GDT, or IDT line is divided into these sections: an index into the
descriptor table, the type of descriptor, and other information based on the
type of descriptor. LDT, GDT, and IDT lines are not editable.
You can move the cursor anywhere on the command line and can move it off the
command line to the disassembly or memory window area. You use the command
line to enter ASDT commands and the window area to view or edit instructions,
memory, and descriptors. The following sections discuss how to enter ASDT
commands, how to move the cursor within the disassembly or memory window, and
how to alter instructions or memory.
ΓòÉΓòÉΓòÉ 1.2.1. Memory Format ΓòÉΓòÉΓòÉ
On lines above the command line, ASDT displays memory in register format; i.e.,
not byte-reversed. ASDT also uses this format for the operand values at the
right edge of disassembly lines below the command line. On memory lines below
the command line, memory is displayed in Intel byte-reversed format.
ΓòÉΓòÉΓòÉ 1.3. Entering ASDT Commands ΓòÉΓòÉΓòÉ
ΓòÉΓòÉΓòÉ 1.3.1. Command Line Input ΓòÉΓòÉΓòÉ
You use the command line for entering all of the ASDT commands. When you press
the ENTER key, ASDT processes the command line. Command processing begins with
the first command on the command line and continues with the remaining
commands. You separate commands with semicolons. Command line processing also
stops when ASDT encounters an invalid command.
When command line processing finishes, the cursor moves to the beginning of the
command line. The command line is cleared unless the first character of the
command line is a slash (/) or unless an error was encountered. The sole
function of the slash at the beginning of the command line is to preserve the
command line so you can see and use it again.
You can place as many commands on the command line as will physically fit. You
can place one or more blanks before or after each command. There is no
restriction on the sequence or combinations of commands.
ΓòÉΓòÉΓòÉ 1.3.2. Profile Input ΓòÉΓòÉΓòÉ
An alternative to typing ASDT commands on the command line is reading them in
from a profile on disk. This profile, which you can create with any standard
editor, is read in at ASDT installation time. Its commands are executed with
the Execute Profile (EP) command (See EP - Execute Profile for more
information.)
All commands in the profile must follow standard ASDT command rules; that is,
they are processed as if they had been entered on the command line. They must
fit on the command line, which is 76 characters long. A slash at the beginning
of a line in a file is ignored.
The following discussion of command handling applies to the command line and to
profiles.
ΓòÉΓòÉΓòÉ 1.3.3. Command Parsing ΓòÉΓòÉΓòÉ
The command line format is as follows:
[/] cmd = opnd [ ; cmd = opnd ; cmd = opnd ; . . . ]
If the optional slash at the beginning is present, ASDT will not erase the
command line when it finishes processing the commands. If you wish to enter
more than one command on the command line at a time, separate the commands with
semicolons.
Commands are always two characters in length. You can follow the last command
with a semicolon. This trailing semicolon does not affect command line
processing. However, it allows you to use the Tab key to position the cursor
after the last command if you wish to add another command.
The blanks as well as the "=" sign between the "cmd" and the "opnd" are
optional. This condensed syntax is not elegant, but you can save unnecessary
keystrokes by using it:
cmdopnd;cmdopnd;cmdopnd; . . .
ΓòÉΓòÉΓòÉ 1.3.4. Specifying Operands ΓòÉΓòÉΓòÉ
An operand begins with the first non-blank (other than =) following the command
and continues to a semicolon or continuous blank characters. If there are only
blanks following the command, the operand is null.
Expression Evaluation
Most operands are expressions. An expression is one or more terms which are
added together. A term may be a decimal or hexadecimal number, one of the
processor registers, or one of the ASDT variables.
The ASDT variables include the breakpoints (V1-V9 and S1-S9) displayed on the
ASDT screen, the memory address variables (L1-L9 and M1-M6) displayed on the
ASDT screen, and the other variables (M7-M9) that are not displayed. These
other variables can be used as scratch pad space for expression or address
calculations. (See "Valid Terms" below for a complete list of ASDT variables.)
The "+" and "-" signs may precede terms. The optional "+" sign performs no
function but can improve operand readability. The "-" sign negates the term
before the addition is performed. You can precede a term with multiple signs,
and you can use blanks freely between terms and their signs.
Terms which are processor registers or ASDT variables are always two characters
in length. Decimal and hexadecimal terms have variable length. A blank, sign,
special operator, or another term must follow a numeric term to delimit that
numeric term; there is no such requirement for register or variable terms.
Decimal terms are distinguished from hexadecimal terms by a trailing decimal
point.
Indirect terms are distinguished from other terms by a trailing "%" character
and optional length. Indirect terms allow you to use the contents of a memory
location indirectly. When you specify an indirect address, ASDT uses the
location contents for the number of bytes you specify.
All calculation results are displayed in hexadecimal format. Decimals,
hexadecimals, registers, and variables are all converted to hexadecimal format
for calculation.
Expression Examples
The following examples portray several different ASDT commands with various
operand expressions and terms.
CO = CS:4E8 assign CS and offset 4E8 to CO
V1 = 10. + 20. + 44. decimal arithmetic
M7 = AX + 4A23 - 10. combined arithmetic
S1 = CO:13 set breakpoint at CO + 13
AX = ES:BX%4%2 set AX to contents of memory pointed to by a
4-byte pointer, which is pointed to by ES:BX
Expression Syntax
In the following equivalent examples, the ASDT variable V1, the negative value
of processor register BX, hexadecimal 4A, and the processor register AX are
added together with the result being placed into the AX processor register.
AX = V1 - BX + 4A + AX optimum readability
AX=V1-BX+4A+AX optional blanks removed
AX V1-BX 4A AX optional "=" and "+" removed
AXV1-BX4A AX fewest keystrokes
Valid Terms
The following list shows all of the valid processor register and ASDT variable
terms which you can use in an expression. Hexadecimal, decimal, and indirect
terms are also valid.
ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
Γöé AH CH DI FL LD TS Γöé
Γöé AL CL DL FX M1-M9 V1-V9 Γöé
Γöé AX CO DS GD OP XS Γöé
Γöé BH CS DX ID SI Γöé
Γöé BL CT EC IL SP Γöé
Γöé BP CX ES IP SS Γöé
Γöé BX DH EX LC S1-S9 Γöé
ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
It is useful to remember that all registers and variables displayed on the
screen (except the binary flag bits) are valid terms for an expression. All
registers and variables displayed on the screen including the binary flag bits
are valid ASDT commands.
Most commands are also the name of a variable (e.g., AX, DS, or L1). When one
of these commands is used, there is an assignment to the variable. For example,
the command AX=BX+123 assigns the value BX+123 to AX. It is important to
remember that AX is the command because in some cases the assignment causes
other results. For example, S1=DS:BX+123 causes ASDT to assign the value
DS:BX+123 to S1 and activates the breakpoint S1.
Some ASDT variables are not commands. They are the EC, GD, ID, IL, and OP
variables. The EC variable is the error code that is returned by OS/2 when a
general protection fault occurs. ASDT initializes EC to 0, and EC changes value
with each Int D. The GD and ID variables allow you to use the base address of
the GDT and the IDT in physical address expressions. The IL variable holds the
current instruction's length in bytes while the OP variable has the address of
the byte/word referenced by the current instruction (if any).
Address Evaluation
ASDT expects addresses to be in one of two forms: selector:offset or physical
address. If the address expression contains a colon (:), a selector register
(CS, DS, ES, SS, or XS), or an ASDT variable that is in selector:offset form,
then ASDT assumes the address is in selector:offset form. In this case, the
selector must reference a valid descriptor, and the offset must be within the
segment limit for that descriptor. Any other address is considered to be a
physical address, and ASDT treats it as a six-hexadecimal digit (higit) number.
Note: In real mode, the address evaluation expected is either a segment:offset
or a physical address. In the case of segment:offset addresses, all
segments are considered valid. The physical address range, however, is
limited by the 1M line (5-higit number).
ΓòÉΓòÉΓòÉ 1.3.5. Moving on the Command Line ΓòÉΓòÉΓòÉ
ASDT recognizes the following function keys on the command line:
Enter Moves the cursor to the beginning of the command line and
executes the commands on the command line.
Home Moves the cursor to the beginning of the command line.
End Moves the cursor to the end of text on the command line.
Up Arrow Moves the cursor to the first line of the disassembly or
memory edit area (valid only in a disassembly or memory
window).
Down Arrow Moves the cursor to the first line of the disassembly or
memory edit area (valid only in a disassembly or memory
window).
Left Arrow Moves the cursor left one position unless the cursor is at the
beginning of the command line.
Right Arrow Moves the cursor right one position unless the cursor is at
the end of the command line.
PgUp Scrolls the window up the number of lines in the window (valid
only in an LDT/GDT or IDT window).
PgDn Scrolls the window down the number of lines in the window
(valid only in an LDT/GDT or IDT window).
Ctrl-PgUp Scrolls the window up one line (valid only in an LDT/GDT or
IDT window).
Ctrl-PgDn Scrolls the window down one line (valid only in an LDT/GDT or
IDT window).
Tab Moves the cursor to the next command on the command line and
wraps around from the last command to the first command.
Back Tab Moves the cursor to the previous command on the command line
and wraps around from the first command to the last command.
Spacebar Replaces the character at the cursor position with a blank and
moves the cursor right one position.
Backspace Moves the cursor left one position, erases the character at
the new cursor position, and moves the remainder of the
command line left one position.
Insert Changes the insert mode. A caret at the beginning of the
command line indicates that insert mode is active.
Del Erases the character at the cursor and moves the remainder of
the command line left one position.
Shift Shifts to upper case and reverses the effect of Caps Lock.
Caps Lock Shifts to upper case for the alphabetic keys.
Ctrl-Home (Clear) erases the entire command line and places the cursor
at the beginning of the command line.
Ctrl-End (Clear End-of-Line) erases the command line beginning at the
cursor position continuing to the end of the command line.
PrtSc Causes the ASDT screen to be printed.
ASDT recognizes the following function keys while the user program is
executing:
PrtSc As the default hot key, interrupts user program if the /K
option was specified or the SK command was issued prior to
executing the user program.
Note: ASDT assumes that you want to print your screen when
you depress the shift key at the same time that you
depress the PrtSc key. On some hardware
configurations, you need to depress the shift key a
full second or two before depressing the PrtSc key to
have ASDT ignore the keystrokes and allow OS/2 to print
your screen. This key will be replaced as the hot key
if the /K=nn option or SK=nn command is issued (nn will
act as the scancode of the hot key).
ΓòÉΓòÉΓòÉ 1.4. Window Area ΓòÉΓòÉΓòÉ
The window area occupies the bottom portion of the ASDT display. This area is
where you view disassembled instructions, memory, LDT/GDT descriptors, and IDT
descriptors. You can access the window area through window commands, individual
window line commands, and direct editing in the window itself.
The window consists of fifteen lines. Each line has a line identifier that is
used to address the lines with commands. These identifiers are the ASDT
variables L1 through L9 and M1 through M6. Each window line displays its
identifier at the beginning of the line. You can address any window line in any
window with the L1-L9 and M1-M6 commands.
There is always a primary window. The primary window is the type of line that
is displayed on line L1, the first line in the window display area of ASDT.
Initially, the primary window is disassembly. The primary window can be
disassembly, memory, LDT/GDT, or IDT.
You can set up a secondary window for disassembly and memory windows. If the
primary window is disassembly, then the secondary window must be memory. If the
primary window is memory, then the secondary window must be disassembly.
You can divide all primary windows into multiple window segments. Every primary
window line shows an asterisk near the front of the line when that line starts
a window segment. Multiple window segments allow you to view more than one
disassembly, memory, LDT/GDT, or IDT address at once.
You can set up the window area in any of the following configurations:
Window Type Contents Segments Browse Edit
Disassembly 15 disassembly lines 1-15 Yes Yes
Memory 15 memory lines 1-15 Yes Yes
Disasm/Memory 15 disasm/memory lines 1-14,1 Yes Yes
Memory/Disasm 15 memory/disasm lines 1-14,1 Yes Yes
LDT/GDT 15 LDT/GDT lines 1-15 Yes No
IDT 15 IDT lines 1-15 Yes No
ΓòÉΓòÉΓòÉ 1.4.1. Window Contents ΓòÉΓòÉΓòÉ
The disassembly window area shows portions of memory as hexadecimal
instructions and disassembled mnemonics for those instructions. A disassembly
window consists of one to fifteen lines showing a contiguous block of
disassembled instructions. Each disassembly line shows an address (either
selector:offset or six-higit physical), the hexadecimal instruction, its ASM86
or Intel (MASM) mnemonic, an operand address and operand contents (byte or
word) if appropriate.
Within a disassembly window you may alter and scroll through instructions. You
can switch the mnemonic format with the DA (Disassemble ASM86) and DM
(Disassemble MASM) commands. Also, if the disassembly line is in the range of
the code origin (CO), ASDT displays a "$" near the front of the line and
displays the disassembly line address as :offset, where the offset is from the
CO. This allows you to display a disassembly segment that matches your assembly
listing.
The memory window area shows portions of memory. A memory window consists of
one to fifteen memory lines showing a contiguous block of memory. Each memory
line shows an address (either selector:offset or six-higit physical), sixteen
bytes (one paragraph) of memory in hexadecimal format, and the same sixteen
bytes in either ASCII or EBCDIC format. You can switch the format with the AS
(ASCII) and EB (EBCDIC) commands. Within a memory window you may alter and
scroll through memory.
The LDT/GDT window area shows LDT and GDT descriptors. Each LDT/GDT line shows
the table index, the descriptor type, and other descriptor information based on
the descriptor type. Likewise, the IDT window area shows IDT descriptors.
Within an LDT/GDT or IDT window, you may scroll through descriptor table
entries. These windows are browsing windows and do not allow you to edit the
descriptor table entries.
Note: The LDT/GDT and IDT windows are not available for display while ASDT is
operating in real mode.
ΓòÉΓòÉΓòÉ 1.4.2. Moving Among Windows ΓòÉΓòÉΓòÉ
A set of ASDT commands is available to move among all of the ASDT windows.
Moving among the different windows changes the primary window. In a disassembly
or memory window, the primary window type is displayed near the top right
corner of the ASDT screen. In an LDT/GDT or IDT window, the primary window type
is on the left side, near the middle of the ASDT screen.
Use the following commands to switch windows: MW (switch to memory), LW (switch
to LDT/GDT), VW (switch to IDT), and DW (switch to disassembly). To toggle
among the windows, use the NW (Next Window) command or press the F4 key. On
entry, the primary window is disassembly.
ΓòÉΓòÉΓòÉ 1.4.3. Moving in the Disassembly and Memory Windows ΓòÉΓòÉΓòÉ
The disassembly and memory windows are edit windows. ASDT recognizes commands
on the command line and the following function keys while editing these window
areas:
Enter Moves the cursor to the beginning of the command line and
executes the commands on the command line.
Home Moves the cursor to the beginning of the command line but
does not execute the commands on the command line.
Up Arrow Moves the cursor up one line. When the cursor reaches the
top of the window, it wraps around to the bottom line.
Down Arrow Moves the cursor down one line. When the cursor reaches the
bottom of the window, it wraps around to the top line.
Left Arrow Moves the cursor left to the next position where ASDT
accepts keystrokes. When the cursor reaches the beginning of
a line, it wraps to the end of the previous line.
Right Arrow Moves the cursor right to the next position where ASDT
accepts keystrokes. When the cursor reaches the end of a
line, it wraps to the beginning of the next line.
Ctrl-Left Arrow Scrolls the window up one byte.
Ctrl-Right Arrow Scrolls the window down one byte.
PgUp Scrolls the window up the number of lines in the segment.
PgDn Scrolls the window down the number of lines in the segment.
Ctrl-PgUp Scrolls the window up one line.
Ctrl-PgDn Scrolls the window down one line.
Tab Moves the cursor right to the next column. The cursor wraps
as it does with the Right Arrow.
Back Tab Moves the cursor left to the previous column. The cursor
wraps as it does with the Left Arrow.
Spacebar Functions similarly to the Right Arrow except that the
Spacebar is a valid data key when entering character data.
Backspace Functions similarly to the Left Arrow.
Del Deletes the window in which the cursor is located and
combines it with the previous window. If only one window
exists, no action is taken.
Shift Shifts to upper case and reverses the effect of Caps Lock.
Caps Lock Shifts to upper case for the alphabetic keys.
Ctrl-Home Moves the cursor to the beginning of the command line and
erases the entire command line.
PrtSc Causes the ASDT screen to be printed.
The LDT/GDT and IDT windows are browse windows. ASDT recognizes commands on
the command line and the command line function keys while browsing these
window areas. See Moving on the Command Line for a list of these keys.
When the window area is being used by the Compare Memory (CM) function,
different sets of function keys are available. See CM - Compare Memory for
details.
ΓòÉΓòÉΓòÉ 1.4.4. Altering Disassembly and Memory ΓòÉΓòÉΓòÉ
Creating Windows
A new window is created by entering a new address for the desired line. This is
done by typing over the old address or by entering one of the L1-M6 commands on
the command line. ASDT defines that line as the first line of a disassembly or
memory window. ASDT displays an asterisk at the left of the address to indicate
that the line begins a new window. The end of any window is determined by the
first line of the following window.
An "opposite mode" window segment is created by entering an MW or DW command on
the command line if you are in a disassembly or memory window mode. For
example, to create a memory window segment in the disassembly window at line
L8, enter MW L8 on the command line. To create a disassembly window segment in
the memory window at line M2, enter DW M2 on the command line.
Altering Data within a Window
You can alter disassembled instructions with hexadecimal input. To do this,
move the cursor to the appropriate byte in the hex area and type over the data
that is displayed. Each keystroke results in a modification of the instruction;
that is, ASDT updates the instruction as each hexadecimal digit is entered.
You can alter memory with hexadecimal or character input. To do this, move the
cursor to the appropriate byte in either the hex or the character area and type
over the data that is displayed. Each keystroke results in a modification of
memory; that is, one nibble is modified for each hexadecimal digit entered, and
one full byte is modified for each character entered in the character area.
ASDT updates a window area line under any of the following conditions:
o The cursor is on the window line.
o The window containing the line is assigned an address. For example, if there
is only one window, the command "L1=L1" will result in all lines being
updated.
o Any command that results in user program execution: EX or ST.
To prevent unintentional data alteration, ASDT will not move the cursor from
the address area to the hexadecimal area when a character key is pressed. Use
one of the cursor keys or the space bar to move the cursor into the
hexadecimal display area from the address area.
Deleting a Window
Delete a disassembly or memory window and combine it with the previous window
by pressing the Del key with the cursor anywhere in the window or by entering
the appropriate L1-M6 command without a parameter.
When the primary window is disassembly, the DW command deletes the memory
window segment if present. When the primary window is memory, the MW command
deletes the disassembly window segment if present.
ΓòÉΓòÉΓòÉ 1.5. Setting Breakpoints ΓòÉΓòÉΓòÉ
ASDT provides permanent, complex, and procedure step breakpoints. On each of
the nine ASDT display screens, you can have up to eighteen permanent or complex
breakpoints or up to seventeen permanent or complex breakpoints and one
procedure step breakpoint.
ΓòÉΓòÉΓòÉ 1.5.1. Permanent Breakpoints ΓòÉΓòÉΓòÉ
The permanent breakpoints are divided into primary and secondary groups. The
primary group is named S1 through S9, and the secondary group is named V1
through V9. The difference between the S group and the V group is that the S
breakpoints default to an "on" or active condition when set, and the V
breakpoints default to an "off" or inactive condition when set. V breakpoints
must be specifically turned on to become active.
The breakpoints are divided this way to give you visible breakpoints and
scratch pad space on each screen. Since nine active breakpoints are usually
enough for a given debug session, the nine inactive breakpoints serve as
scratch pad variables to hold intermediate calculations or base addresses.
Usually, you will use V1 through V9 as scratch pad variables and S1 through S9
as breakpoints. However, if you need more breakpoints on a screen, you can turn
any of the V variables on so that it becomes an active breakpoint.
ΓòÉΓòÉΓòÉ 1.5.2. Procedure Stepping ΓòÉΓòÉΓòÉ
ASDT provides a single temporary breakpoint which is used as a procedure step
or module step facility. This function is provided on a function key (F9)
because it consists of several ASDT commands. The procedure step is performed
by setting a breakpoint at the instruction following the current instruction,
executing, and then removing the breakpoint.
You will use the procedure step most frequently for CALL, INT, and REP
instructions. If you are stepping through your program and you reach one of
these instructions, the procedure step command sequence "S9=EX+IL;EX;S9" will
execute the subroutine or block of code and stop at the instruction following
the CALL, INT, or REP instruction. This uses breakpoint S9 as a substitute for
an automatic module step function. This function is assigned to function key
F9.
If you plan to use the built-in procedure step function, you should not set a
breakpoint in S9 since it will be replaced by the procedure step breakpoint. Of
course, you can set other breakpoints as procedure step breakpoints yourself by
issuing the appropriate commands.
ΓòÉΓòÉΓòÉ 1.5.3. Breakpoint Addresses ΓòÉΓòÉΓòÉ
ASDT supports two types of breakpoints. A breakpoint can be either a 6-higit
physical address or a selector:offset address. ASDT displays breakpoints in a
relative address format whenever possible. If the breakpoint address is not
more than 64KB greater than the active code origin (CO) address, ASDT displays
the breakpoint as an offset preceded by a "$." Otherwise, if the same condition
is true for CS, ASDT displays the breakpoint as an offset preceded by a "+."
If ASDT can not display a selector:offset breakpoint address as an offset of
either the CO or the CS, then ASDT displays this breakpoint as an offset
preceded by a "*." All inactive selector:offset breakpoint addresses are
displayed as an offset preceded by a "?." Physical addresses that can not be
displayed as an offset of either the CO or the CS are shown in a 6-higit
format. Inactive physical address breakpoints are always displayed in the
6-higit format. Null breakpoints are displayed as "......"
Note: When in real mode, you will set segment:offset breakpoints and physical
address breakpoints. The physical address breakpoints will be limited to
5 higits even though they will be displayed as 6 higits.
ΓòÉΓòÉΓòÉ 1.5.4. Complex Breakpoints ΓòÉΓòÉΓòÉ
You can change any active ASDT breakpoint to a complex breakpoint with the CB
command. Complex breakpoints have an optional condition and an optional count.
You will use complex breakpoints most often to stop when your program meets a
particular condition or when it executes the nth occurrence of a particular
instruction. Counts are also useful inside loops.
You can have both complex breakpoints and regular breakpoints set at the same
time. For each complex breakpoint, ASDT takes the breakpoint only when its
condition and count satisfy the requirements. Otherwise, it returns control to
your program for further execution.
To set a complex breakpoint, you must first have an active breakpoint. You
create an active breakpoint with the appropriate V1-V9 or S1-S9 command. Then
you use the CB command to add a condition and a count to the breakpoint to make
it complex.
You can display the current condition, count, and occurrence count for a
complex breakpoint by issuing the CB command with the breakpoint name as an
operand; i.e., "CB S5." ASDT will display the breakpoint's condition and count
on the command line so you can change them and reenter them easily. It also
displays the occurrence count, or the number of times the complex breakpoint
has been hit, on the message line.
ΓòÉΓòÉΓòÉ 1.5.5. Multi-process, Multi-thread Breakpoints ΓòÉΓòÉΓòÉ
All breakpoints that are set are maintained across all processes and threads
that are running. You can deactivate a breakpoint that is set for one process
or thread while ASDT has control over some other process or thread. Similarly,
you can reactivate a breakpoint that belongs to another process or thread.
See S1-S9 - Set Breakpoints S1-S9 and D1-D9 - Select Display for details on how
to deactivate and reactivate breakpoints. Pay particular attention to the
caveats given.
ΓòÉΓòÉΓòÉ 1.5.6. Sticky Breakpoints ΓòÉΓòÉΓòÉ
You can force ASDT to stop on every occurrence of a breakpoint by using the SB
command. This sticky nature is usually reserved for physical address
breakpoints and GDT virtual address breakpoints.
See the SB - Sticky Breakpoint command for more information.
ΓòÉΓòÉΓòÉ 1.6. 80386 Hardware Debug Registers ΓòÉΓòÉΓòÉ
In addition to the V1-S9 breakpoints, ASDT allows you to set the 80386 hardware
debug registers (assuming that you are running on an 80386). The debug
registers support both instruction and data breakpoints and can pinpoint when a
data item (for example) is altered.
See T0 - Suspend/Reactivate 80386 Hardware Debug Registers and T1-T4 - Set
80386 Hardware Debug Registers for details on how to set/reset and arm/disarm
these 80386 debug registers.
ΓòÉΓòÉΓòÉ 1.7. Indirect Addressing ΓòÉΓòÉΓòÉ
In addition to numeric values and ASDT variables, you can use indirect
addressing to reference the contents of memory. This allows you to examine and
use memory contents without having to look at the memory locations directly
using the various ASDT windows.
ΓòÉΓòÉΓòÉ 1.7.1. How to Use Indirect Addresses ΓòÉΓòÉΓòÉ
ASDT distinguishes indirect addresses by a trailing "%" and an optional length.
The syntax for an indirect address is:
target = expr %L
where:
target = the variable or register you wish to change,
expr = an ASDT expression for an address,
% = the trigger for an indirect address, and
L = the number of bytes you want to reference.
Valid values for L are 1, 2, and 4. If you do not specify any value for L, then
L defaults to 1. If L is 4, ASDT treats the 4 bytes in memory as a 4-byte
(selector:offset) pointer. L must follow immediately after the "%."
ΓòÉΓòÉΓòÉ 1.7.2. Indirect Addressing Examples ΓòÉΓòÉΓòÉ
The following examples illustrate various ways you can use indirect addresses:
AX = DS:SI %2 uses (DS:SI) -> memory for 2 bytes.
AH = DS:SI % uses (DS:SI) -> memory for 1 byte.
S1 = SS:BP%4 uses (SS:BP) -> memory for 4 bytes.
BL = DS:SI %4 % uses (DS:SI) -> memory to get a selector:offset
pointer, which will in turn be used to access 1 byte
of memory.
ΓòÉΓòÉΓòÉ 1.8. Hints for Using ASDT ΓòÉΓòÉΓòÉ
ΓòÉΓòÉΓòÉ 1.8.1. Profile Use ΓòÉΓòÉΓòÉ
ASDT will read a profile from disk if you specify the profile name in the
CONFIG.SYS file. The Execute Profile (EP) command is used to execute the
commands in the profile.
You can put any valid ASDT command or string of commands into a profile.
Suggested commands include Define Key (DK) commands that define function keys
that don't have defaults, commands to set up the display and colors as you want
them, and common ASDT commands you use each time you debug a program.
ΓòÉΓòÉΓòÉ 1.8.2. Disassembly ΓòÉΓòÉΓòÉ
ASDT provides a single instruction disassembly function even when you don't
have a disassembly window shown. The disassembly of the next instruction to be
executed, identified by the "EX" display, is always shown. If you set the
primary window to disassembly, then disassembled instructions are shown
beginning at L1, and ASDT will track the next instruction to be executed and
will always display it at L1.
You can indicate whether ASM86 or Intel mnemonics are to be used by using the
DA (Disassemble ASM86) or the DM (Disassemble MASM) command. If the instruction
has an operand which references memory, the operand address is calculated and
displayed as the OP variable. The non-displayed Instruction Length (IL)
variable contains the length of the current instruction in bytes.
You can use the variables OP and IL as command operands. For example, use the
command L1=OP to display the contents of memory at the current instruction's
operand address. This is the same operand address shown at the right side of
the first instruction in the disassembly window. Use the IL variable when
procedure stepping, as in "S9=EX+IL;EX;S9," which sets a breakpoint at the
instruction following the one about to be executed.
The disassembly function shows the instruction when a breakpoint is set. The
disassembly indicates that you have set the breakpoint at the proper place and
should help prevent inadvertent breakpoints in the middle of instructions. If a
breakpoint is placed in the middle of an instruction, the breakpoint will not
be hit during normal execution, and the instruction will probably be changed so
that it executes incorrectly.
ΓòÉΓòÉΓòÉ 1.8.3. Display Screens and Breakpoints ΓòÉΓòÉΓòÉ
A useful debugging technique is to use a different ASDT display (D1-D9) for
each program (process) or code segment (CSECT or thread) being debugged. You
can switch from screen to screen and can also save the contents of one screen
into another. On each screen, the CO, breakpoints, disassembly locations, and
memory locations are unique. The registers and flags are the same across
screens.
When an EX or ST command is executed, and the processor is subsequently stopped
by a breakpoint, the ASDT display screen containing that breakpoint is
automatically displayed. If the processor is stopped by something other than a
breakpoint, the ASDT display that was active at the time of the EX or ST
remains active.
Each of the nine displays has nine V breakpoints and nine S breakpoints
available, which provides a total of 162 possible breakpoints. The S
breakpoints are turned on when set, but the V breakpoints are not turned on
until set on with a command. This gives the V breakpoints visible scratch pad
function.
ΓòÉΓòÉΓòÉ 1.8.4. Viewing Other OS/2 Sessions ΓòÉΓòÉΓòÉ
Viewing other OS/2 sessions while under ASDT requires a few steps. First, you
need to issue the HT command. After the current thread has been halted, you
can then enter Alt-Esc keystrokes to locate a specific session (your host 370
session included). If you choose to switch to your host 370 session, you could
view listings of the halted thread. The Ctrl-Esc sequence will enable you to
begin another session at this point, too.
Returning to ASDT requires a few steps as well. First, you need to enter
Alt-Esc keystrokes to get back to the screen group that contains the halted
thread. Then you can depress the hot key (if it is enabled) to reenter ASDT.
Finally, you should issue the RT command to allow the halted thread to resume.
Note: You should realize that when you halt a thread under ASDT, other threads
will still be running. If any of these threads cause an ASDT-trapped
event, ASDT will get control again. Additionally, the "complexion" of
your ASDT environment may have changed somewhat when you return to ASDT
since other processes are running.
ΓòÉΓòÉΓòÉ 1.8.5. Multiple Screens ΓòÉΓòÉΓòÉ
ASDT can be moved to the secondary terminal (if you have two adapters attached)
with the "CG MS" command. Your application will be displayed on one of your two
terminals. ASDT knows to display its screen on the opposite terminal when you
issue the "CG MS" command. To tell ASDT to use multiple screens from its
invocation, use the /M parameter. See CG - Configuration for more information
about multiple screens.
The "CG MS" command can be placed in a profile or can be assigned to a function
key.
ΓòÉΓòÉΓòÉ 1.8.6. Remote Terminal ΓòÉΓòÉΓòÉ
ASDT can be moved to a remote terminal (if you have one connected via a COMn
port (n=1 or 2)) with the "CG RT n" command. Your application will be displayed
on the host machine's terminal. ASDT knows to display its screen on the remote
terminal when you issue the "CG RT n" command. To tell ASDT to use a remote
terminal from its invocation, use the /R=n parameter. See CG - Configuration
for more information about remote terminals.
The "CG RT n" command can be placed in a profile or can be assigned to a
function key.
ΓòÉΓòÉΓòÉ 1.8.7. User-defined Functions ΓòÉΓòÉΓòÉ
ASDT will allow you up to nine user-defined functions that you can call from
within ASDT. When ASDT gives control to a user-defined function, that routine
is running as a level 3 application. Hence, you can use these routines to call
OS/2 I/O service routines that ASDT can not call from level 0. A potential
function for these routines is to perform some sort of statistical tracking for
a particular session.
All user-defined routines (U1-U9) must reside in the dynamic load library,
UX.DLL. You can create your own UX.DLL or substitute members for the one that
comes with ASDT. If you use the UX.DLL that comes with ASDT, then you can use
the command "U2 SC" to have ASDT print its screen to the file ASDT.OUT.
See U1-U9 - User-defined Functions for additional information concerning
user-defined functions.
ΓòÉΓòÉΓòÉ 1.9. ASDT Command Reference ΓòÉΓòÉΓòÉ
This section describes each of the available ASDT commands. Commands are listed
alphabetically except for command groups, which are at the beginning of the
list. These groups are the general register commands, the selector register
commands, the specific register commands, the flag commands, and the vector
commands.
In many cases, a command description will apply to a set of commands. For
example, the commands V1, V2, ..., V9 are described under the command format
"V1-V9."
ΓòÉΓòÉΓòÉ 1.9.1. AX BX CX DX AH AL BH BL CH CL DH DL - General Register ΓòÉΓòÉΓòÉ
Purpose: Alters the contents of the specified processor register.
Format: reg [= expr]
reg Any of AX, BX, CX, DX, AH, AL, BH, BL, CH, CL, DH, or DL.
expr Any ASDT expression.
Examples: AX = 13B
Places '013B'x into the AX register.
CX = V1 + BX - 2
Places the sum of the contents of variable V1, the BX register,
and -2 into the CX register.
DX = DS
Copies the contents of the DS register into the DX register.
CL = DH
Copies the contents of the DH register into the CL register.
Remarks: You can alter the general registers (AX, BX, CX, and DX) in their
entirety or as 8-bit registers (AL, AH, BL, BH, CL, CH, DL, and
DH).
ASDT uses only the least significant 16 bits or 8 bits that result
from an expression evaluation to set the 16-bit or 8-bit register.
ASDT truncates any additional bits and displays a warning message.
A null operand sets the register to zero.
ΓòÉΓòÉΓòÉ 1.9.2. CS DS SS ES - Selector Register ΓòÉΓòÉΓòÉ
Purpose: Alters the contents of the specified selector register.
Format: reg [= expr]
reg Any of CS, DS, SS, or ES.
expr Any ASDT expression.
Examples: CS = 1C42
Places the hexadecimal value '1C42' into the CS register.
ES = SS
Copies the contents of the SS register into the ES register.
DS = XS
Copies the contents of the XS selector register variable into the
DS register.
Remarks: To save and restore selector register contents, use the XS
selector register variable. ASDT treats XS just like a real
selector register.
Updating the CS register also updates the EX and LC displays.
A null operand sets the selector register to zero.
ΓòÉΓòÉΓòÉ 1.9.3. SI DI SP BP - Specific Register ΓòÉΓòÉΓòÉ
Purpose: Alters the contents of the specified processor register.
Format: reg [= expr]
reg Any of SI, DI, SP, or BP.
expr Any ASDT expression.
Examples: BP = 13B
Places '013B'x into the BP register.
SI = V1 + BX - 2
Places the sum of the contents of variable V1, the BX register,
and -2 into the SI register.
Remarks: ASDT uses only the least significant 16 bits that result from an
expression evaluation to set the register. ASDT truncates any
additional bits and displays a warning message.
Updating the IP register also updates the EX and LC displays.
A null operand sets the register to zero.
ΓòÉΓòÉΓòÉ 1.9.4. FL AF CF DF IF OF PF SF TF ZF - Flag Register ΓòÉΓòÉΓòÉ
Purpose: Alters the contents of the processor flag register.
Format: flag [= expr]
flag Any of FL, AF, CF, DF, IF, OF, PF, SF, TF, or ZF.
expr Any ASDT expression.
Examples: CF = 0
Sets the carry flag bit to '0'b.
FL = F246
Sets the flag register to 'F246'x.
Remarks: The FL command is used to alter the contents of the entire flag
register. The command operand is evaluated, and the least
significant 16 bits of the evaluation are placed into the FL
register. ASDT truncates any additional bits and displays a
warning message.
A null operand sets the entire register to zero.
The remaining commands are used to alter individual bits within
the flag register. If the command operand is null or evaluates to
zero, ASDT sets the flag bit to zero; otherwise, it sets the flag
bit to one.
ΓòÉΓòÉΓòÉ 1.9.5. AS - ASCII ΓòÉΓòÉΓòÉ
Purpose: Changes the current character translation to ASCII.
Format: AS
Examples: AS
All characters are displayed in ASCII format.
Remarks: Changes the characters displayed in the right side of the memory
area and the interpretation of the Code Origin CSECT name. The
current character translation mode (ASCII or EBCDIC) is shown on
the top line near the right of the screen.
Initially, the screen is in ASCII format. Choices are ASCII and
EBCDIC (EB).
ΓòÉΓòÉΓòÉ 1.9.6. CA - Color Attributes ΓòÉΓòÉΓòÉ
Purpose: Sets the specified color attribute to the given value.
Format: CA [term] [value]
term one of the following:
N Normal attribute.
H Highlight attribute.
R Reverse attribute.
value The hexadecimal color code. The range of the number is '00'x to
'FF'x where the first higit describes the background color and the
second higit describes the character color.
Examples: CA N 07
ASDT sets the normal attribute to white on black.
CA H 4F
ASDT sets the highlight attribute to bright white on red.
CA R 71
ASDT sets the reverse attribute to blue on white.
CA
ASDT sets the normal, highlight, and reverse attributes to their
default values.
Remarks: The CA command has no function when ASDT is on a monochrome
display.
Defaults: normal screen text is defaulted to bright white on blue
(1F), highlighted text defaults to yellow on blue (1E), and
reverse video text is red on white (74).
The majority of the ASDT screen is in normal text. Highlighting is
used to signal items such as an active breakpoint or the code
origin name. Reverse video is used to signal events such as a
breakpoint encountered.
Make sure you do not set a character color equal to its background
color; parts of the screen will be impossible to read if this
occurs. If this happens for the normal attribute, the screen will
go blank, but ASDT will still be functioning. To read the screen
again, type CA and enter it even though you can't see it. This
resets ASDT's color attributes to their default values.
The following chart shows the available colors and their numbers:
Number Color Number Color
------ ----- ------ -----
0 Black 8 Gray
1 Blue 9 Light Blue
2 Green A Light Green
3 Cyan B Light Cyan
4 Red C Light Red
5 Magenta D Light Magenta
6 Brown E Yellow
7 White F High intensity White
ΓòÉΓòÉΓòÉ 1.9.7. CB - Complex Breakpoint ΓòÉΓòÉΓòÉ
Purpose: Sets an active breakpoint as a complex breakpoint with optional
condition and count, displays the current condition and count, or
displays all complex breakpoints.
Format: CB [ bkpt ] [ cond ] , [ count ]
bkpt Any ASDT breakpoint (V1-V9 or S1-S9) that is active on the current
ASDT display screen.
cond An expression for a condition to be satisfied before ASDT takes the
breakpoint.
count Any expression for the number of times for ASDT to hit the
breakpoint before it takes the breakpoint.
Examples: CB S1 AX = 3 , 10
Sets S1 as a complex breakpoint. The condition to be met is for AX
to equal three, and ASDT will take the breakpoint the sixteenth
time this occurs at the S1 breakpoint's address.
CB V3 ES:DI <> DS:SI
Sets V3 as a complex breakpoint. The condition to be met is for
the contents of ES:DI not to equal the contents of DS:SI. ASDT
will take the breakpoint the first time this occurs at the S1
breakpoint's address.
CB
Displays all eighteen breakpoints for the current ASDT display
screen and shows complex breakpoints with their conditions,
counts, and occurrence counts.
CB V8
Displays the condition and count fields for breakpoint V8 on the
command line so you can edit them and reenter them. Also displays
the current occurrence count for V8 on the message line.
Remarks: You can create a complex breakpoint from any active breakpoint.
For introductory information about complex breakpoints, see
Setting Breakpoints.
You use the CB command to create a new complex breakpoint, modify
an existing complex breakpoint, return a complex breakpoint to a
simple breakpoint, and to display all of the complex breakpoints
for the active ASDT screen (D1-D9).
If you issue the CB command without any operands, ASDT replaces
the ASDT screen with a complex breakpoint window. This display
replaces the ASDT screen with complex breakpoint information.
The complex breakpoint window displays each possible complex
breakpoint (V1-V9 and S1-S9). For each active breakpoint that is
complex, the address, condition, count, and occurrence count are
all displayed. For each active simple breakpoint, the address is
displayed.
This screen is a "browse" window that does not allow you to edit
anything. Tapping any key restores the ASDT screen.
ΓòÉΓòÉΓòÉ 1.9.8. CG - Configuration ΓòÉΓòÉΓòÉ
Purpose: Define the display configuration to use.
Format: CG [= term]
term one of the following:
null reset to single screen.
MS use multiple screens.
RT n use COMn (n=1 or 2) to communicate with a remote terminal.
Examples: CG MS
Changes ASDT to the color display if the monochrome display is the
primary display; changes ASDT to the monochrome display if the
color display is the primary display.
CG RT n
Has ASDT write its screen to a remote terminal using the COMn port
(n=1 or 2).
CG
Changes ASDT to the primary display.
Remarks: The CG MS command switches between displays if you have more than
one monitor installed. Make sure you do not use this command if
you have only one display adapter. If this happens, ASDT will
issue an error message and will not use multiple screens.
The use of multiple screens can be set at ASDT installation time
with the /M option as well. With this option, you will have ASDT
using the secondary display when it gains control. Issuing the CG
(null) command will always cause ASDT to share the primary display
with your application.
The CG RT n command switches ASDT to a remote terminal that you
have hooked up via the COMn port (n=1 or 2). This serves a
similar function to that of CG MS. However, CG MS can not be used
with a PS/2 as it does not support multiple adapters.
It is up to you to set the baud rate or any other communication
parameters as ASDT only writes to the COMn port. It is useful to
place a command like MODE COM1:19200,E,7,1 in your STARTUP.CMD
even though you may change the mode under OS/2 at any time.
The use of a remote terminal can be set at ASDT installation time
with the /R=n option as well. With this option, you will have
ASDT using the remote terminal when it gains control. Issuing the
CG (null) command will always cause ASDT to collapse back to the
display of your application.
ΓòÉΓòÉΓòÉ 1.9.9. CM - Compare Memory ΓòÉΓòÉΓòÉ
Purpose: Compares two memory blocks and displays the differences between
them.
Format: CM [addr1] , [addr2] , [length]
addr1 Any ASDT expression for the starting address of one memory block.
addr2 Any ASDT expression for the starting address of the other memory
block.
length Any ASDT expression for the number of bytes to compare.
Examples: CM SS:BP , SS:BP+100 , 100
Compares 256 bytes from the location specified by SS:BP with the
same number of bytes from the location specified by SS:BP+100. The
first 112 bytes of each area are shown on the screen, and
mismatches are highlighted in the first area. The function keys
described below are active.
CM 123456,236541,16.
Compares 16 bytes from physical location 123456 with the same
number of bytes from physical location 236541. The function keys
described below are active.
Remarks: ASDT displays the two compared areas on the screen beginning at
addresses L1 and L8. Differences between the two areas are
highlighted in the first area. Seven lines of each memory area are
shown on the screen, and the number of mismatches on the screen
and in the entire area are shown on the message line.
You can scroll the window up and down in the compared areas. ASDT
recognizes the following function keys in Compare Memory mode:
Esc Returns to normal ASDT operation and restores the edit
area of the screen.
Home Scrolls the compare window up to the beginning of the
compare field.
PgUp Scrolls the compare window up one screen (seven lines).
PgUp takes no action if the first byte of the compare
field is displayed.
PgDn Scrolls the compare window down one screen (seven
lines). PgDn takes no action if the last byte of
compared memory is displayed at the beginning of the
display area.
Ctrl-Left Arrow Scrolls the compare window up one byte. Ctrl-Left Arrow
takes no action if the first byte of the compare field
is displayed.
Ctrl-Right Arrow Scrolls the compare window down one byte. Ctrl-Right
Arrow takes no action if the last byte of compared
memory is displayed at the beginning of the display
area.
ΓòÉΓòÉΓòÉ 1.9.10. CO - Code Origin ΓòÉΓòÉΓòÉ
Purpose: Tells ASDT your program's starting address so that ASDT can
compute and display a Location Counter which corresponds to your
assembly listing.
Format: CO [= expr]
expr Any ASDT expression.
Examples: CO = CS:A426
indicates that your module begins at offset A426 from your
program's code segment. ASDT displays the CO as "+A426."
CO = CS:200
indicates that your module begins at offset 200 from your
program's code segment. ASDT displays the CO as "+0200."
Remarks: The CO facility enables you to think in terms of your assembly
listing without having to do relocation arithmetic.
ASDT displays the Code Origin in a relative address format if
possible. Relative addresses are designated with a "+" for CS.
If the CO was set with a selector:offset expression and the CO
selector is the same as the CS selector, then the CO will be
displayed as an offset preceded by a "+." Otherwise, a CO that was
set with a selector:offset expression will be displayed in the
selector:offset format. If the CO was set with a physical address
expression and this physical address is less than 64K greater than
the CS base address, then the CO will be displayed as an offset
preceded by a "+." Otherwise, a CO that was set with a physical
address expression will be displayed in a 6-higit address format.
A null CO is displayed as "....:....."
See Setting Breakpoints for more information.
If the CSECT begins with a JUMP instruction around the name of the
CSECT as shown below, the name will be displayed following the CO
display.
ASDTSMP CSECT
J LABEL1
DC AL1(8)
DC S'ASDTSMP '
LABEL1 DS 0C
. . .
A null operand sets the CO variable to null.
Whenever CO is set, ASDT looks to see if the memory location
specified contains a short jump instruction. If this instruction
is found, ASDT assumes that the CSECT name follows 3 bytes
further. ASDT will then display this CSECT name (up to 8
characters) in ASCII or EBCDIC depending on the current display
mode.
ΓòÉΓòÉΓòÉ 1.9.11. CP - Copy Memory ΓòÉΓòÉΓòÉ
Purpose: Copies one memory block to another.
Format: CP [addr1] , [addr2] , [length]
addr1 Any ASDT expression for the starting address of the source memory
block.
addr2 Any ASDT expression for the starting address of the target memory
block.
length Any ASDT expression for the number of bytes to copy.
Examples: CP DS:100 , DS:200 , 30.
Copies 30 bytes from the location specified by DS:100 to the
location specified by DS:200.
CP L1 , L1+1 , 100
Makes 256 copies of the character at the memory location addressed
by L1 filling the memory bytes which start at L1+1. This can be
used as a "fill memory" function.
Remarks: The Copy Memory function allows the source block and target block
to overlap, so you could make changes that you don't expect if you
specify blocks that overlap.
An easy way to fill a block of memory with a specific character is
to set L1 to point to the first byte, change the first byte to the
character wanted, and then issue the command "CP L1,L1+1,length"
where you specify the number of copies wanted for the length
field.
You may wish to compare two memory blocks after one has been
copied to the other. (See CM - Compare Memory.)
ΓòÉΓòÉΓòÉ 1.9.12. CT - Step Count ΓòÉΓòÉΓòÉ
Purpose: Sets the default step count (the number of user program
instructions to execute with the ST command).
Format: CT [= expr]
expr Any ASDT expression.
Examples: CT 8
ASDT sets the step count to eight.
CT
ASDT sets the step count to one.
Remarks: ASDT uses only the least significant 16 bits that result from an
expression evaluation to set the CT. ASDT truncates any additional
bits and displays a warning message.
When you enter the ST command without an operand, ASDT gets the
number of user program instructions to be executed from the CT
variable.
If the operand is omitted from the CT command, ASDT sets the step
count to one.
ΓòÉΓòÉΓòÉ 1.9.13. DA - Disassemble ASM86 ΓòÉΓòÉΓòÉ
Purpose: Changes the current disassemble mode to IBM ASM86 format. (ASM86
is an IBM Internal cross assembler, not provided with this
program).
Format: DA
Examples: DA
Instructions will be disassembled using IBM ASM86 mnemonics.
Remarks: Disassembles the instructions pointed to by CS:IP using IBM ASM86
mnemonics.
Initially, all disassembled instructions are shown in IBM ASM86
mnemonics. Choices are IBM ASM86 mnemonics (DA) or Intel (MASM)
mnemonics (DM).
ΓòÉΓòÉΓòÉ 1.9.14. DK - Define Key ΓòÉΓòÉΓòÉ
Purpose: Sets up, changes, or removes a function key definition.
Format: DK [key I/D [cmds]]
key The key to be defined (F1, F2, ..., F10, S-F1, S-F2, ..., S-F10,
C-F1, C-F2, ..., C-F10, A-F1, A-F2, ..., A-F10).
I Place the commands on the command line and execute them immediately
when the function key is pressed.
D Place the commands on the command line when the function key is
pressed but do not execute them.
cmds A string of valid ASDT commands entered as you would enter them on
the command line. This string may contain semicolons, and the first
command may begin with a slash.
Examples: DK S-F9 I DM
ASDT sets the Shift-F9 (S-F9) key to the string "DM." Each time
the S-F9 key is pressed, ASDT shows disassembled instructions in
Intel (MASM) mnemonics.
DK A-F2 D DA
ASDT sets the Alt-F5 (A-F5) key to the string "DA." Each time the
A-F5 key is pressed, ASDT puts this string on the command line.
DK C-F1
ASDT removes any command definition for the Ctrl-F1 (C-F1) key.
You do not use the I/D keyword when removing a key definition.
DK
ASDT displays the current settings of all of the function keys.
Remarks: ASDT supports the function keys F1 through F10, shifted function
keys S-F1 through S-F10, controlled function keys C-F1 through
C-F10, and alternate function keys A-F1 through A-F10. This
provides a total of 40 function keys.
ASDT provides default definitions for keys F1 through F10. You can
change these by redefining the key(s) you want to change. The
definitions are listed in Function Keys If you want to redefine
existing keys or define additional ones, you can include DK
commands in the profile you invoke when you start ASDT.
You must enter the I (immediate) or D (deferred) keyword when you
define a key. It is not required when you remove a key definition.
If you press a function key which has no definition, ASDT displays
a message and takes no other action.
ASDT maintains an 800-byte buffer for commands associated with
function keys. If you define many keys to be long commands, it is
possible to run out of room in the buffer. If this happens, ASDT
will display a message, and you will not be able to make any
additional key definitions in the current ASDT session. You can
still use keys that are already defined and can redefine existing
keys.
ΓòÉΓòÉΓòÉ 1.9.15. DM - Disassemble MASM (Intel) ΓòÉΓòÉΓòÉ
Purpose: Changes the current disassemble mode to the Intel (MASM) format.
Format: DM
Examples: DM
Instructions will be disassembled using Intel (MASM) mnemonics.
Remarks: Disassembles the instructions pointed to by CS:IP using Intel
(MASM) mnemonics.
Initially, all disassembled instructions are shown in ASM86
mnemonics. Choices are IBM ASM86 mnemonics (DA) or INTEL (MASM)
mnemonics (DM).
ΓòÉΓòÉΓòÉ 1.9.16. DW - Disassembly Window ΓòÉΓòÉΓòÉ
Purpose: Switches to Disassembly Window mode.
Format: DW [value]
value The line number (L1-M6) at which to start the disassembly window.
Examples: DW
ASDT switches the edit portion of the ASDT display to a
disassembly window and sets the primary window mode to
disassembly. If a secondary memory window is displayed, ASDT
removes it.
DW M1
ASDT switches lines M1 through M6 of the ASDT display to show
disassembled instructions. The primary window mode of ASDT is not
changed.
Remarks: The disassembly window displays instructions in both hexadecimal
and disassembled format. If applicable, ASDT also displays the
operand of the instruction.
ASDT displays the primary window (disassembly or memory) in the
upper right portion of the ASDT screen. If the primary window is
disassembly, then L1 and the following disassembly lines track the
current CS:IP as your program runs. ASDT also tracks CS:IP for a
secondary disassembly window. Initially, the primary window is
disassembly.
See the MW - Memory Window command, which changes to a memory
window and the NW - Next Window command, which switches among all
of the ASDT windows.
ΓòÉΓòÉΓòÉ 1.9.17. D1-D9 - Select Display ΓòÉΓòÉΓòÉ
Purpose: Selects or sets one of the nine ASDT display screens.
Format: Dn [Ds or ON or OFF]
n Any of 1-9. Indicates which screen is being selected (D1-D9).
s Any of 1-9. Indicates which screen is being saved (D1-D9).
ON Activates the breakpoints for Dn.
OFF Suspends the breakpoints for Dn.
Examples: D4 OFF
All the active breakpoints for screen D4 are suspended.
D5
Screen D5 is selected as the active ASDT screen.
D2 = D1
The contents of screen D1 are saved in screen D2.
Remarks: These variables are common to all nine displays: registers,
memory, M7-M9, and step count.
These variables are unique to each display: V1-V9, S1-S9, L1-L9,
M1-M6, and CO.
After ASDT has finished executing a block of user instructions, it
will display the screen containing the active breakpoint that
terminated the execution. If more than one screen contains that
same active breakpoint, ASDT will display the lowest numbered
screen.
The breakpoints of a screen (e.g., Dy) do not have to be activated
when ASDT is displaying another screen (e.g., Dx) unless they had
been deactivated previously; that is, when you switch screens from
Dy to Dx, Dy's breakpoints remain active.
Note: When you issue a Dn ON command, the breakpoints for the Dn
screen are associated with the current process and thread
ids. This was implemented in this manner so that you could
reactivate breakpoints for an entire screen whose
breakpoints had become deactivated due to a thread's or
process's having terminated. This is different from the
results that you would get if you issued Sn ON commands for
the various deactivated breakpoints on the current screen.
See S1-S9 - Set Breakpoints S1-S9 to learn how reactivating
breakpoints with the Sn ON command differs from the Dn ON command.
Note: You can not deactivate or reactivate a virtual real mode breakpoint
while in protected mode and vice versa. Additionally, you can not
deactivate or reactivate a physical address breakpoint that is above
the 1M line in real mode.
See Display Screens and Breakpoints for a discussion of how to use the nine
ASDT display screens to your advantage.
ΓòÉΓòÉΓòÉ 1.9.18. EB - EBCDIC ΓòÉΓòÉΓòÉ
Purpose: Changes the current character translation to EBCDIC.
Format: EB
Examples: EB
All characters are displayed in EBCDIC format.
Remarks: Changes the characters displayed in the right side of the memory
area and the interpretation of the Code Origin CSECT name that may
be displayed. The current character translation mode (ASCII or
EBCDIC) is shown on the top line near the right of the screen.
Initially, the screen is in ASCII format. Choices are ASCII (AS)
and EBCDIC.
ΓòÉΓòÉΓòÉ 1.9.19. EP - Execute Profile ΓòÉΓòÉΓòÉ
Purpose: Executes a profile containing a series of ASDT commands. This
profile must have been read in by ASDT during the initialization
phase.
Format: EP
Examples: EP
Executes commands from ASDT's profile storage area.
Remarks: ASDT does not support disk I/O after the OS/2 initialization
phase. Hence, you must have ASDT read your profile in during this
initialization phase. ASDT stores your profile in its internal
data area where your commands can be retrieved and executed with
the EP command.
To have ASDT read in your profile, you need to specify the fully
qualified profile name in your CONFIG.SYS file. You can specify
ASDT parameters along with a profile name. See Installing ASDT for
the syntax rules that allow you to specify a profile and ASDT
parameters.
ASDT limits a profile to 1600 bytes. This includes carriage
returns, line feeds, and end-of-file markers. ASDT does not
recognize tabs and can not process commands that are greater than
76 characters long (not including trailing blanks, carriage
return, and line feed).
Commands from a file are executed one at a time. If an invalid
command is encountered, the appropriate ASDT message is displayed,
and profile processing is aborted.
You can execute a profile that has been read in as often as you
like by reissuing the EP command.
ΓòÉΓòÉΓòÉ 1.9.20. EX - Execute ΓòÉΓòÉΓòÉ
Purpose: Passes control of the processor to your program.
Format: EX
Examples: EX
Gives control to your program, which begins executing at the
current CS:IP.
Remarks: Execution of your program begins at the point determined by the
sum of the CS and IP registers. ASDT restores your display screen
and sets active breakpoints in your program before execution
begins.
Control is retained by OS/2 until ASDT receives an interrupt. When
ASDT regains control, you are shown the reason in the form of a
message or breakpoint highlight. ASDT saves your display screen
and removes the breakpoints from your program.
The processor registers and memory display reflect the processor
status at the time of the interrupt. If any breakpoints were
overlayed by execution of your program, the breakpoint display is
blinked to indicate that that breakpoint was not active for a
portion of your program execution.
Note: The first instruction of your program is single-stepped
before the breakpoints are inserted. This permits execution
to begin at the point of a breakpoint without stopping
immediately.
ASDT sets function key F7 to the EX command on entry.
ΓòÉΓòÉΓòÉ 1.9.21. F FA FC FE FX - Find, Find ASCII, Find CSECT, Find EBCDIC, Find Hex ΓòÉΓòÉΓòÉ
Purpose: Find character or hexadecimal strings in memory.
Format: Ft [ string ] [ , s ] [ , hiaddr ]
t Type of find (one of the following):
null current mode (ASCII, CSECT, hex, or EBCDIC)
A ASCII
C CSECT
E EBCDIC
X Hex
string The string to be found in memory. This string may be delimited by
quotes (" ").
s Search technique (one of the following):
* task search (LDT first then the GDT (only in protected mode))
expr any ASDT expression that determines a selector for the single
segment to search. If ", hiaddr" is specified, then this "s"
expression is interpreted as the lower bound physical address of
a system-wide search range.
hiaddr any ASDT expression that is interpreted as the higher bound
physical address of a system-wide search range.
Examples: /FX 123E4
Does a repeat find of the '0123E4'x search argument throughout the
task's immediate segment register areas.
/FA buffer; L1 = FX
Does a repeat (task) find of the ASCII-string (buffer) and
displays memory beginning at the location where the string was
found.
FE "Top of Data" , DS
Tries to find the EBCDIC-string (Top of Data) in memory beginning
at the start of the DS segment up to its segment limit.
FA " garbage dump ", *
Tries to find the ASCII-string ( garbage dump ) in memory using
the task search technique.
FC SINT3, CS
Tries to find the CSECT name (SINT3) in the current CS segment.
FC AINTHND, 000000, 400000
Tries to find the CSECT name (AINTHND) in the system-wide address
range starting at physical address 0 and ending at physical
address 4M.
FC -
Tries to find the closest (previous) CSECT address relative to the
current CS and IP address.
Remarks: Task searching is employed for all finds until you specify some
selector or physical address expression after a comma. (Task
searching has no meaning in real mode.) The technique last used is
employed in any repeat find. ASDT will interpret any expression
used in a system-wide search technique (", s, hiaddr") as a
physical address.
If the string is found, the FX variable contains the address of
the string. If the string is not found, the FX variable remains as
it was before the search request.
Since the second character of the F command is a blank, at least
one blank must always follow the F command. It will operate in the
current character translation mode (ASCII, CSECT, hex, or EBCDIC).
Character strings may not include semicolons. Commas are special
characters and denote that either a task search indicator ("*"), a
selector expression, or a system-wide address range follows. (Note
that a system-wide address will include two commas.) If you want a
comma to be part of your string, enclose the string in quotes.
For strings without delimiting quotes, leading blanks are always
ignored yet trailing blanks are ignored only if there is no
delimiting comma present. Every blank or comma (within the
enclosing quotes) is considered part of the search string when the
quotes are used.
For the F, FA, FC, and FE commands, the string may include upper
or lower case characters, numbers, special characters, and blanks.
For the FX command, the string may contain any of the 16
hexadecimal digits.
If an odd number of hexadecimal digits are entered for the FX
command, the string is padded on the left with one hexadecimal
zero digit.
The length of a search string is limited by the command line
length. However, the verification message will only display the
first eight characters of the search string.
Searching starts at the beginning of the LDT's first valid data or
code descriptor selector (task search), at the beginning of the
most recently specified selector (segment search), or at the
beginning of a physical address range (system-wide search) unless
a repeat find is done. For repeat find, the search begins where
the previous search terminated. Task searching continues on
through the GDT once the LDT has been exhausted. System-wide
searching is limited by the 1M line in real mode.
The FC command will have ASDT search only those descriptor
selectors that reference valid code segments (when system-wide
search is not being used). If the CSECT is found, ASDT will set
the CO - Code Origin variable if a jump ('EB'x) instruction is
discovered three bytes prior to the CSECT address.
FC - can be used to have ASDT search for a CSECT name previous to
the current CS:IP address. Repeated use of this command will have
ASDT continue hunting for the next previous CSECT name within the
CS address space (wrapping at offset 0 and the CS limit).
If the search string is omitted, the previous string will be used.
The repeat find function may be performed by adding a slash to the
beginning of any of the find commands or by using the F5 key.
ASDT sets function key F5 to the FX command on entry.
ΓòÉΓòÉΓòÉ 1.9.22. HP - Help ΓòÉΓòÉΓòÉ
Purpose: Display information about ASDT.
Format: HP
Examples: HP
Displays a screen containing all the ASDT commands in logical
groupings.
Remarks: The help screen temporarily replaces the ASDT screen. Press any
key to return to the ASDT screen.
ASDT sets function key F1 to the HP command on entry.
ΓòÉΓòÉΓòÉ 1.9.23. HT - Halt Thread ΓòÉΓòÉΓòÉ
Purpose: To suspend the current thread and exit ASDT to OS/2.
Format: HT
Examples: HT
Suspends the current thread and returns your session to OS/2.
Remarks: HT should be used primarily to scan other screen groups. The most
popular subset of this action is to view your host session. By
entering the HT command (which has ASDT halt the current thread
and return to OS/2) and then entering a series of Alt-Esc
keystrokes or a Ctrl-Esc sequence, you can view listings of the
halted thread on your host session. To return to ASDT, you need to
enter a series of Alt-Esc keystrokes until you are back in the
same screen group where you had ASDT suspend the thread. Now you
can enter the hot key (if you have the hot key option enabled) to
give control back to ASDT. Finally, you can enter the RT - Resume
Thread command which will allow your thread to be resumed.
You can halt up to ten threads if you want. Halting threads as
they give control to ASDT allows you to see what impact the
remaining threads that are running have on the system.
You can not halt a thread at a breakpoint. This is due to the
fact that ASDT inserts your breakpoints for you before it halts
the thread.
This command works for real mode as well except that you can only
halt one application at a time. If you halt more than one real
mode application (before resuming), ASDT will lose track of all
but the latest real mode "thread."
ΓòÉΓòÉΓòÉ 1.9.24. IB - Input Byte ΓòÉΓòÉΓòÉ
Purpose: Reads one byte from a designated port (into a register if
specified).
Format: IB port [, reg]
port The I/O port address from which the byte is to be read.
reg The 8-bit register into which the byte is to be placed.
Examples: IB 40 , AL
Reads one byte from I/O port '0040'x and places it in register AL.
The port and the value read are shown in a message.
IB 21
Reads one byte from I/O port '0021'x and displays the port and the
value read in a message.
Remarks: To read a port but not place the value read into a register, you
can omit the register name and the message line will display the
value read.
ΓòÉΓòÉΓòÉ 1.9.25. IP - Instruction Pointer ΓòÉΓòÉΓòÉ
Purpose: Alters the contents of the instruction pointer, updates the EX
variable, and updates the LC variable if appropriate.
Format: IP [= expr]
expr Any ASDT expression.
Examples: IP = 13B
ASDT sets the variable IP to '013B'x.
If the Co variable has any value other than null, ASDT tries to
maintain the following relationship:
CO:LC = CS:IP
This lets you think in terms of your assembly listing offsets.
Remarks: ASDT uses only the least significant 16 bits that result from an
expression evaluation to set the IP. ASDT truncates any additional
bits and displays a warning message.
Updating the IP register also updates the EX and LC displays.
A null operand sets the IP to zero.
ΓòÉΓòÉΓòÉ 1.9.26. IW - Input Word ΓòÉΓòÉΓòÉ
Purpose: Reads one word from a designated port (into a register if
specified).
Format: IW port [, reg]
port The I/O port address from which the byte is to be read.
reg The 16-bit register into which the byte is to be placed.
Examples: IW 58 , DX
Reads one word from I/O port '0058'x and places it in register DX.
The port and the value read are shown in a message.
IW 31
Reads one word from I/O port '0031'x and displays the port and the
value read in a message.
Remarks: To read a port but not place the value read into a register, you
can omit the register name and the message line will display the
value read.
ΓòÉΓòÉΓòÉ 1.9.27. LC - Location Counter ΓòÉΓòÉΓòÉ
Purpose: Sets the pseudo-variable, Location Counter (LC), and updates
either the IP variable or the CO variable.
Format: LC [= expr]
expr Any ASDT expression.
Examples: LC = 12D
ASDT sets the pseudo-variable LC to '012D'x.
If the CO variable is null, ASDT sets the CO variable according to
the formula
CO = CS:IP-LC
If CO is a physical address, then the CS base address is used.
This provides an alternate means for setting the CO. When CO is
null, the command LC=12D tells ASDT that the program counter
(CS:IP) corresponds to the assembly listing LC value of 012D. ASDT
computes the origin address and puts it into CO.
If the CO variable has any value other than null, ASDT tries to
maintain the following relationship:
CO:LC = CS:IP
If CO is a physical address, then the CS and CO base addresses are
used.
This lets you think in terms of your assembly listing offsets.
Remarks: Normally, you use the Location Counter (LC) in conjunction with
the Code Origin (CO) command to display a program location counter
that corresponds with the offsets in your assembly listing. You
should be familiar with the CO command before using the LC
command.
ASDT uses only the least significant 16 bits that result from an
expression evaluation to set the LC. ASDT truncates any additional
bits and displays a warning message.
The LC command with a null operand sets both the CO and the LC to
null.
ΓòÉΓòÉΓòÉ 1.9.28. LD - LDT Register ΓòÉΓòÉΓòÉ
Purpose: Alters the contents of the LDT register.
Format: LD [= P expr]
P Trigger to have ASDT interpret the expression as a physical
address.
expr Any ASDT expression.
Examples: LD = 38
ASDT sets the LDT register to '38'x.
LD P128E3A
ASDT associates the user's LDT base address with 128E3A.
Remarks: The current LDTR is changed when you enter the LD command. When
you change the LDT register, the user program may not be able to
continue with the altered value.
ASDT uses only the least significant 16 bits that result from an
expression evaluation to set the LDT register. ASDT truncates any
additional bits and displays a warning message.
When a physical address is used (indicated by a leading P), ASDT
associates the user's LDT base address with the one provided.
ASDT ensures that the address you specify does indeed point to a
valid LDT. You can not step, terminate, or execute when you have
changed the associated user's LDT base address in this manner.
The idea behind this form of the LD command is to allow you to
view another process's LDT entries.
The LD command with a null operand restores the user program's LDT
register and its base address to the incoming values. If you
attempt to set the LDT to an invalid value or have ASDT associate
the user's LDT with a physical address that does not reference an
LDT, ASDT will display a message and will not act upon your
request.
Note: This command can not be used in real mode.
ΓòÉΓòÉΓòÉ 1.9.29. LW - LDT/GDT Window ΓòÉΓòÉΓòÉ
Purpose: Switches to LDT/GDT Window Mode.
Format: LW [ * ]
Examples: LW
ASDT switches the edit portion of the ASDT display to an LDT/GDT
window and sets the primary window mode to LDT/GDT.
LW *
Has ASDT compress out all the invalid descriptors in its LDT/GDT
display.
Remarks: The LDT/GDT window displays descriptor table entries in a decoded,
readable format. Each table entry line displays one descriptor
table entry.
For an LDT/GDT window, ASDT replaces the top line of the ASDT
display with the GDT address, the IDT address, the LDT register,
the process id, the thread id, and the task state register. It
displays the primary window on the left side of the middle of the
ASDT screen.
See the NW - Next Window command, which switches among all of the
ASDT windows.
Note: This command can not be used in real mode.
ΓòÉΓòÉΓòÉ 1.9.30. L1-L9 - Alter Window Area ΓòÉΓòÉΓòÉ
Purpose: Alter the disassembly and memory edit portion of the ASDT display
or the LDT/GDT or IDT portion of the ASDT display by changing the
address of a window display line.
Each disassembly/memory address variable is displayed either as a
selector:offset address or as a 6-higit physical address. Each
LDT/GDT or IDT address variable is displayed as a 4-higit index.
Format: Ln [= expr]
n The L variable to be manipulated.
expr Any ASDT expression.
Examples: L1 = 123456 (disassembly/memory windows)
Places the hexadecimal value 123456 into the L1 variable and
displays the contents of that physical address location.
L2 = SS:SP (disassembly/memory windows)
Places the contents of registers SS and SP into the selector and
offset of variable L2 to display your current stack.
L8 = 002F (LDT/GDT window)
Places the hexadecimal value 002F into the L8 variable and
displays the descriptor found as if 002F had been used as a
selector (in this case, the descriptor will be in the LDT).
L9 = 0003 (IDT window)
Places the hexadecimal value 0003 into the L9 variable and
displays the descriptor found at the fourth descriptor slot in the
IDT.
Remarks: An L1-L9 command without a parameter causes the window that begins
with the specified line to be combined with the previous window.
If the specified line is not the beginning of a window, the
command merely causes the display to be updated.
When you have a secondary window set up, i.e., a memory window in
disassembly mode or a disassembly window in memory mode, you can
set any of the primary address variables and the first address
variable of the secondary window. You cannot set the other
secondary window address variables. (Secondary windows are valid
only for the disassembly and memory windows.)
Commands L1-L9 have the same function as typing over an address in
the window. (Typing over an address in a window is valid only in a
disassembly or memory window.) L1-L9's advantages include the use
of expressions and leaving the cursor on the command line.
When a window address variable is updated with one of these
commands, that variable defines the beginning of a window; the
remaining address variables in that window are also updated.
Scrolling and skipping functions may be performed for the
disassembly and memory windows with these commands in conjunction
with the "/" key and the ENTER key:
"/ L1 = L1 - 10" - does a vertical scroll (upward).
"/ L5 = L5 + 1" - does a horizontal scroll (right).
"/ L1 = L1 + 200" - does a downward skip through memory and can be
useful for locating a large text buffer in memory.
These commands may be used in conjunction with one of the FIND
commands to search memory for the occurrence of an item:
/ FA string ; L1 = FX (memory window)
The above sequence searches memory for an ASCII character string
and, upon finding the string, displays it.
Scrolling and skipping functions may be performed for the LDT/GDT
or IDT windows using the PgUp, PgDn, Ctrl-PgUp, and Ctrl-PgDn
keys. For example:
"PgUp" - does a vertical scroll of the L1 window (upward).
"Ctrl-PgDn" - does a scroll of one line of the L1 window
(downward).
Note: Note that the PgUp, PgDn, Ctrl-PgUp, Ctrl-PgDn, Ctrl-Left
Arrow, and Ctrl-Right Arrow keys provide scrolling in the
disassembly and memory edit windows (not on the command
line).
ΓòÉΓòÉΓòÉ 1.9.31. MW - Memory Window ΓòÉΓòÉΓòÉ
Purpose: Switches to Memory Window mode.
Format: MW [term]
term The line number (L1-M6) at which to start the memory window.
Examples: MW
ASDT switches the edit portion of the ASDT display to a memory
window and sets the primary window mode to memory. If a secondary
disassembly window is displayed, ASDT removes it.
MW L9
ASDT switches lines L9 through M6 of the ASDT display to show
memory. The primary window mode of ASDT is not changed.
Remarks: The memory window displays memory in hexadecimal and either ASCII
or EBCDIC format. Each memory line displays one paragraph (sixteen
bytes) of memory.
ASDT displays the primary window (disassembly or memory) in the
upper right portion of the ASDT screen. If the primary window is
disassembly, then L1 and the following disassembly lines track the
current CS:IP as your program runs. ASDT also tracks CS:IP for a
secondary disassembly window.
See DW - Disassembly Window command, which changes to a
disassembly window and NW - Next Window command, which switches
among all of the ASDT windows.
ΓòÉΓòÉΓòÉ 1.9.32. M1-M6 - Alter Window Area ΓòÉΓòÉΓòÉ
Purpose: Alter the disassembly and memory edit portion of the ASDT display
or the LDT/GDT or IDT portion of the ASDT display by changing the
address of a window display line.
Each disassembly/memory address variable is displayed either as a
selector:offset address or as a 6-higit physical address. Each
LDT/GDT or IDT address variable is displayed as a 4-higit index.
Format: Mn [= expr]
n The M variable to be manipulated.
expr Any ASDT expression.
Examples: M1 = A88762 (disassembly/memory windows)
Places the hexadecimal value A88762 into the M1 variable and
displays the contents of that physical address location.
M2 = CS:IP (disassembly/memory windows)
Places the contents of registers CS and IP into the selector and
offset of variable M2 to display your current instruction.
M4 = 0020 (LDT/GDT window)
Places the hexadecimal value 0020 into the M4 variable and
displays the descriptor found as if 0020 had been used as a
selector (in this case, the descriptor will be in the GDT).
M6 = 0008 (IDT window)
Places the hexadecimal value 0008 into the M6 variable and
displays the descriptor found at the ninth descriptor slot in the
IDT.
Remarks: An M1-M6 command without a parameter causes the window that begins
with the specified line to be combined with the previous window.
If the specified line is not the beginning of a window, the
command merely causes the display to be updated.
When you have a secondary window set up, i.e., a memory window in
disassembly mode or a disassembly window in memory mode, you can
set any of the primary address variables and the first address
variable of the secondary window. You cannot set the other
secondary window address variables. (Secondary windows are valid
only for the disassembly and memory windows.)
Commands M1-M6 have the same function as typing over an address in
the window. (Typing over an address in a window is valid only in a
disassembly or memory window.) M1-M6's advantages include the use
of expressions and leaving the cursor on the command line.
When a window address variable is updated with one of these
commands, that variable defines the beginning of a window; the
remaining address variables in that window are also updated.
Scrolling and skipping functions may be performed with these
commands in conjunction with the "/" key and the ENTER key:
"/ M1 = M1 - 10" - does a vertical scroll (upward).
"/ M5 = M5 + 1" - does a horizontal scroll (right).
"/ M1 = M1 + 200" - does a downward skip through memory and can be
useful for locating a large text buffer in memory.
These commands may be used in conjunction with one of the FIND
commands to search memory for the occurrence of an item:
/ FA string ; M1 = FX (memory window)
The above sequence searches memory for an ASCII character string
and, upon finding the string, displays it.
Scrolling and skipping functions may be performed for the LDT/GDT
or IDT window using the PgUp, PgDn, Ctrl-PgUp, and the Ctrl-PgDn
keys. For example:
"PgUp" - does a vertical scroll of the L1 window (upward).
"Ctrl-PgDn" - does a scroll of one line of the L1 window
(downward).
Note: Note that the PgUp, PgDn, Ctrl-PgUp, Ctrl-PgDn, Ctrl-Left
Arrow, and Ctrl-Right Arrow keys provide scrolling in the
disassembly and memory edit windows (not on the command
line).
ΓòÉΓòÉΓòÉ 1.9.33. M7-M9 - Set Variables M7-M9 ΓòÉΓòÉΓòÉ
Purpose: Sets variables M7-M9. These variables provide scratch pad space.
Each variable consists of either 6 hexadecimal digits or a
selector:offset depending on whether the address is virtual or
physical.
Format: Mn [= expr]
n The M variable to be manipulated.
expr Any ASDT expression.
Examples: M7 = 33F9AB
Places the value '33F9AB'x into the M7 variable.
M8 = V1 : DI
Places the contents of variable V1 and register DI into the
selector and offset of variable M8.
Remarks: Since these variables are not displayed, ASDT shows you a
confirmation message indicating the variable name and value each
time one of these variables is set.
M7 = 111111 + 222222
produces the confirmation message
M7 = 333333
In order to display the contents of one of these variables, you
can copy the contents into a V1-V9 variable (V5=M8), or you can
copy the variable into itself to produce a confirmation message
(M8=M8).
The selector and offset portions of the M7-M9 variables are kept
separately, so you can use these variables when you want to keep
both selector and offset parts of an address.
A variable command with a null operand sets the variable to null.
ΓòÉΓòÉΓòÉ 1.9.34. NW - Next Window ΓòÉΓòÉΓòÉ
Purpose: Switches to the next ASDT window (memory, LDT/GDT, IDT, or
disassembly).
Format: NW
Examples: NW
Switches among the ASDT windows in the following order:
o Disassembly
o Memory
o LDT/GDT
o IDT
Remarks: ASDT switches the edit portion of the ASDT display to the next
window in the sequence, and sets the primary window to the next
window.
The disassembly window displays instructions in both hexadecimal
and disassembled format. If applicable, ASDT also displays the
operand of the instruction.
The memory window displays memory in hexadecimal and either ASCII
or EBCDIC format. Each memory line displays one paragraph (sixteen
bytes) of memory.
The LDT/GDT and IDT windows display descriptor table entries in a
decoded, readable format. Each table entry line displays one
descriptor table entry.
Note: ASDT will not enter the LDT/GDT or IDT window while you are
in real mode.
For disassembly and memory windows, ASDT displays the primary window in the
upper right portion of the ASDT screen. For LDT/GDT and IDT windows, ASDT
replaces the top line of the ASDT display with the GDT address, the IDT
address, the LDT register, the process id, the thread id, and the task state
register. It displays the primary window on the left side of the middle of the
ASDT screen.
If the primary window is disassembly, then L1 and the following disassembly
lines track the current CS:IP as your program runs. ASDT also tracks CS:IP for
a secondary disassembly window.
Refer to MW - Memory Window, LW - LDT/GDT Window, VW - IDT Window, and DW -
Disassembly Window for more information.
ASDT sets function key F4 to the NW command on entry.
ΓòÉΓòÉΓòÉ 1.9.35. OB - Output Byte ΓòÉΓòÉΓòÉ
Purpose: Writes one byte to a designated port.
Format: OB port [, value]
port The I/O port address to which the byte is to be written.
value The register, expression, or ASDT variable to output to the port.
Examples: OB 40 , DL
Writes the contents of the DL register to I/O port '0040'x. The
port and the value written are shown in a message.
OB 21 , BH + CH
Writes the sum of the contents of the BH and CH registers to I/O
port '0021'x.
OB 38
Writes '00'x to I/O port '0038'x.
OB AH , AL
Writes the contents of the AL register to the port specified by
the contents of the AH register.
Remarks: ASDT writes a zero to the port if you omit the value.
ΓòÉΓòÉΓòÉ 1.9.36. OW - Output Word ΓòÉΓòÉΓòÉ
Purpose: Writes one word to a designated port.
Format: OW port [, value]
port The I/O port address to which the word is to be written.
value The register, expression, or ASDT variable to output to the port.
Examples: OW 58 , AX
Writes the contents of the AX register to I/O port '0058'x. The
port and the value written are shown in a message.
OW 21 , BX + CX
Writes the sum of the contents of the BX and CX registers to I/O
port '0021'x.
OW 38
Writes '0000'x to I/O port '0038'x.
OW AX+BX , 10
Writes '10'x to the port specified by the sum of the contents of
the AX and BX registers.
Remarks: ASDT writes a zero to the port if you omit the value.
ΓòÉΓòÉΓòÉ 1.9.37. PD - Print Disassembly ΓòÉΓòÉΓòÉ
Purpose: Prints the current ASDT disassembly window at the LPT1 address.
Format: PD [expr]
expr Any ASDT expression to represent the number of bytes to be
disassembled and printed.
Examples: PD 100
ASDT starts disassembling and printing from the disassembly window
L1 address for 256 bytes.
Remarks: If expr is null, then ASDT will print from the disassembly L1
address to the end of the designated segment.
Note: :LPT1 is assumed and if expr is null while the disassembly
window L1 address is physical, ASDT will disassemble and
print 64K bytes!
ΓòÉΓòÉΓòÉ 1.9.38. PI - Program Identification ΓòÉΓòÉΓòÉ
Purpose: Identifies the current thread's invocation path.
Format: PI [= Sn]
Sn Any of the ASDT breakpoints, V1-V9 and S1-S9.
Examples: PI
Prints the current thread's invocation path on the ASDT message
line.
PI S4
Prints the invocation path of the thread that is associated with
the S4 breakpoint on the ASDT message line.
Remarks: PI is useful in determining what program caused ASDT to get
control. This is especially helpful on a general protection fault.
Note: You can use this command in real mode, too.
ΓòÉΓòÉΓòÉ 1.9.39. PM - Print Memory ΓòÉΓòÉΓòÉ
Purpose: Prints the current ASDT memory window at the LPT1 address.
Format: PM [expr]
expr Any ASDT expression to represent the number of bytes to be
formatted and printed.
Examples: PM 200
ASDT starts formatting and printing from the memory window L1
address for 512 bytes.
Remarks: If expr is null, then ASDT will print from the memory L1 address
to the end of the designated segment.
Note: :LPT1 is assumed and if expr is null while the memory
window L1 address is physical, ASDT will format and print
64K bytes!
ΓòÉΓòÉΓòÉ 1.9.40. PR - Print Screen ΓòÉΓòÉΓòÉ
Purpose: Prints the current ASDT screen.
Format: PR
Examples: PR
Prints the ASDT screen to the printer at the LPT1 address.
Remarks: ASDT uses the LPT1 address for printing. You can also type the
PrtSc key while ASDT is in control to obtain a printout of ASDT's
screen.
ΓòÉΓòÉΓòÉ 1.9.41. RC - Retrieve Command ΓòÉΓòÉΓòÉ
Purpose: Re-displays the last command line that was executed.
Format: RC
Examples: RC
Re-displays the last command line that was entered and places the
cursor at the end of the command line.
Remarks: ASDT saves the contents of up to ten command lines in a circular
queue. Repeated RC commands will re-display the last ten command
lines in reverse order.
Commands entered via function keys or from a profile are not
included in the saved command line queue.
ASDT sets function key F10 to the RC command on entry.
ΓòÉΓòÉΓòÉ 1.9.42. RI - Restore Interrupt command ΓòÉΓòÉΓòÉ
Purpose: Restores an ASDT interrupt to OS/2.
Format: RI = expr
expr Any ASDT expression that indicates which interrupt you want ASDT to
restore to OS/2.
Examples: RI 0
ASDT restores control of interrupt 0 to OS/2.
RI C
ASDT restores control of interrupt '0C'x to OS/2.
Remarks: ASDT controls various interrupts to gain control when some action
that generates one of these interrupts occurs. There are times
when your device driver needs to control one of these ASDT
interrupts. By using the RI command, you can have ASDT relinquish
control of a specific interrupt.
You can tell ASDT not to take over a specific interrupt during its
installation by using the /n parameter (where n is one of 0, 1, 2,
3, 6, C, or D).
See TI - Take Interrupt Command for information on how to take an
ASDT interrupt away from OS/2 for ASDT's usage.
ΓòÉΓòÉΓòÉ 1.9.43. RK - Reset Keyboard Hot Key ΓòÉΓòÉΓòÉ
Purpose: Resets ASDT's monitoring for a hot key.
Format: RK
Examples: RK
ASDT no longer monitors keystrokes when it is not in control.
Remarks: Subsequent hot key keystrokes do not return processor control to
ASDT.
The use of the keyboard hot key can be set at ASDT installation
time with the /K option or at any other time with the SK command.
Setting this option causes ASDT to monitor all keystrokes when it
is not in control to see if you have requested the hot key
function. When your program is running and this option is set, a
hot key will return control to ASDT.
Resetting this option with the RK command removes ASDT keystroke
monitoring duties.
ΓòÉΓòÉΓòÉ 1.9.44. RT - Resume Thread ΓòÉΓòÉΓòÉ
Purpose: Resumes threads that were halted by the HT command.
Format: RT [= pid]
pid The process id of a specific thread that you halted with the HT
command.
Examples: RT
ASDT resumes in LIFO fashion any threads that were halted using
the HT command.
RT 000B
ASDT resumes the thread that was halted by using the HT command
and has a process id number of eleven.
Remarks: The RT command allows a previously halted thread to resume its
processing. You can use the HT - Halt Thread and RT commands in
conjunction with other keystrokes to view your host listings.
If you intend to resume halted threads in some other manner than
the default LIFO fashion adopted by the RT command, then you need
to remember the process id that is associated with each thread
that you halt. ASDT displays a thread's process id at the top line
in either the LDT/GDT or IDT window.
See LW - LDT/GDT Window and VW - IDT Window for these windowing
commands.
Note: This command works for real mode as well except that you
can only halt one application at a time. Additionally, you
will have no need of a process id as a parameter.
ΓòÉΓòÉΓòÉ 1.9.45. SB - Sticky Breakpoint ΓòÉΓòÉΓòÉ
Purpose: To make a specific breakpoint or all breakpoints sticky.
Sticky is defined to mean that ASDT will stop on a given
breakpoint regardless of the current PID and TID.
Format: SB [= ON or OFF or Sn ON or Sn OFF]
Sn Any ASDT breakpoint (V1-S9).
Examples: SB ON
Sets a global sticky flag, which tells ASDT to stop on every 'CC'x
(breakpoint interrupt) that is encountered.
SB OFF
Resets the global ASDT sticky flag so that a decision is made by
ASDT on whether to stop on the current breakpoint based on PID and
TID comparisons.
SB S3 ON
Makes S3 sticky without affecting the status of any other
breakpoint.
SB S3 OFF
Resets S3's sticky status to normal (unless SB ON has set the
global sticky flag).
Remarks: Normally, ASDT expends a great deal of energy to determine whether
it should stop on a 'CC'x that has been encountered. Depending on
the current PID and TID and the PID and TID that were in effect
when you set a breakpoint, ASDT tries to determine if it should
stop execution of your program or yield control back to OS/2.
However, if the global sticky flag is on or if an individual
breakpoint that is hit is sticky, then ASDT knows to take control
regardless of PID and TID information.
Note: ASDT always considers physical address breakpoints, GDT
virtual address breakpoints, and real mode breakpoints to
be sticky.
ΓòÉΓòÉΓòÉ 1.9.46. SC - Screen ΓòÉΓòÉΓòÉ
Purpose: Replaces the ASDT full screen display with the user program
display.
Format: SC
Examples: SC
Displays the user program's screen and waits for any key to be
pressed.
Remarks: Since ASDT uses the display screen to communicate with you, it
saves your program's screen each time ASDT is entered and restores
that screen each time it returns control to your program. When
ASDT is active and you wish to view your screen instead of the
ASDT screen, enter the SC command. Tapping any key restores the
ASDT screen.
ASDT sets function key F6 to the SC command on entry.
ΓòÉΓòÉΓòÉ 1.9.47. SK - Set Keyboard Hot Key ΓòÉΓòÉΓòÉ
Purpose: Sets hot key monitoring by ASDT.
Format: SK [= nn]
Examples: SK
ASDT monitors keystrokes when it is not in control to see if you
have typed the currently-defined hot key. This defaults to the
PrtSc key.
SK 4A
Defines the hot key to scancode 4A, which is the keypad minus.
Remarks: Subsequent hot key keystrokes return processor control to ASDT.
The use of the keyboard hot key can be set at ASDT installation
time with the /K option. Setting this option causes ASDT (when it
is not in control) to monitor keystrokes searching for a hot key.
When your program is running and this option is set, a hot key
will return control to ASDT.
Resetting this option with the RK command removes ASDT's
monitoring of keystrokes.
ΓòÉΓòÉΓòÉ 1.9.48. SR - System Reset ΓòÉΓòÉΓòÉ
Purpose: Performs a system reset.
Format: SR
Examples: SR
Re-ipls the machine causing control to be given to the boot-strap
loader.
Remarks: This command is useful if you want a fresh power-on of the system
without turning the power switch off and on. Memory is not
rechecked, and it is cleared. ASDT does not regain control with
this command.
ΓòÉΓòÉΓòÉ 1.9.49. ST - Step ΓòÉΓòÉΓòÉ
Purpose: Executes a specified number of user program instructions.
Format: ST [= expr]
expr Any ASDT expression.
Examples: ST 4
Four user program instructions are executed.
Remarks: If the operand is null, the number of instructions executed
defaults to the value of the step count variable (CT).
Your display screen is restored, one user program instruction is
executed, the breakpoints are activated, and the remaining user
program instructions are executed. Program execution is terminated
by one of the interrupts ASDT handles, by a breakpoint, or by the
step count. The reason for termination is displayed with a message
or a breakpoint highlight.
Execution of your program always begins at the location pointed to
by CS:IP.
ASDT uses only the least significant 16 bits that result from an
expression evaluation to set the ST value. ASDT truncates any
additional bits and displays a warning message.
Be aware of interrupts that prevent processor control from passing
to ASDT. The timer, for example, would cause an interrupt between
each depression of the ENTER key. Since ASDT resets the IF flag
before executing each user program instruction, it is not always
aware of user program instructions which modify the IF flag. At
those times when ASDT does not keep the IF flag properly updated,
it is your responsibility to update the IF flag via the IF
command.
ASDT sets function key F8 to the ST command on entry.
ΓòÉΓòÉΓòÉ 1.9.50. S1-S9 - Set Breakpoints S1-S9 ΓòÉΓòÉΓòÉ
Purpose: Sets the breakpoints that are displayed near the top of the ASDT
display screen.
Each breakpoint is either an absolute, 6-higit physical address,
or it is a selector:offset address. It is displayed as a 6-higit
address or as an offset from some selector or as "....." to
indicate that the breakpoint is null.
Format: Sn [= expr or ON or OFF]
n The S breakpoint to be manipulated.
expr Any ASDT expression.
ON Activates Sn as a breakpoint.
OFF Suspends Sn as a breakpoint.
Examples: S1 = 345C00
Sets the S1 breakpoint to address hex 345C00. If this address is
below or more than 64KB above the CS and the CO, the breakpoint is
displayed as "345C00."
S2 = CO + 4
Sets the S2 breakpoint to four bytes beyond the current code
origin address. The breakpoint is displayed as "$0004."
S5 = CS:CX
Sets the S5 breakpoint to the current code segment plus the
contents of the CX register. The breakpoint is displayed with a
leading "+."
S8 OFF
Deactivates the S8 breakpoint.
Remarks: When a breakpoint is activated, the instruction at that address is
disassembled and displayed on the message line.
When any of the active breakpoints is encountered during the
execution of a user program, execution is stopped and control is
given to ASDT. In addition to the nine S1-S9 breakpoints, the nine
V1-V9 variables may be used for address stops to provide a maximum
of eighteen address stops per screen. Since there are nine ASDT
screens, a total of 162 address stops may be active at any given
time.
ASDT displays active breakpoints in a relative address format if
possible. A relative address is designated by a "$" for CO, a "+"
for CS, or a "*" for any other selector when the breakpoint is not
a 6-higit physical address. When a breakpoint is not active, ASDT
displays it as a 6-higit address if it is a physical address,
otherwise it is displayed as a 4-higit offset with a leading "?."
The following examples show how breakpoints are displayed under
the various conditions:
Command CO Setting CS Base Address CS Setting Resulting Display
S1=CO+200 3D5900 200000 002F S1:$0200
S5=CO-1A5 +5900 3D0000 001F S5:+575B
S8=3D5900 null 3D0000 001F S8:+5900
S2=2D0003 3D5900 100000 004F S2:2D0003
S1=DS:4567 +5900 3D0000 001F S1:*4567
S1=CO;S1 OFF 3D5900 200000 002F S1:3D5900
S1=CO;S1 OFF 003F:0004 3D0000 001F S1:?0004
ASDT highlights active breakpoints on the ASDT display screen.
Once you deactivate a breakpoint with an OFF operand, it remains
deactivated until it is reactivated with an ON operand.
Note: ASDT will not reactivate a breakpoint for a process or
thread that has terminated. This is due to the fact that
every breakpoint has a process id, a thread id, and an LDT
associated with it when it is set. You may deactivate and
reactivate the breakpoint while its associated information
is still valid, but you can not reactivate it once its
thread has been terminated. If you want to reactivate a
screen's breakpoints and associate their addresses with the
current process id, thread id, and LDT, then issue a Dn ON
command
Note: When in real mode, you will set segment:offset breakpoints and physical
address breakpoints. The physical address breakpoints will be limited
to 5 higits even though they will be displayed as 6 higits.
You can not set, deactivate, or reactivate a virtual real mode breakpoint
while in protected mode and vice versa. Additionally, you can not set,
deactivate, or reactivate a physical address breakpoint that is above the 1M
line in real mode.
A breakpoint command with a null operand sets the breakpoint to null.
A special form of breakpoint, the procedure step, is used to run an entire
module or section of code that is invoked with a CALL, INT, or REP
instruction. ASDT provides a procedure step function, which uses S9 to set a
breakpoint at the instruction following the one about to be executed. If the
instruction about to be executed is a CALL, INT, or REP, the effect is for the
entire module to be executed. The command sequence is "S9 = EX+IL;EX;S9."
ASDT sets function key F9 to the procedure step command sequence on entry.
You can change active breakpoints into complex breakpoints with the CB -
Complex Breakpoint command. See also Setting Breakpoints.
ΓòÉΓòÉΓòÉ 1.9.51. TI - Take Interrupt Command ΓòÉΓòÉΓòÉ
Purpose: Takes an ASDT interrupt from OS/2 for ASDT's usage.
Format: TI = expr
expr Any ASDT expression that indicates which interrupt you want ASDT to
take from OS/2.
Examples: TI 2
ASDT takes control of interrupt 2 from OS/2.
TI D
ASDT takes control of interrupt '0D'x from OS/2.
Remarks: ASDT controls various interrupts to gain control when some action
that generates one of these interrupts occurs. There are times
when your device driver needs to control one of these ASDT
interrupts. By using the RI - Restore Interrupt command, you can
have ASDT relinquish control of a specific interrupt. By using the
TI command, you can have ASDT regain control of the specific
interrupt.
ΓòÉΓòÉΓòÉ 1.9.52. TP - Terminate Process ΓòÉΓòÉΓòÉ
Purpose: Terminates the current process that ASDT is monitoring.
Format: TP
Examples: TP
ASDT terminates the current process (program) and returns to OS/2.
Remarks: TP allows you to end a process that ASDT has intercepted. This is
useful when a stack limit violation or a general protection fault
has caused ASDT to gain control.
ASDT can not terminate a process that is running at level 0. ASDT
will issue a warning message if you try to do this, and will not
attempt to terminate the process. Additionally, if you issue TP
for a device driver that ASDT is monitoring during the
initialization phase, the system will hang.
ASDT sets function key F3 to the TP command on entry.
Note: In the DOS compatibility box, you should use the TP command
only to terminate an application (not a device driver, a
resident interrupt handler, etc.).
ΓòÉΓòÉΓòÉ 1.9.53. TS - Task State Register ΓòÉΓòÉΓòÉ
Purpose: Alters the contents of the TSR.
Format: TS [= expr]
expr Any ASDT expression.
Examples: TS = 2A
ASDT sets the task state register to '2A'x.
Remarks: The current TSR (task state register) is changed when you enter
the TS command. When you change the TSR, your program may not be
able to continue with the altered value.
ASDT uses only the least significant 16 bits that result from an
expression evaluation to set the TSR. ASDT truncates any
additional bits and displays a warning message.
The TS command with a null operand restores your program's TSR to
its original value. If you attempt to set the TSR to an invalid
value, ASDT will display a message and will not set the register.
Note: This command can not be used in real mode.
ΓòÉΓòÉΓòÉ 1.9.54. T0 - Suspend/Reactivate 80386 Hardware Debug Registers ΓòÉΓòÉΓòÉ
Purpose: Suspends or reactivates the 80386 hardware debug registers
(DR0-DR3).
Format: T0 [= ON or OFF]
ON Reactivates all DRx that have settings.
OFF Suspends all DRx that have settings.
Examples: T0 OFF
Keeps DR0-DR3 disarmed upon exit from ASDT.
T0 ON
Reactivates all of DR0-DR3 that have settings.
Remarks: If you reference the T1-T4 commands (see T1-T4 - Set 80386
Hardware Debug Registers) you will notice that ASDT will
deactivate your DR0-DR3 settings for various reasons that
generally deal with the fact that the PID under which you set
DR0-DR3 has been switched out or terminated. T0 ON will
reactivate any suspended hardware debug register setting and will
associate the current PID (in protected mode) with it.
Note: You can not reactivate a virtual real mode DRx breakpoint
while in protected mode and vice versa. Additionally, you
can not reactivate a physical address breakpoint that is
above the 1M line in real mode. This also implies that
certain DRx breakpoints will be "lost" if you enter ASDT in
one mode after having set DRx breakpoints in the opposite
mode. These DRx breakpoints will be reestablished once you
enter ASDT in the mode that they were first set.
ΓòÉΓòÉΓòÉ 1.9.55. T1-T4 - Set 80386 Hardware Debug Registers ΓòÉΓòÉΓòÉ
Purpose: Sets the 80386 hardware debug registers (DR0-DR3).
Each DRx is set by using the Tn command where n is 1-4 and x=n-1.
ASDT uses the information specified with the T1-T4 commands to
load DR0-DR3 and DR7 upon return to OS/2.
Format: Tn [= opnds or ON or OFF]
n The DRx register to be set (x=n-1); e.g., the T4 command sets DR3.
null ASDT retrieves information about DRx's current setting and places
this data on the command line for review or editing.
opnds operands (addr,action,len,context,exact) that must appear in this
order. Only addr is required.
addr Any ASDT expression that defines the address that you want DRx
to monitor. A virtual address will have ASDT calculate the
linear address whereas a physical address will be loaded into
DRx as is.
action I (breaks on instruction execution only), W (breaks on data
writes only), or R (breaks on data reads or writes but not on
instruction fetches). The default action is W.
len 1, 2, or 4 to specify the length of the data item to be
monitored. The 80386 hardware requires that multiple-byte fields
be aligned on their proper boundaries. For the I action, ASDT
will force the length byte to 1. The default length is 1 byte.
context G (global level) or L (local level). The default context is
global.
exact E (exact data breakpoint match) or ╨║ (for inexact data
breakpoint match). The 80386 processor slows the execution so
that data breakpoints are reported on the instruction that
causes them when the exact option is indicated. The default is
exact.
ON Reactivates DRx.
OFF Suspends DRx.
Examples: T1 5F:0245,I
Sets DR0 to stop on instructions referenced at this location.
T2 123456,R,2,G,╨║
Sets DR1 to stop on data reads/writes from/to this location
without the exact option.
T3 OFF
Deactivates DR2.
T1
Places the current settings associated with DR0 on the ASDT
command line for review or editing.
Remarks: In general, ASDT is allowing you to set the 80386 hardware
registers as mentioned in the Intel 80386 Programmer's Reference.
You should apprise yourself with this reference guide before using
the T1-T4 commands.
The 80386 hardware automatically resets the local enable bits of
DR7 at every task switch to avoid unwanted breakpoint conditions
in the new task. However, OS/2 does not implement hardware task
switching. Hence, ASDT does the best it can to determine when a
hardware debug register is "truly" hit for your settings; i.e., if
you use local context, ASDT looks to see if the current PID (when
in protected mode) matches the one that was in effect when you set
DRx. If the PIDs do not match, ASDT disables the local context
DRx, and returns control to OS/2.
Note: Global context means that ASDT will not check DRx's PID.
ASDT just assumes that you always want the trap. The same
holds true for all physical address DRx settings
regardless of context. Even so, ASDT will deactivate a DRx
with a global context if it determines that the virtual
address does not use the GDT and its PID has been killed.
Note: You can not reactivate a virtual real mode DRx breakpoint while in
protected mode and vice versa. Additionally, you can not reactivate a
physical address breakpoint that is above the 1M line in real mode.
This also implies that certain DRx breakpoints will be "lost" if you
enter ASDT in one mode after having set DRx breakpoints in the opposite
mode. These DRx breakpoints will be reestablished once you enter ASDT
in the mode that they were first set.
See T0 - Suspend/Reactivate 80386 Hardware Debug Registers for a method that
allows you to suspend or reactivate all 4 DR0-DR3 registers at once.
ΓòÉΓòÉΓòÉ 1.9.56. UM - User Mask ΓòÉΓòÉΓòÉ
Purpose: Displays and optionally sets the interrupt controller mask while
ASDT has processor control.
Format: UM [= value]
value The interrupt mask value (must evaluate to '00'x through 'FF'x).
Examples: UM
Displays the current ASDT mask for the 8259 interrupt levels.
UM BC
Sets the user mask to 'BC'x, which allows only the keyboard and
diskette interrupts while ASDT has control (assuming that these
interrupts were not disabled by your program).
Remarks: ASDT will not let you set a value which disables the keyboard.
When ASDT gets control, ASDT saves the current interrupt mask
register (I/O port '21'x). It then ORs the value you select with
the current mask.
Note: This means you cannot enable interrupts in ASDT that were
disabled in your program.
ASDT initializes the user mask to '00'x. You can specify another initial
value for ASDT with the /U=nn parameter used by ASDT during installation (nn
represents the byte that you want to serve as the user mask).
The UM command allows you to specify which 8259 interrupt levels are to be
masked off while in ASDT. However, when ASDT returns control to your program
(via the EX, HT, ST, and TP commands), it restores the previously saved
interrupt mask register value.
Because of the complex nature of this command, only those familiar with 8259
interrupt levels and operation should use it.
ΓòÉΓòÉΓòÉ 1.9.57. U1-U9 - User-defined Functions ΓòÉΓòÉΓòÉ
Purpose: Allows you to call some of your own routines while under ASDT.
Format: Un [= expr]
n 1-9 to designate the member, U1-U9, of the dynamic load library,
UX.DLL, that you want to call.
expr Any ASDT expression that evaluates to a 32-bit pointer that you
want to pass to your routine.
Examples: U3 DS:23
Invokes U3, a member of the dynamic load library, UX.DLL, and
passes it the 32-bit pointer, DS:23.
U9
Invokes U9, a member of the dynamic load library, UX.DLL, without
passing it a parameter.
Remarks: ASDT assumes that you have the dynamic load library, UX.DLL,
located in a library path that is searched by OS/2. You can
define routines, U1-U9, for this DLL that can be called by ASDT
using the U1-U9 commands.
A 32-bit pointer is optionally passed as a parameter to your
routine. It is up to you to make sure that your routine allows or
does not allow for these two words on the stack.
ASDT gives control to your routine, which runs as a level 3
application extension to ASDT. ASDT puts in all of the breakpoints
that you have defined before control is given to your routine.
This needs to be done as the CPU is yielded when a level 3
application thread is running.
ASDT will "spin" on any breakpoint that is encountered while your
routine has control. Hence, ASDT will not be reentered while your
routine is running unless some error condition interrupt occurs.
If this happens, the results are unpredictable. As a consequence
of this, you should not put any 'CC'x breakpoints in any of your
UX.DLL routines.
It is your responsibility to preserve the DS, SS, SP, and BP
registers for ASDT. ASDT waits for your routine to return control
to it before it continues its processing.
If you use the UX.DLL provided with ASDT, you can issue the "U2
SC" command to have ASDT dump its screen contents to a file named
ASDT.OUT. The SC variable is a special parameter that is a level 3
selector:offset to the internal screen buffer of ASDT. It can be
used as a parameter to any of the user-defined functions.
Note: This command can not be used in real mode.
ΓòÉΓòÉΓòÉ 1.9.58. VW - IDT Window ΓòÉΓòÉΓòÉ
Purpose: Switches to IDT Window Mode.
Format: VW
Examples: VW
ASDT switches the edit portion of the ASDT display to an IDT
window and sets the primary window mode to IDT.
Remarks: The IDT window displays descriptor table entries in a decoded,
readable format. Each table entry line displays one descriptor
table entry.
For an IDT window, ASDT replaces the top line of the ASDT display
with the GDT address, the IDT address, the LDT register, the
process id, the thread id, and the task state register. It
displays the primary window on the left side of the middle of the
ASDT screen.
Also see the NW - Next Window command which switches among all of
the ASDT windows.
Note: This command can not be used in real mode.
ΓòÉΓòÉΓòÉ 1.9.59. V1-V9 - Set Variables V1-V9 ΓòÉΓòÉΓòÉ
Purpose: Sets the variables that are displayed near the top of the ASDT
display screen.
These variables provide scratch pad space and additional
breakpoints. Each breakpoint is either an absolute, 6-higit
physical address, or it is a selector:offset address. It is
displayed as a 6-higit address or as an offset from some selector
or as "....." to indicate that the breakpoint is null.
Format: Vn [= expr or ON or OFF]
n The V breakpoint to be manipulated.
expr Any ASDT expression.
ON Activates Vn as a breakpoint.
OFF Suspends Vn as a breakpoint.
Examples: V1 = CS:IP + 2B8
Adds '2B8'x to the current program counter and places the result
in the V1 variable.
V2 = V1 + AX
Places the sum of the contents of variable V1 and the AX register
into the V2 variable.
V5 = CO:CX;V5 ON
Sets the V5 breakpoint to the current code origin plus the
contents of the CX register and activates the breakpoint. The
breakpoint is displayed with a leading "$."
Remarks: At times, it may be useful to use one or more of the V1-V9
variables as address stops (breakpoints). ASDT displays active
breakpoints in a relative address format if possible. A relative
address is designated by a "$" for CO, a "+" for CS, or a "*" for
any other selector when the breakpoint is not a 6-higit physical
address. When a breakpoint is not active, ASDT displays it as a
6-higit address if it is a physical address, otherwise it is
displayed as a 4-higit offset with a leading "?." The default
state for the V breakpoints is inactive.
See Setting Breakpoints and S1-S9 - Set Breakpoints S1-S9 for more
information.
ASDT highlights active breakpoints on the ASDT screen. Once you
activate a variable with an ON operand, it remains activated until
it is deactivated either with an OFF operand or by being set to
null.
Note: ASDT will not reactivate a breakpoint for a process or
thread that has terminated. This is due to the fact that
every breakpoint has a process id, a thread id, and an LDT
associated with it when it is set. You may deactivate and
reactivate the breakpoint while its associated information
is still valid, but you can not reactivate it once its
thread has been terminated. If you want to reactivate a
screen's breakpoints and associate their addresses with the
current process id, thread id, and LDT, then issue a Dn ON
command.
Note: When in real mode, you will set segment:offset breakpoints and physical
address breakpoints. The physical address breakpoints will be limited
to 5 higits even though they will be displayed as 6 higits.
You can not set, deactivate, or reactivate a virtual real mode breakpoint
while in protected mode and vice versa. Additionally, you can not set,
deactivate, or reactivate a physical address breakpoint that is above the 1M
line in real mode.
A breakpoint command with a null operand sets the breakpoint to null.
You can change active breakpoints into complex breakpoints with the CB -
Complex Breakpoint command.
ΓòÉΓòÉΓòÉ 1.9.60. WA - Window Assumption ΓòÉΓòÉΓòÉ
Purpose: Causes ASDT to make assumptions about the selector used for
setting the window, breakpoint, and CO variables during assignment
commands.
Format: WA [ON or OFF]
Examples: WA ON
Causes ASDT to use window assumptions.
WA OFF
Causes ASDT to stop using window assumptions.
Remarks: Window assumptions affect assignments to the window, breakpoint,
and CO variables. Some examples follow that assume that ASDT is
using window assumptions:
CO 35 - CO gets CS:35
S8 1234 - S8 gets CO+1234 or CS:1234 depending on whether
the code origin is set
L1 IP - L1 gets CS:IP if CO is null
L1 LC - L1 gets CO+LC if CO is set
Note: ASDT will use a physical address if you specify a source
constant or variable that is greater than 'FFFF'x. If you
specify a source constant or variable that consists of a
selector and an offset, ASDT will use that selector and
offset.
The /W option has ASDT use window assumptions, too.
ΓòÉΓòÉΓòÉ 1.9.61. XS - Extra Selector Register ΓòÉΓòÉΓòÉ
Purpose: Alters the contents of the extra selector register variable.
Format: XS [= expr]
expr Any ASDT expression.
Examples: XS = 1C42
Places the value '1C42'x into the XS variable.
XS = CS
Copies the contents of the CS register into the XS variable.
Remarks: To save and restore selector register contents, use the XS segment
register variable. ASDT treats XS just like a real selector
register.
ASDT uses only the least significant 16 bits that result from an
expression evaluation to set the XS variable. ASDT truncates any
additional bits and displays a warning message.
A null operand sets the XS variable to zero.
ΓòÉΓòÉΓòÉ 1.10. ASDT Messages ΓòÉΓòÉΓòÉ
This section describes all of the messages that may appear on the ASDT display
screen message line. A message either indicates that an action was taken or
describes an error that has occurred.
If you have trouble understanding an error or what action to take in response
to an error, refer to the appropriate command in ASDT Command Reference.
Messages are listed by subject.
ΓòÉΓòÉΓòÉ 1.10.1. General Messages ΓòÉΓòÉΓòÉ
BREAKPOINT(S) DEACTIVATED ASDT deactivated at least one breakpoint. This
usually happens due to the fact that some process or thread has terminated,
and ASDT can no longer track breakpoints with that process or thread.
BREAKPOINT CONFLICTS WITH MODE ASDT can not set, deactivate, or reactivate at
least one breakpoint because it was set in real mode and you are now in
protected mode or vice versa.
COMMAND "xx" NOT RECOGNIZED The command you issued was not a valid ASDT
command.
INVALID SELECTOR SPECIFIED The selector you have specified for some ASDT
command is invalid.
LDT BASE ADDRESS HAS CHANGED You tried to execute an ASDT command that
requires the LDT to be what it was upon entry.
CMD USED ONLY IN PROTECT MODE You tried to execute an ASDT command that is
valid only in the protected mode, and you are executing in real mode.
ΓòÉΓòÉΓòÉ 1.10.2. Invocation Messages ΓòÉΓòÉΓòÉ
COLOR DISPLAY NOT PRESENT You specified the /M option in your CONFIG.SYS file,
and ASDT does not detect the presence of a color display adapter.
DIVIDE-BY-ZERO INTERRUPT (0) ASDT gained control via a divide by zero
interrupt. This usually indicates an error in your program, but does not
necessarily indicate a division error.
ERROR READING PROFILE: xxxxxxx ASDT failed when it tried to read in a profile
due to some specification by you in the CONFIG.SYS file.
GENERAL PROTECTION FAULT xxxx ASDT gained control because an Int D occurred.
This indicates that there was a general protection fault. The error code is
shown and is retained in the ASDT variable, EC.
HOT KEY INTERRUPT ASDT gained control because you typed the currently defined
hot key. The hot key yields control to ASDT if you have issued an SK command
or if you invoked ASDT with the /K option.
MONOCHROME DISPLAY NOT PRESENT You specified the /M option in your CONFIG.SYS
file, and ASDT does not detect the presence of a monochrome display adapter.
NMI SWITCH INTERRUPT (2) ASDT gained control due to an Int 2 being issued.
This usually means that you hit the NMI switch.
PARAMETER UNRECOGNIZED: /x ASDT did not recognize an invocation parameter that
you specified in the CONFIG.SYS file.
SINGLE STEP TRAP INTERRUPT (1) ASDT gained control because the trap flag (TF)
was set while the processor was executing an instruction. You may clear this
flag with the TF command and continue if desired.
STACK LIMIT VIOLATION ASDT gained control because an Int C occurred. This
indicates that the stack limit was violated.
386 DEBUG REGISTER TRAP (DRn) ASDT gained control because the 80386 hardware
debug register n signalled an event.
INVALID OPCODE INTERRUPT (6) ASDT gained control because an invalid opcode was
detected by the execution unit or the type of operand is invalid for the
given opcode.
ΓòÉΓòÉΓòÉ 1.10.3. Expression Evaluation Messages ΓòÉΓòÉΓòÉ
UNRECOGNIZED OPERAND: xxxxxxxx A term in the command expression you entered
was not valid.
WARNING: OPERAND TRUNCATED This message warns you that the operand you
specified is too large to fit in the target register or variable. ASDT fits
as much as possible and truncates the rest.
ΓòÉΓòÉΓòÉ 1.10.4. "CA" Command Messages ΓòÉΓòÉΓòÉ
CONFLICTS WITH xxxxxxxxxx The color attribute you specified is the same as
another attribute (normal, highlight, or reverse). Each attribute must be
different.
ΓòÉΓòÉΓòÉ 1.10.5. "CB" Command Messages ΓòÉΓòÉΓòÉ
BREAKPOINT IS NOT ACTIVE You attempted to set a complex breakpoint when that
breakpoint was inactive. Activate or set the breakpoint address before
setting up the complex condition and count.
BREAKPOINT IS NOT COMPLEX You have requested to see the complex definition of
a particular breakpoint, but that breakpoint is not complex.
BREAKPOINT NOT RECOGNIZED The complex breakpoint you have attempted to set is
not a valid breakpoint.
COMPLEX BREAKPOINT DEACTIVATED A complex breakpoint's occurrence count has
matched the count, and ASDT has taken the breakpoint. ASDT deactivates the
breakpoint.
CONDITION MUST BE < 16 CHARS ASDT limits a complex condition field to 15
characters.
COUNT FIELD EXPRESSION INVALID You have specified an unrecognized ASDT
expression for the count field.
OCCURRENCE COUNT = xx ASDT displays the complex condition and count for the
breakpoint you requested.
SYNTAX: CB SX CONDITION,COUNT ASDT displays the syntax for the command.
VALID OPERATOR NOT FOUND ASDT expects one of the following logical operators
for a complex condition: <, >, =, <=, >=, or <>.
1ST EXPRESSION IS INVALID You have requested an unrecognized ASDT expression
for the left half of the complex breakpoint condition.
2ND EXPRESSION IS INVALID You have requested an unrecognized ASDT expression
for the right half of the complex breakpoint condition.
ΓòÉΓòÉΓòÉ 1.10.6. "CG" Command Messages ΓòÉΓòÉΓòÉ
COLOR DISPLAY NOT PRESENT You specified the MS parameter for the CG command,
and ASDT does not detect the presence of a color display adapter.
MONOCHROME DISPLAY NOT PRESENT You specified the MS parameter for the CG
command, and ASDT does not detect the presence of a monochrome display
adapter.
USING MULTIPLE SCREENS ASDT is using the secondary display because the
multiple screen configuration has been selected.
USING REMOTE TERMINAL ASDT is using the remote terminal display because this
configuration has been selected.
USING SINGLE SCREEN ASDT is using the primary display because the multiple
screen or remote terminal configuration has been reset.
ΓòÉΓòÉΓòÉ 1.10.7. "CM" Command Messages ΓòÉΓòÉΓòÉ
INVALID ADDRESSING EXPRESSION One of the two memory addressing expressions is
not acceptable to ASDT.
LENGTH FIELD EVALUATES TO 0 You have specified an ASDT expression for the
length field that evaluates to 0. Hence, the command is not executed.
SEGMENT LIMIT WILL BE VIOLATED A segment limit violation will occur if ASDT
compares the two memory blocks for the length that you have specified.
SYNTAX: CM ADDR1,ADDR2,LENGTH ASDT displays the syntax for the command.
xxx OF xxxxx MISMATCHES ASDT is comparing the two memory blocks and is
displaying as much of the two blocks as possible. The number of mismatches
shown on the screen and the total number of mismatches are displayed.
ΓòÉΓòÉΓòÉ 1.10.8. "CP" Command Messages ΓòÉΓòÉΓòÉ
INVALID ADDRESSING EXPRESSION One of the two memory addressing expressions is
not acceptable to ASDT.
LENGTH FIELD EVALUATES TO 0 You have specified an ASDT expression for the
length field that evaluates to 0. Hence, the command is not executed.
SEGMENT LIMIT WILL BE VIOLATED A segment limit violation will occur if ASDT
copies the memory block to the indicated destination for the length that you
have specified.
SYNTAX: CP ADDR1,ADDR2,LENGTH ASDT displays the syntax for the command.
ΓòÉΓòÉΓòÉ 1.10.9. "DK" Command Messages ΓòÉΓòÉΓòÉ
FUNCTION KEY BUFFER IS FULL You have exceeded the amount of space ASDT has set
up for commands associated with function keys. The total amount of space for
function key commands is 800 bytes.
KEY IS NOT DEFINED You pressed a function key that has not been defined. No
action was taken by ASDT.
KEY "xxxxx" DEFINED The function key definition you specified was added to the
list of function keys.
KEY "xxxxx" DEFINITION REMOVED The function key definition you specified was
removed from the list of function keys.
ΓòÉΓòÉΓòÉ 1.10.10. "DW," "MW," "LW," and "VW" Command Messages ΓòÉΓòÉΓòÉ
INVALID DESCRIPTOR You tried to use L1-M6 as a source variable while you were
in an LDT/GDT or IDT window, and the descriptor that was referenced is not
valid.
OPERAND NOT ALLOWED ASDT does not allow an LDT/GDT or IDT secondary window.
ΓòÉΓòÉΓòÉ 1.10.11. "EP" Command Messages ΓòÉΓòÉΓòÉ
ASDT PROFILE WAS NOT READ IN No profile was read in during the initialization
phase. Hence, the EP command can not be executed.
COMMAND TOO LONG - ABORTED A command in the specified profile is too long to
fit on ASDT's command line.
PROFILE NOT ENTIRELY READ IN ASDT has a limit on the total number of bytes it
will read in for a profile during the initialization phase. If your profile
contains more than 1600 bytes, it will be truncated.
ΓòÉΓòÉΓòÉ 1.10.12. "EX" Command Messages ΓòÉΓòÉΓòÉ
EX COMMAND ALLOWS NO OPERANDS You specified an operand with the EX command,
and ASDT will not allow operands to be used with the EX command.
ΓòÉΓòÉΓòÉ 1.10.13. "F," "FA," "FC," "FE," and "FX" Command Messages ΓòÉΓòÉΓòÉ
xxxxxxxx FOUND AT xxxxxxxx The search string you requested was found at the
memory location displayed at the right.
STRING xxxxxxxx NOT FOUND The search string you requested could not be found.
* OR SELECTOR EXPR REQUIRED You have a "," delimiter, which indicates the need
for either a following "*" (task search indicator) or ASDT selector
expression (for a single segment search).
ΓòÉΓòÉΓòÉ 1.10.14. "HT" and "RT" Command Messages ΓòÉΓòÉΓòÉ
ASDT CAN NOT RESUME THE THREAD ASDT can not resume a halted thread because
that thread has terminated.
HT COMMAND ALLOWS NO OPERANDS You specified an operand with the HT command,
and ASDT will not allow operands to be used with the HT command.
NO HALTING AT A BREAKPOINT ASDT will not allow you to halt a thread at a
breakpoint. This is due to the fact that ASDT inserts your breakpoints for
you before it halts the thread.
NO THREADS CURRENTLY HALTED ASDT can not resume any threads because none are
halted.
PID SPECIFIED IS NOT FROZEN ASDT can not resume a specific thread of the
process id (pid) that you specified because it did not halt a thread of that
particular pid.
TOO MANY THREADS HALTED ASDT currently allows only ten threads to be halted at
the same time.
PARAMETER ^USED IN REAL MODE The RT command does not need a parameter to
reflect the process id in real mode.
ΓòÉΓòÉΓòÉ 1.10.15. "IB," "IW," "OB," and "OW" Command Messages ΓòÉΓòÉΓòÉ
VALUE xxxx OUTPUT TO PORT xxxx This message lists the port to which you wrote
data and the value of that data.
VALUE xxxx READ FROM PORT xxxx This message listed the port from which you
read data and the value of that data.
ΓòÉΓòÉΓòÉ 1.10.16. "LD" Command Messages ΓòÉΓòÉΓòÉ
INVALID DESCRIPTOR You tried to use an index that referenced a descriptor that
is not a valid LDT descriptor.
INVALID LDT BASE ADDRESS You tried to alter the current LDT base address to a
physical address that is not the start of a valid LDT.
ΓòÉΓòÉΓòÉ 1.10.17. "L1-M6" and "M7-M9" Command Messages ΓòÉΓòÉΓòÉ
CAN'T SET "Lx" IN THIS WINDOW You have a split disassembly/memory window and
have tried to set a second window segment in the secondary window. ASDT
allows only one secondary window segment (e.g., one memory window in
disassembly mode).
Mx = xxxxxx ASDT has set the contents of the displayed variable as shown
(e.g., M7 = 999003, or Mx = 1234:99AF).
ΓòÉΓòÉΓòÉ 1.10.18. "PD and PM" Command Messages ΓòÉΓòÉΓòÉ
SEGMENT LIMIT WOULD OVERFLOW A segment limit violation would occur if ASDT
prints the disassembly or memory block for the length that you have
specified.
ΓòÉΓòÉΓòÉ 1.10.19. "PI" Command Messages ΓòÉΓòÉΓòÉ
ASDT CAN NOT LOCATE THE PATH ASDT can not find the current thread's invocation
path. This happens most often with device drivers during the initialization
phase.
BREAKPOINT IS NOT SET The breakpoint you have attempted to use as a parameter
to the PI command is valid, but it has no value associated with it. Hence,
it has no process or thread associated with it either.
BREAKPOINT NOT RECOGNIZED The breakpoint you have attempted to use as a
parameter to the PI command is not valid.
C:\TEST\BIN\TEST.EXE This is an example of a successful program identification
by ASDT.
ΓòÉΓòÉΓòÉ 1.10.20. "PR" Command Messages ΓòÉΓòÉΓòÉ
PRINT CANCELLED DUE TO ERROR ASDT detected a problem with the printer. The
printing operation has been terminated.
ΓòÉΓòÉΓòÉ 1.10.21. "RI" and "TI" Command Messages ΓòÉΓòÉΓòÉ
ASDT DOESN'T OWN THE INTERRUPT ASDT is not the current owner of the interrupt
that you wish to restore to OS/2.
ASDT DOESN'T USE THE INTERRUPT The operand you specified does not indicate an
interrupt that ASDT uses.
ASDT ALREADY HAS THE INTERRUPT You are trying to take an interrupt for ASDT
that it already owns.
RI(TI) COMMAND REQUIRES AN OPERAND Both of these commands require a specified
interrupt as an operand.
INTERRUPT ^USED IN REAL MODE While in real mode, you tried to take or restore
an interrupt that ASDT does not use for real mode.
REAL INT TAKEN/IDT LEFT AS IS While in real mode, you tried to take an
interrupt that ASDT uses in both real mode and protected mode. ASDT was
able to take the real-mode interrupt from the IVT, but it was not able to
take the protected-mode interrupt from the IDT.
REAL INT GIVEN/IDT LEFT AS IS While in real mode, you tried to restore an
interrupt that ASDT uses in both real mode and protected mode. ASDT was
able to restore the real-mode interrupt to the IVT, but it was not able to
restore the protected-mode interrupt to the IDT.
ΓòÉΓòÉΓòÉ 1.10.22. "RK" and "SK" Command Messages ΓòÉΓòÉΓòÉ
HOT KEY HAS BEEN DISABLED ASDT will no longer monitor keystrokes for a hot
key.
HOT KEY DEFINED AS 'nn'X The hot key has been set as the scancode nn.
ΓòÉΓòÉΓòÉ 1.10.23. "SB" Command Messages ΓòÉΓòÉΓòÉ
BREAKPOINT IS NOT ACTIVE You attempted to set a breakpoint as sticky or as not
sticky and it is inactive. Activate or set the breakpoint address before
trying to change its sticky status.
BREAKPOINT NOT RECOGNIZED The breakpoint that you wish to make sticky is not a
valid breakpoint.
SB COMMAND REQUIRES AN OPERAND You have not specified an operand for the SB
command, and it requires one.
ΓòÉΓòÉΓòÉ 1.10.24. "SC" Command Messages ΓòÉΓòÉΓòÉ
TAP ANY KEY TO RETURN TO ASDT This message informs you that you are viewing
your program's display screen. Tapping any key will return to the ASDT
screen.
ΓòÉΓòÉΓòÉ 1.10.25. "S1-S9" and "V1-V9" Command Messages ΓòÉΓòÉΓòÉ
Sx: xxxxxxxxxxxx The indicated breakpoint has been activated. The string shown
is the disassembled instruction at the breakpoint.
Sx: INVALID AS A BREAKPOINT ASDT can not set the breakpoint at the address
that you have specified. Check to see that the address uses a valid selector
and that the offset falls within the selector's segment limit (assuming that
this is a virtual address). Additionally, check to see that you are not
trying to reactivate a breakpoint whose thread or process has terminated.
ΓòÉΓòÉΓòÉ 1.10.26. "TP" Command Messages ΓòÉΓòÉΓòÉ
ENVIRONMENT WILL NOT PERMIT TP ASDT can not terminate the process if it is
currently running at level 0.
ΓòÉΓòÉΓòÉ 1.10.27. "T0-T4" Command Messages ΓòÉΓòÉΓòÉ
ADDRESS NOT ALIGNED FOR LENGTH The T1-T4 command address that you have
specified does not match its corresponding field length. Two-byte fields
must be aligned on word boundaries, and four-byte fields must be aligned on
doubleword boundaries.
HARDWARE REGISTER NOT ACTIVE You are attempting to use one of the T1-T4 (null)
commands for editing purposes, and Tn is not active.
INSUFFICIENT SPACE FOR Tn NULL You are attempting to use one of the T1-T4
(null) commands for editing purposes, and you have not left enough room on
the ASDT command line for Tn's parameter display.
T0 COMMAND REQUIRES AN OPERAND You are attempting to use the T0 command
without an operand. It requires either ON or OFF.
80386 HARDWARE IS NOT PRESENT You are attempting to use one of the T0-T4
commands, and you are not running on a 386-based machine.
ΓòÉΓòÉΓòÉ 1.10.28. "UM" Command Messages ΓòÉΓòÉΓòÉ
INTERRUPT CONTROLLER MASK = xx ASDT has read the contents of the interrupt
controller mask register.
INVALID SETTING - KEYBD MASKED You attempted to set the interrupt mask to a
value which masks off the keyboard. ASDT does not allow this.
ΓòÉΓòÉΓòÉ 1.10.29. "U1-U9" Command Messages ΓòÉΓòÉΓòÉ
PROBLEMS WITH ACCESS OF UX.DLL Either ASDT could not load the dynamic link
library, UX.DLL, or it could not find the member that you specified.
ΓòÉΓòÉΓòÉ <hidden> ΓòÉΓòÉΓòÉ
If you are not sure what directories are defined by your PATH statement, enter
PATH on an OS/2 command line and they will be listed.
If you would like to create a new directory for the program, ensure that you
modify the PATH statement in CONFIG.SYS accordingly.
ΓòÉΓòÉΓòÉ <hidden> ΓòÉΓòÉΓòÉ
If you are not sure what directories are defined by your LIBPATH statement,
check your CONFIG.SYS file for the line beginning "LIBPATH=". The directories
listed on this line are those that are checked by a running program when
looking for a DLL.
If you would like to create a new directory for the DLL, ensure that you modify
the LIBPATH statement accordingly.
ΓòÉΓòÉΓòÉ <hidden> ΓòÉΓòÉΓòÉ
ASM86 is an IBM Internal cross assembler (not provided with this program).
ΓòÉΓòÉΓòÉ <hidden> ΓòÉΓòÉΓòÉ
/K causes ASDT to get control whenever you press the hot key. The hot key
defaults to the PrtSc key. However, if you use the /K=nn form of this option,
ASDT will define the nn scancode as the hot key.
E.g., /K=4A will set the keypad minus as the hot key. Use the hot key to give
control to ASDT from your application, the OS/2 PM shell, etc.
See SK - Set Keyboard Hot Key for more information.
ΓòÉΓòÉΓòÉ <hidden> ΓòÉΓòÉΓòÉ
/M causes ASDT to use two screens for debugging if you have more than one
display adapter.
See CG - Configuration for more information.
ΓòÉΓòÉΓòÉ <hidden> ΓòÉΓòÉΓòÉ
/R=n causes ASDT to use a remote terminal for debugging if you have one hooked
up via COMn (n=1 or 2).
See CG - Configuration for more information.
ΓòÉΓòÉΓòÉ <hidden> ΓòÉΓòÉΓòÉ
/U=nn changes the user mask default from '00'x to 'nn'x for the 8259 interrupt
controller register.
See UM - User Mask for more information.
ΓòÉΓòÉΓòÉ <hidden> ΓòÉΓòÉΓòÉ
/W causes ASDT to make certain assumptions about offset assignments to specific
ASDT variables.
See WA - Window Assumption for more information.
ΓòÉΓòÉΓòÉ <hidden> ΓòÉΓòÉΓòÉ
/n causes ASDT not to take over a specific interrupt during its installation.
This allows your device driver to control that interrupt.
See RI - Restore Interrupt for more information.