home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / asdt32.zip / ASDT32.INF (.txt) next >
OS/2 Help File  |  1996-07-19  |  142KB  |  4,958 lines

  1.  
  2. ΓòÉΓòÉΓòÉ 1. Preface ΓòÉΓòÉΓòÉ
  3.  
  4. This manual describes the IBM Application/System Debug Tool, ASDT32, which aids 
  5. software debugging under IBM Operating System/2 2.1 and 3.0. Using ASDT32, you 
  6. can: 
  7.  
  8.      Debug OS/2 device drivers and applications that run in either the 
  9.       protected or virtual 8086 mode. This includes both 16- and 32-bit 
  10.       applications. 
  11.      Gain control from OS/2 via INT 1, INT 3, NMI, or a hot key. Additionally, 
  12.       gain control on certain error conditions (INT 0, INT 6, INT 8, INT '0C'x, 
  13.       and INT '0D'x). 
  14.      Step execution (single, multiple, or procedure). 
  15.      Stop program execution at up to 162 specified points. 
  16.      Display or alter processor registers. 
  17.      Display or alter processor memory (ASCII or EBCDIC translation). 
  18.      Display LDT, GDT, IDT, and page directory or page table entries. 
  19.      Assign register or variable contents to other registers or variables. 
  20.      Search memory to find a character string in hex, ASCII, or EBCDIC. 
  21.      Compare two areas of memory. 
  22.      Copy one area of memory to another. 
  23.      Fill an area of memory with a specific character. 
  24.      Disassemble blocks of instructions (AL86 or Intel (MASM) mnemonics). This 
  25.       includes 80387 support. 
  26.      Evaluate numeric expressions with scratch pad space for results. 
  27.      Maintain a separate screen for your program. 
  28.      Support PM mode for IBM adapters (VGA, 8514/A, XGA, and SVGA adapters 
  29.       manufactured by S3 Incorporated). 
  30.      Read in a profile during initialization phase for later execution. 
  31.      Print out the ASDT32 screen, formatted instructions, or formatted memory. 
  32.      Terminate the current process and return to OS/2. 
  33.      Identify the invocation path of the current thread or of a thread 
  34.       associated with a specific breakpoint. 
  35.      Halt and resume threads to view screen groups or to begin a new OS/2 
  36.       session. 
  37.      Restore/take specific interrupts to/from OS/2 to support device drivers 
  38.       that have a need to control these interrupts. 
  39.      Use a remote terminal to view both your application screen and the ASDT32 
  40.       screen at the same time. 
  41.      Use the hardware debug registers to trap instruction execution or 
  42.       specific memory reads or writes. 
  43.      Time critical intervals with high resolution (in the microsecond range). 
  44.      Use symbols to access Public addresses within your program. 
  45.      Page in application memory for patching code, setting breakpoints, or 
  46.       inspecting data. 
  47.  
  48.  ASDT32 uses a full screen format to display breakpoints, registers, memory, 
  49.  disassembled instructions, and other information. 
  50.  
  51.  
  52. ΓòÉΓòÉΓòÉ 1.1. Release Information ΓòÉΓòÉΓòÉ
  53.  
  54. Release 1.2 
  55.  
  56. This is the current release of ASDT32. 
  57.  
  58. Release 1.2 contains the following changes and new features: 
  59.  
  60.      All keyboards are now supported without any patching. 
  61.      The parameter line can now handle up to 300 characters. 
  62.      The PD and PM commands can now be used to send their formatted dumps over 
  63.       com1 or com2. 
  64.      PM mode is now supported on SVGA chip sets manufactured by S3 
  65.       Incorporated. 
  66.      There were several bug fixes. 
  67.  
  68.  Release 1.1 contained the following changes and new features: 
  69.  
  70.      ASDT32 allows you to set hardware debug registers in code pages that are 
  71.       not present. 
  72.      ASDT32 shows the operand address of a physical disassembly line as 
  73.       physical. 
  74.      ASDT32 now supports certain clone adapters that use ROM based at 
  75.       'C0000'x. 
  76.      The NP command has been added.  This command is used to page in one page 
  77.       of application-level (not system-level!) memory. See NP - Not Present for 
  78.       detailed usage of this feature. 
  79.      The ET command has been altered to allow for 55 millisecond rollover. See 
  80.       ET - Execute with Timing for detailed usage of this feature. 
  81.      ASDT32 uses a task gate to monitor double faults.  This allows for 
  82.       capturing double faults that involve exhausted stack space. 
  83.      Many bug fixes and workarounds were implemented for OS/2 3.0. 
  84.  
  85.  
  86. ΓòÉΓòÉΓòÉ 1.2. System Requirements ΓòÉΓòÉΓòÉ
  87.  
  88. ASDT32 runs on any personal system that can support OS/2 3.0.  Note that this 
  89. implies that the system contains an 80386 chip or any super set. ASDT32 uses 
  90. approximately 130K of memory. 
  91.  
  92.  
  93. ΓòÉΓòÉΓòÉ 1.3. General Information ΓòÉΓòÉΓòÉ
  94.  
  95. File ASDT32 AVAIL on the IBMPC conferencing facility announces ASDT32. File 
  96. ASDT FORUM contains information and comments regarding ASDT32. Please add your 
  97. comments and suggestions. 
  98.  
  99. The ASDT32 PACKAGE is available on the OS2TOOLS disk and includes the following 
  100. files: 
  101.  
  102.      ASDT32 ZIPBIN - ASDT32 executables and files related to the sample device 
  103.       driver. You will need PKUNZIP2 from OS2TOOLS to break out the following 
  104.       files: 
  105.         -  ASDT32.SYS     - the first of two SYS files for ASDT32. 
  106.         -  ASDT322.SYS    - the second of two SYS files for ASDT32. 
  107.         -  ASDT32SM.CMD    - REXX (OS/2) module extracts Public map symbols. 
  108.         -  SAMPLEDD.SYS    - a sample device driver for debug under ASDT32. 
  109.         -  SAMPLEDD.ASM    - source for SAMPLEDD SYSBIN. 
  110.         -  SAMPLEDD.SYM    - a symbol file for SAMPLEDD SYSBIN. 
  111.         -  SAMPLE.EXE     - a sample executable for debug under ASDT32. 
  112.         -  SAMPLE.C      - source for SAMPLE EXEBIN. 
  113.      ASDT32  AVAIL  -  summary of release information for ASDT32. 
  114.      ASDT32  PRO  -  a sample ASDT32 profile to be used with SAMPLEDD SYSBIN. 
  115.      ASDT32  SCRIPT  -  the BookMaster source for this document. 
  116.      ASDT32 TERS3820 - SCRIPTed, (TERSEd) ready-to-print form of this 
  117.       document. 
  118.      ASDT32  INFBIN  -  VIEWable file (under OS/2). 
  119.  
  120.  CASS appreciates the contributions of Chuck Bauman, Graeme Dougal, Al Heath, 
  121.  Dennis Rowe, Bob Shay, Dave Toll, and Bill Wacholtz to ASDT32. 
  122.  
  123.  
  124. ΓòÉΓòÉΓòÉ 2. Getting Started ΓòÉΓòÉΓòÉ
  125.  
  126.  
  127. ΓòÉΓòÉΓòÉ 2.1. Introduction ΓòÉΓòÉΓòÉ
  128.  
  129. Note:  If you install ASDT32 along with the kernel debugger, both debuggers may 
  130. behave unpredictably! 
  131.  
  132. ASDT32 runs under IBM OS/2 3.0 as a device driver. It supports both the 
  133. protected and the virtual 8086 (any of the VDM sessions) modes.  This user's 
  134. guide and reference manual deals mostly with the protected-mode aspects of 
  135. ASDT32.  However, it points out some key areas of differences of ASDT32 
  136. interpretation when the underlying application is a virtual 8086 object.  Where 
  137. the manual is not explicit about this, you should assume similar 
  138. interpretations for either mode. 
  139.  
  140. The device driver or application program that you wish to debug should contain 
  141. an INT 3 at a location where you want ASDT32 to gain control the first time. 
  142. This location is often the first instruction of your device driver or 
  143. application program. 
  144.  
  145. You can also make ASDT32 gain control through an NMI or a hot key.  The ASDT32 
  146. hot key defaults to the PrtSc key, which must be activated before ASDT32 will 
  147. recognize it as a request to obtain control.  You can activate the hot key 
  148. either by using the SK command (see SK - Set Keyboard Hot Key) or by using the 
  149. /K option discussed below. 
  150.  
  151.  
  152. ΓòÉΓòÉΓòÉ 2.2. Installing ASDT32 ΓòÉΓòÉΓòÉ
  153.  
  154. To install ASDT32, add the following commands to your CONFIG.SYS file: 
  155.  
  156.   DEVICE=ASDT32.SYS [profile] [symfile] [options]
  157.   DEVICE=ASDT322.SYS
  158.  
  159.   where:    profile    -  a file containing ASDT32 commands (file name
  160.                           must be fully qualified)
  161.             symfile    -  a file containing extracted Public data that
  162.                           has been created by ASDT32SM.CMD (file name
  163.                           must be fully qualified)
  164.             options    -
  165.             /K=nn      -  set up a hot key (nn is optional and
  166.                           represents the scan code that you want to
  167.                           serve as the hot key)
  168.             /R=n       -  have ASDT32 use a remote terminal (n is either
  169.                           1 or 2 for COMn)
  170.             /U=nn      -  specify the user mask for ASDT32 (nn represents
  171.                           the user mask)
  172.             /W         -  have ASDT32 use window assumptions
  173.             /n         -  (where n is one of 0, 1, 2, 3, 6, 8, C, or D)
  174.                           have ASDT32 not take over INT n
  175. This allows OS/2 3.0 to install ASDT32 as a device driver. After installation, 
  176. ASDT32 can gain control on various interrupts or a hot key. 
  177.  
  178. If you want to debug another device driver during its initialization phase, 
  179. make sure ASDT32 is installed prior to that device driver in your CONFIG.SYS 
  180. file. 
  181.  
  182.  
  183. ΓòÉΓòÉΓòÉ 2.2.1. ASDT32 Parameters ΓòÉΓòÉΓòÉ
  184.  
  185. You may specify an ASDT32 profile file name for ASDT32 to read in. Once ASDT32 
  186. is in control, you can execute your profile with the EP command. See EP - 
  187. Execute Profile for more information. 
  188.  
  189. You may specify an ASDT32 symbol file name for ASDT32 to read in. Once ASDT32 
  190. is in control, you can use the '@' trigger to access the symbols in this file. 
  191. The QS and WI commands are used in association with symbols.  See QS - Qualify 
  192. Segment Number and WI - What is Address for more information. 
  193.  
  194. /K causes ASDT32 to get control whenever you press the hot key. The hot key 
  195. defaults to the PrtSc key.  However, if you use the /K=nn form of this option, 
  196. ASDT32 will define the nn scan code as the hot key.  E.g., /K=4A will set the 
  197. keypad minus as the hot key. Use the hot key to give control to ASDT32 from 
  198. your application, the OS/2 PM shell, etc. See SK - Set Keyboard Hot Key for 
  199. more information. 
  200.  
  201. /R=n causes ASDT32 to use a remote terminal for debugging if you have one 
  202. hooked up via COMn (n=1 or 2). See CG - Configuration for more information. 
  203.  
  204. /U=nn changes the user mask default from '00'x to 'nn'x for the 8259 interrupt 
  205. controller register. See UM - User Mask for more information. 
  206.  
  207. /W causes ASDT32 to make certain assumptions about offset assignments to 
  208. specific ASDT32 variables. See WA - Window Assumptions for more information. 
  209.  
  210. /n causes ASDT32 not to take over a specific interrupt during its installation. 
  211. This allows your device driver to control that interrupt or to prevent 
  212. contention between ASDT32 and any other debugger that you may want to use 
  213. concurrently. 
  214.  
  215. Note:  Many 16-bit applications make OS/2 system calls with an odd number of 
  216. bytes of parameters.  Since OS/2 3.0 uses 80386 call gates for these system 
  217. calls, stack faults can frequently occur.  OS/2 3.0 makes allowances for this, 
  218. and absorbs the stack fault such that it is not noticed by the user.  ASDT32 on 
  219. the other hand will stop the application and display the stack fault if it owns 
  220. the stack fault interrupt. 
  221.  
  222. To prevent this, you should use the /C startup parameter.  Later, while in 
  223. ASDT32, you can issue the TI command to have ASDT32 regain control of the stack 
  224. fault interrupt if you want it to monitor stack faults. See RI - Restore 
  225. Interrupt for more information. 
  226.  
  227.  
  228. ΓòÉΓòÉΓòÉ 2.3. How to Begin Debugging with ASDT32 ΓòÉΓòÉΓòÉ
  229.  
  230. To begin debugging, you need to know how to do several key things. The 
  231. following list describes these debugging steps and assumes the default ASDT32 
  232. function keys are set. 
  233.  
  234.  Debug Task          ASDT32 Command to Use 
  235.  
  236.  Start ASDT32        To cause ASDT32 to take control from OS/2, run the program 
  237.                      you wish to debug making sure it contains an INT 3 
  238.                      instruction ('CC'x). 
  239.  
  240.                      Note:  ASDT32 can gain control through several interrupts. 
  241.                      However, an INT 3 instruction that has been inserted into 
  242.                      your program is the most common interrupt taken. 
  243.  
  244.  Single Step         ST (key F8) 
  245.  
  246.                      Executes one instruction in your program. 
  247.  
  248.  Set Breakpoints     Sn 
  249.  
  250.                      Sets one of the breakpoints to an address in your program. 
  251.  
  252.                      Examples:  "S1 = CS:EIP+23" sets a breakpoint 23 bytes 
  253.                      from the instruction about to be executed. 
  254.  
  255.  Execute             EX (key F7) 
  256.  
  257.                      Executes your program until it terminates, until it 
  258.                      reaches a breakpoint, or until it reaches an 
  259.                      ASDT32-captured interrupt. 
  260.  
  261.  Set Registers       Set any register by entering its name followed by an 
  262.                      expression containing its new value. 
  263.  
  264.                      Examples:  "AX=BX+CX" sets register AX. "ES=DS" sets 
  265.                      register ES. "EAX=EBX+CX" sets register EAX. 
  266.  
  267.  Disassembly/Memory  L1-L9, M1-M6 
  268.  
  269.                      Creates a disassembly or memory window (whichever is the 
  270.                      primary window) on one of the window area lines. 
  271.  
  272.  Windowing           NW (key F4) 
  273.  
  274.                      Toggles among disassembly, memory, LDT/GDT, IDT, and page 
  275.                      windows. 
  276.  
  277.  Get Help            HP (key F1) 
  278.  
  279.                      Displays a single help screen that serves as a quick 
  280.                      reference sheet for the ASDT32 commands. 
  281.  
  282.  Return to OS/2      TP (key F3) 
  283.  
  284.                      In protected mode, TP is valid only for processes that are 
  285.                      not running at level 0. For those processes that are 
  286.                      running at level 0, you need to execute (EX) to completion 
  287.                      to return to OS/2.   If ASDT32 has intercepted code 
  288.                      running in virtual 8086 mode, you should use the TP 
  289.                      command only to terminate an application (not a device 
  290.                      driver, a resident interrupt handler, etc.). 
  291.  
  292.  See Entering ASDT32 Commands for a discussion of ASDT32 command line handling. 
  293.  See Window Area for a discussion of ASDT32 window editing. 
  294.  
  295.  
  296. ΓòÉΓòÉΓòÉ 2.4. Function Keys ΓòÉΓòÉΓòÉ
  297.  
  298. ASDT32 sets function keys F1-F10 for you. You can change them to other valid 
  299. ASDT32 commands, and you can also set the shifted, controlled, and alternate 
  300. function keys. The default keys are: 
  301.  
  302.  F1    Help (HP) 
  303.  F2    Define Keys (DK) 
  304.  F3    Terminate Process (TP) 
  305.  F4    Next Window (NW) 
  306.  F5    Repeat Find (FX) 
  307.  F6    Application Screen (SC) 
  308.  F7    Execute User Program (EX) 
  309.  F8    Single Step User Program (ST) 
  310.  F9    Procedure Step User Program using S9 (S9=EX+IL;EX;S9) 
  311.  F10   Retrieve Command (RC) 
  312.  
  313.  
  314. ΓòÉΓòÉΓòÉ 3. Using the ASDT32 Display ΓòÉΓòÉΓòÉ
  315.  
  316. The ASDT32 display has the following areas: 
  317.  
  318.  Line 1          The first three breakpoint variables (S1-S3), the process id, 
  319.                  the EAX register, and the first stack location (word or double 
  320.                  word depending on whether SS points to a 16- or 32-bit data 
  321.                  area). 
  322.  Line 2          The second three breakpoint variables (S4-S6), the thread id, 
  323.                  the EBX register, and the second stack location. 
  324.  Line 3          The last three breakpoint variables (S7-S9), the task 
  325.                  register, the ECX register, and the third stack location. 
  326.  Line 4          The code origin, the location counter, the LDT register, the 
  327.                  EDX register, and the fourth stack location. 
  328.  Line 5          the EBP register, the step count, the FS and GS registers, the 
  329.                  ASDT32 screen number (D1-D9), and the eflags register. 
  330.  Line 6          The SS, CS, DS, and ES registers and the eflags register 
  331.                  expanded as individual bits. 
  332.  Line 7          The ESP, EIP, ESI, and EDI registers. 
  333.  Line 8          The name of the window (for lines 11-25), the address of the 
  334.                  next instruction (linear value) and its disassembly, and the 
  335.                  operand address and contents. 
  336.  Line 9          The command line. 
  337.  Line 10         The message line. 
  338.  Lines 11-25     The window area containing line numbers and a view of 
  339.                  disassembly, memory, LDT/GDT or IDT descriptor entries, or 
  340.                  page directory or page table entries. 
  341.  
  342.  A disassembly line is divided into three editable sections:  the selector and 
  343.  offset parts of the address (or the linear or physical address), the 
  344.  hexadecimal instruction (note that the text of the instruction is shown as the 
  345.  default.  If you want to see the instruction as hex, enter the disassembly 
  346.  window and toggle the line(s) for a given segment from text by using the 
  347.  insert key. See Window Contents for more details), and the instruction's 
  348.  operand value. In addition, ASDT32 displays the instruction mnemonic and the 
  349.  operand address. 
  350.  
  351.  A memory line is divided into three editable sections:  the selector and 
  352.  offset parts of the address (or the linear or physical address), the 
  353.  hexadecimal memory, and the equivalent ASCII/EBCDIC characters. 
  354.  
  355.  An LDT, GDT, or IDT line is divided into these sections:  an index into the 
  356.  descriptor table, the type of descriptor, and other information based on the 
  357.  type of descriptor. LDT, GDT, and IDT lines are not editable. 
  358.  
  359.  A page directory or page table entry line is divided into these sections:  a 
  360.  linear address that is used to determine which directory or table entry to 
  361.  display, the physical frame for the entry, and additional entry (such as the 
  362.  dirty bit status) information. A page directory or page table entry line is 
  363.  not editable. 
  364.  
  365.  You can move the cursor anywhere on the command line and can move it off the 
  366.  command line to the disassembly or memory window area. You use the command 
  367.  line to enter ASDT32 commands and the window area to view or edit 
  368.  instructions, memory, and descriptors. Subsequent sections discuss how to 
  369.  enter ASDT32 commands, how to move the cursor within the disassembly or memory 
  370.  window, and how to alter instructions or memory. 
  371.  
  372.  
  373. ΓòÉΓòÉΓòÉ 3.1. Memory Format ΓòÉΓòÉΓòÉ
  374.  
  375. On lines above the command line, ASDT32 displays memory in register format; 
  376. i.e., it is not byte-reversed. ASDT32 also uses this format for the operand 
  377. values at the right edge of disassembly lines below the command line. On memory 
  378. lines below the command line, memory is displayed in Intel byte-reversed 
  379. format. 
  380.  
  381.  
  382. ΓòÉΓòÉΓòÉ 4. Sample ASDT32 Session ΓòÉΓòÉΓòÉ
  383.  
  384. This section shows a sample debug session that uses several groups of ASDT32 
  385. commands. An OS/2 device driver, SAMPLEDD.SYS, and an OS/2 program, SAMPLE.EXE, 
  386. are used for this purpose.  The source and binaries for SAMPLEDD.SYS and 
  387. SAMPLE.EXE are available in the ASDT32 PACKAGE. 
  388.  
  389. This sample debugging session is designed to demonstrate some of the features 
  390. of ASDT32 and assumes the default ASDT32 function keys are set. See Hints for 
  391. Using ASDT32 for additional information. 
  392.  
  393. A lot of software debugging involves executing or stepping through the program 
  394. in question and looking at registers or output for correctness. Often, 
  395. incorrect memory or registers are changed while debugging and are later 
  396. corrected in the source code as a result of the debugging session. This session 
  397. will show some of these typical debugging actions and some of the features and 
  398. functions of ASDT32. 
  399.  
  400. In preparation for the debug session, create a subdirectory on your C: drive 
  401. and ensure that ASDT32.PRO, SAMPLEDD.SYS, SAMPLEDD.SYM, and SAMPLE.EXE are 
  402. placed there. We'll assume that you called your subdirectory ASDT32. 
  403.  
  404. Ensure that the following lines are in your CONFIG.SYS file: 
  405.  
  406.   DEVICE=ASDT32.SYS C:\ASDT32\ASDT32.PRO C:\ASDT32\SAMPLEDD.SYM
  407.   DEVICE=ASDT322.SYS
  408.   DEVICE=C:\ASDT32\SAMPLEDD.SYS
  409.  
  410. It is important that ASDT32 be described in your CONFIG.SYS before 
  411. SAMPLEDD.SYS.  Note that you must reboot OS/2 3.0 after you have modified your 
  412. CONFIG.SYS for the above changes to take effect. 
  413.  
  414. When OS/2 3.0 boots, ASDT32 will gain control when SAMPLEDD.SYS is being 
  415. initialized.  This is because a breakpoint (INT 3) was hard coded at the 
  416. beginning of the device driver's strategy routine.  At this point, the ASDT32 
  417. display is shown, and the sample session begins. 
  418.  
  419.    1. Type DK and press the enter key. 
  420.  
  421.       This displays the current settings of all 40 ASDT32 function keys. ASDT32 
  422.       displays 20 keys on each of two screens. 
  423.  
  424.       Press any key to view the second of the two DK screens. 
  425.  
  426.       Press any key to view the ASDT32 display screen. 
  427.  
  428.    2. Type EP and press the enter key. 
  429.  
  430.       This command causes ASDT32 to execute the profile that you specified in 
  431.       CONFIG.SYS; that is, ASDT32.PRO. 
  432.  
  433.       There are 3 commands in ASDT32.PRO.  Two qualify the device driver's code 
  434.       and data segment for symbol resolution, and the other command tells 
  435.       ASDT32 to use Intel (MASM) mnemonics in its disassembly. 
  436.  
  437.  If you prefer AL86 mnemonics, type DA and press the enter key to switch back. 
  438.  AL86 mnemonics are the default shown upon entry to ASDT32. 
  439.  
  440.    3. Press the down arrow key to move into the disassembly window. Next press 
  441.       the insert key such that the text of the instructions in the disassembly 
  442.       window is toggled to hex.  Now press the tab key twice until the cursor 
  443.       reaches the 'CC'x field. Type '90'x over this field. 
  444.  
  445.       Now press the insert key again.  Notice that you changed the INT 3 
  446.       instruction to a NOP! This means that ASDT32 will not gain control at the 
  447.       beginning of the Strategy routine when next you enter ASDT32. 
  448.  
  449.    4. Press F4. 
  450.  
  451.       This changes the primary window to memory. The window mode is shown on 
  452.       the eighth line of the ASDT32 screen. The memory window shows a maximum 
  453.       of 15*16 bytes of data. 
  454.  
  455.    5. Press F4. 
  456.  
  457.       This changes the primary window to LDT/GDT. The LDT/GDT window allows you 
  458.       to view descriptors in the LDT and in the GDT. 
  459.  
  460.    6. Type L1 CS; L2 DS; L3 SS and press the enter key. 
  461.  
  462.       This allows you to look at your code, data, and stack descriptors. Note 
  463.       that your stack descriptor is in the LDT! 
  464.  
  465.    7. Press F4. 
  466.  
  467.       This changes the primary window to IDT. The IDT window allows you to view 
  468.       descriptors in the IDT.  Note that some of the descriptors "belong" to 
  469.       OS/2 and others to ASDT32. 
  470.  
  471.    8. Press F4. 
  472.  
  473.       This changes the primary window to PTE. The PTE window allows you to view 
  474.       page table entries. 
  475.  
  476.    9. Type L1 CS:EIP~ and press the enter key. 
  477.  
  478.       This allows you to look at the page table entry that describes 
  479.       SAMPLEDD.SYS. 
  480.  
  481.   10. Type PW D and press the enter key. 
  482.  
  483.       This allows you to look at the page directory entry that describes 
  484.       SAMPLEDD.SYS. 
  485.  
  486.   11. Press F4. 
  487.  
  488.       This changes the primary window back to disassembly. 
  489.  
  490.   12. Type MW M1 and press the enter key. 
  491.  
  492.       This allows you to have a secondary window for memory display in the 
  493.       disassembly window. 
  494.  
  495.   13. Type M1 @rp and press the enter key. 
  496.  
  497.       Your secondary memory window now addresses the storage area where 
  498.       SAMPLEDD.SYS saves the pointer to the request packet that is given to the 
  499.       device driver by OS/2. 
  500.  
  501.  You can step instructions with ASDT32, which uses the count field to determine 
  502.  how many instructions to step per iteration. You can alter the count field at 
  503.  any time. See CT - Step Count for further information. 
  504.  
  505.   14. Press F8 three times. 
  506.  
  507.       This steps the device driver instructions for three instructions.  Note 
  508.       that SAMPLEDD.SYS's rp memory area now holds the request packet pointer. 
  509.       Further note that the Ct (count) field is displayed with reverse-video 
  510.       attributes to indicate that you have returned from the step operation. 
  511.  
  512.   15. Type M1 M1%4 and press the enter key. 
  513.  
  514.       Now the secondary memory window addresses your request packet! The "%" 
  515.       operator allows you to use indirect addressing in your ASDT32 command 
  516.       line expressions.  See Indirect Addressing for further information. 
  517.  
  518.  The S breakpoints, named S1 through S9, are the primary breakpoints. When set, 
  519.  they are turned on (activated) and will stop program execution if encountered. 
  520.  The V breakpoints, named V1 through V9, are secondary breakpoints. They double 
  521.  as scratch pad variables since they are not activated when set but remain off 
  522.  until specifically turned on. 
  523.  
  524.       See Setting Breakpoints and Display Screens and Breakpoints for further 
  525.       information. 
  526.  
  527.   16. Type S1 @Init and press the enter key. 
  528.  
  529.       You have set a breakpoint at the start of the initialization routine for 
  530.       SAMPLEDD.SYS.  Note that S1 is highlighted with the breakpoint 
  531.       information (in this case, the symbol name Init) and that the ASDT32 
  532.       message line has the disassembly for the instruction at that location (in 
  533.       this case, a load of the AX register). 
  534.  
  535.   17. Press F7. 
  536.  
  537.       You have asked ASDT32 to return execution of SAMPLEDD.SYS to OS/2. Note 
  538.       that you regain control at the Init location.  Also note that S1 is 
  539.       displayed with reverse-video attributes to indicate that this breakpoint 
  540.       was hit. 
  541.  
  542.   18. Press F4 and then type L5 @InitMsg and press the enter key. 
  543.  
  544.   19. Next press the down arrow key until the cursor reaches the L5 line. 
  545.       Press the tab key until the cursor reaches the character display for the 
  546.       L5 line. Press the right arrow key twice. The cursor should be on the 
  547.       character "S" of the word "SAMPLEDD" in the character display. 
  548.  
  549.   20. Now type the characters "GARBAGE " over the "SAMPLEDD" characters. 
  550.  
  551.       You have now modified SAMPLEDD.SYS's data storage. 
  552.  
  553.   21. Now press the home key. 
  554.  
  555.       This returns the cursor to the ASDT32 command line. 
  556.  
  557.   22. Type DW and press the enter key. 
  558.  
  559.       This restores the disassembly window. 
  560.  
  561.   23. Type M1 and press the enter key. 
  562.  
  563.       This removes the secondary memory window. 
  564.  
  565.   24. Type S2 M3 and press the enter key. 
  566.  
  567.       You have set a breakpoint at the first instruction after the 
  568.       initialization routine has called the DosWrite API. 
  569.  
  570.   25. Press F7 to execute SAMPLEDD.SYS until the next breakpoint occurs. 
  571.  
  572.   26. Press F6 when ASDT32 regains control. 
  573.  
  574.       ASDT32 shows you your display screen.  Note your "GARBAGE " handiwork! 
  575.  
  576.       Press any key to restore the ASDT32 display screen. 
  577.  
  578.   27. Type S3 @Control and press the enter key. 
  579.  
  580.       You have set a breakpoint at the point where SAMPLEDD.SYS handles IOCTL 
  581.       requests. 
  582.  
  583.   28. Press F7 to execute SAMPLEDD.SYS so that it can finish its 
  584.       initialization. 
  585.  
  586.  In whatever manner you choose, invoke SAMPLE.EXE. 
  587.  
  588.  SAMPLE.EXE makes a DosDevIOCtl call to SAMPLEDD.SYS.  This causes ASDT32 to 
  589.  get control at the Control location within SAMPLEDD.SYS. 
  590.  
  591.   29. Once the ASDT32 screen is again displayed, press F1. 
  592.  
  593.       This replaces the ASDT32 display with a help screen containing a logical 
  594.       list of ASDT32 commands in case you forget an ASDT32 command name. 
  595.  
  596.       Press any key to restore the ASDT32 display screen. 
  597.  
  598.   30. Now type PI and press the enter key. 
  599.  
  600.       This is the program identification command, and it causes ASDT32 to 
  601.       display the invocation path for the current thread.  The path is 
  602.       displayed on ASDT32's message line, and you can see this is useful in 
  603.       determining what program issued the IOCTL request. 
  604.  
  605.   31. Press F7 to execute SAMPLEDD.SYS so that ASDT32 can gain control at the 
  606.       Control location again. 
  607.  
  608.   32. Type S4 M2 and press the enter key after ASDT32 regains control. 
  609.  
  610.   33. Press F7 to execute SAMPLEDD.SYS up to the DevHlp call instruction. 
  611.  
  612.  In general, you may wish to run an entire subroutine, interrupt, or repeated 
  613.  instruction and stop as soon as it completes its task. ASDT32 allows you to do 
  614.  this with an easy sequence of commands, which ASDT32 has already defined to be 
  615.  function key F9. 
  616.  
  617.       Since the next instruction is a call, you can try this now. 
  618.  
  619.   34. Press F9. 
  620.  
  621.       This causes the commands associated with key F9 to be executed 
  622.       immediately. This is equivalent to entering S9=EX+IL;EX;S9. 
  623.  
  624.       These commands set a breakpoint at the instruction following the CALL 
  625.       instruction, execute the call, and remove the breakpoint. This technique 
  626.       is a convenient way to do procedure stepping since it can be used for 
  627.       INT, CALL, and REP instructions. 
  628.  
  629.   35. Now press F7 to allow SAMPLEDD.SYS to finish processing the IOCTL 
  630.       request.  Note that SAMPLE.EXE causes ASDT32 to regain control via an 
  631.       assembler routine that issues an INT 3. 
  632.  
  633.   36. Press F8 twice to complete the assembler routine and to have ASDT32 
  634.       display the next instruction in SAMPLE.EXE. 
  635.  
  636.  At any time, you can retrieve the last ten ASDT32 command lines you entered 
  637.  since they are saved by ASDT32. Commands entered with function keys or from a 
  638.  file are not saved. 
  639.  
  640.   37. Enter RC or press F10. 
  641.  
  642.       ASDT32 displays the last command you entered on the command line. You may 
  643.       continue to retrieve commands by pressing F10 and may reenter any of 
  644.       these commands by pressing the enter key. 
  645.  
  646.   38. Enter TP or press F3. 
  647.  
  648.       ASDT32 terminates SAMPLE.EXE and returns to OS/2. 
  649.  
  650.  You have now finished this sample debugging session. This sample session has 
  651.  shown you most of the predefined function keys as well as some other ASDT32 
  652.  commands. Although you have seen only a subset of the available ASDT32 
  653.  commands, you can now experiment with all of the ASDT32 commands, which are 
  654.  described in ASDT32 Command Reference. 
  655.  
  656.  
  657. ΓòÉΓòÉΓòÉ 5. Entering ASDT32 Commands ΓòÉΓòÉΓòÉ
  658.  
  659.  
  660. ΓòÉΓòÉΓòÉ 5.1. Command Line Input ΓòÉΓòÉΓòÉ
  661.  
  662. You use the command line for entering all of the ASDT32 commands. When you 
  663. press the ENTER key, ASDT32 processes the command line. Command processing 
  664. begins with the first command on the command line and continues with the 
  665. remaining commands. You separate commands with semicolons. Command line 
  666. processing also stops when ASDT32 encounters an invalid command. 
  667.  
  668. When command line processing finishes, the cursor moves to the beginning of the 
  669. command line. The command line is cleared unless the first character of the 
  670. command line is a slash (/) or unless an error was encountered. The sole 
  671. function of the slash at the beginning of the command line is to preserve the 
  672. command line so you can see and use it again. 
  673.  
  674. You can place as many commands on the command line as will physically fit. You 
  675. can place one or more blanks before or after each command. There is no 
  676. restriction on the sequence or combinations of commands. 
  677.  
  678.  
  679. ΓòÉΓòÉΓòÉ 5.2. Profile Input ΓòÉΓòÉΓòÉ
  680.  
  681. An alternative to typing ASDT32 commands on the command line is reading them in 
  682. from a profile on disk. This profile, which you can create with any standard 
  683. editor, is read in at ASDT32 installation time.  Its commands are executed with 
  684. the Execute Profile (EP) command (see EP - Execute Profile). 
  685.  
  686. All commands in the profile must follow standard ASDT32 command rules; that is, 
  687. they are processed as if they had been entered on the command line.  They must 
  688. fit on the command line, which is 76 characters in length. A slash at the 
  689. beginning of a line in a file is ignored. 
  690.  
  691. The following discussion of command handling applies to the command line and to 
  692. profiles. 
  693.  
  694.  
  695. ΓòÉΓòÉΓòÉ 5.3. Command Parsing ΓòÉΓòÉΓòÉ
  696.  
  697. The command line format is as follows: 
  698.  
  699. [/] cmd = opnd [ ; cmd = opnd ; cmd = opnd ; . . . ] 
  700.  
  701. If the optional slash at the beginning is present, ASDT32 will not erase the 
  702. command line when it finishes processing the commands. If you wish to enter 
  703. more than one command on the command line at a time, separate the commands with 
  704. semicolons. 
  705.  
  706. Commands are usually 2 characters in length.  However, to facilitate the 80386 
  707. registers, a few commands (such as EAX) are 3 characters in length. You can 
  708. follow the last command with a semicolon. This trailing semicolon does not 
  709. affect command line processing. However, it allows you to use the Tab key to 
  710. position the cursor after the last command if you wish to add another command. 
  711.  
  712. The blanks as well as the "=" sign between the "cmd" and the "opnd" are 
  713. optional. This condensed syntax is not elegant, but you can save unnecessary 
  714. keystrokes by using it: 
  715.  
  716. cmdopnd;cmdopnd;cmdopnd; . . . 
  717.  
  718.  
  719. ΓòÉΓòÉΓòÉ 5.4. Specifying Operands ΓòÉΓòÉΓòÉ
  720.  
  721. An operand begins with the first non-blank (other than =) following the command 
  722. and continues to a semicolon or continuous blank characters. If there are only 
  723. blanks following the command, the operand is null. 
  724.  
  725.  
  726. ΓòÉΓòÉΓòÉ 5.4.1. Expression Evaluation ΓòÉΓòÉΓòÉ
  727.  
  728. Most operands are expressions. An expression is one or more terms which are 
  729. added together (default) or operated upon with the ASDT32 expression operators. 
  730. A term may be a decimal or hexadecimal number, one of the processor registers, 
  731. or one of the ASDT32 variables. 
  732.  
  733. The ASDT32 variables include the breakpoints V1-V9 and S1-S9 (V1-V9 are no 
  734. longer displayed at the top of the ASDT32 screen. See CB - Complex Breakpoint 
  735. for details on how to view your V1-V9 variables), the memory address variables 
  736. L1-L9 and M1-M6, and the other variables M7-M9 (that are not displayed). These 
  737. other variables can be used as scratch pad space for expression or address 
  738. calculations. See Valid Terms for a complete list of ASDT32 variables. 
  739.  
  740. The "+" and "-" signs may precede terms. The optional "+" sign performs no 
  741. additional function but can improve operand readability. The "-" sign negates 
  742. the term before the addition is performed. You can precede a term with multiple 
  743. signs, and you can use blanks freely between terms and their signs. 
  744.  
  745. Terms which are processor registers or ASDT32 variables are usually 2 
  746. characters in length.  However, some ASDT32 variables (such as ESI) are 3 
  747. characters in length. Decimal and hexadecimal terms have variable length. A 
  748. blank, sign, special operator, or another term must follow a numeric term to 
  749. delimit that numeric term;  there is no such requirement for register or 
  750. variable terms. 
  751.  
  752. Decimal terms are distinguished from hexadecimal terms by a trailing decimal 
  753. point. Physical addresses are distinguished from linear addresses by a trailing 
  754. "!." Indirect terms are distinguished from other terms by a trailing "%" 
  755. character and optional length. 
  756.  
  757. Indirect terms allow you to use the contents of a memory location indirectly. 
  758. When you specify an indirect address, ASDT32 uses the location contents for the 
  759. number of bytes you specify. 
  760.  
  761. All calculation results are displayed in hexadecimal format. Decimals, 
  762. hexadecimals, registers, and variables are all converted to hexadecimal format 
  763. for calculation. 
  764.  
  765. Symbols are distinguished from other ASDT32 variables and terms by having "@" 
  766. precede them.  A symbol will be resolved (if found) to a selector:offset 
  767. address. 
  768.  
  769.  
  770. ΓòÉΓòÉΓòÉ 5.4.2. Expression Examples ΓòÉΓòÉΓòÉ
  771.  
  772. The following examples portray several different ASDT32 commands with various 
  773. operand expressions and terms. 
  774.  
  775.       CO = CS:04E8                assign CS and offset 04E8 to CO
  776.       CO = CS:3BF12A07            assign CS and offset 3BF12A07 to CO
  777.       V1 = 10. + 20. + 44.        decimal arithmetic
  778.       M7 = EAX + 4A23 - 10.       combined arithmetic
  779.       S1 = CO:13                  set breakpoint at CO + 13
  780.       AX = ES:BX%6%2              set AX to contents of memory pointed to by a
  781.                                   6-byte pointer, which is pointed to by ES:BX
  782.  
  783.  
  784. ΓòÉΓòÉΓòÉ 5.4.3. Expression Syntax ΓòÉΓòÉΓòÉ
  785.  
  786. In the following equivalent examples, the ASDT32 variable V1, the negative 
  787. value of processor register BX, hexadecimal 4A, and the processor register AX 
  788. are added together with the result being placed into the AX processor register. 
  789.  
  790.       AX = V1 - BX + 4A + AX      optimum readability
  791.       AX=V1-BX+4A+AX              optional blanks removed
  792.       AX V1-BX 4A AX              optional "=" and "+" removed
  793.       AXV1-BX4A AX                fewest keystrokes
  794.  
  795.  
  796. ΓòÉΓòÉΓòÉ 5.4.4. Valid Terms ΓòÉΓòÉΓòÉ
  797.  
  798. The following list shows all of the valid processor register and ASDT32 
  799. variable terms which you can use in an expression. Hexadecimal, decimal, and 
  800. indirect terms are also valid.  AH AL AX BH BL BP BX CH CL CO CR0 CR2 CR3 CS CT 
  801. CX DH DI DL DS DX EAX EBP EBX EC ECX EDI EDX EFL EIP ES ESI ESP EX FL FS FX GD 
  802. GS ID IL IP LC LD L1-L9 M1-M9 OP SI SP SS S1-S9 TS V1-V9 XS 
  803.  
  804. It is useful to remember that all registers and variables displayed on the 
  805. screen (except the binary flag bits, the process id, and the thread id) are 
  806. valid terms for an expression. All registers and variables displayed on the 
  807. screen including the binary flag bits are valid ASDT32 commands. 
  808.  
  809. Most commands are also the name of a variable (e.g., AX, DS, or L1). When one 
  810. of these commands is used, there is an assignment to the variable. For example, 
  811. the command AX=BX+123 assigns the value BX+123 to AX. It is important to 
  812. remember that AX is the command because in some cases the assignment causes 
  813. other results. For example, S1=DS:BX+123 causes ASDT32 to assign the value 
  814. DS:BX+123 to S1 and activates the breakpoint S1. 
  815.  
  816. Some ASDT32 variables are not commands.  They are the CR0, CR2, CR3, EC, GD, 
  817. ID, IL, and OP variables. The CR0, CR2, and CR3 variables allow you to examine 
  818. the contents of the respective 80386 control registers. The EC variable is the 
  819. error code that is returned by OS/2 when a general protection fault occurs. 
  820. ASDT32 initializes EC to 0, and EC changes value with each INT '0D'x. The GD 
  821. and ID variables allow you to use the base address of the GDT and the IDT in 
  822. linear address expressions. The IL variable holds the current instruction's 
  823. length in bytes while the OP variable has the address of the byte/word/dword 
  824. referenced by the current instruction (if any). The OP address may be 
  825. substituted with a symbol name if ASDT32 finds a symbol that was read in which 
  826. corresponds. 
  827.  
  828.  
  829. ΓòÉΓòÉΓòÉ 5.4.5. Address Evaluation ΓòÉΓòÉΓòÉ
  830.  
  831. ASDT32 expects addresses to be in one of three forms: selector:offset, linear 
  832. address, or physical address. If the address expression contains a colon (:), a 
  833. selector register (CS, DS, ES, FS, GS, SS, or XS), or an ASDT32 variable that 
  834. is in selector:offset form, then ASDT32 assumes the address is in 
  835. selector:offset form. The resulting expression is valid for reading/writing 
  836. memory only if the selector references a valid descriptor, the offset falls 
  837. within the segment limit for that descriptor, and the generated linear address 
  838. has a present page mapping. 
  839.  
  840. If the address expression is not in selector:offset form, then ASDT32 assumes 
  841. that it is a linear address.  In this case, the expression is valid for 
  842. reading/writing memory only if OS/2 3.0 has set up a page mapping the linear 
  843. address and that page is present. If the address expression is delimited with 
  844. "!," ASDT32 will interpret it as a physical address.  These expressions are 
  845. always valid for reading/writing memory. 
  846.  
  847. Note:  In virtual 8086 mode, the address evaluation expected is either a 
  848. segment:offset, a linear address, or a physical address.  In the case of 
  849. segment:offset addresses, all segments are considered valid for reading/writing 
  850. memory although the page mapping restrictions that are in effect for 
  851. protected-mode addresses apply. 
  852.  
  853. When ASDT32 has stopped a process that is in virtual 8086 mode, you can still 
  854. have it interpret segment:offset as a protected-mode selector:offset by 
  855. delimiting the expression with "#." In this case, you need to ensure that the 
  856. selector references a valid descriptor. Reciprocally, when ASDT32 has stopped a 
  857. protected-mode process, you can have it interpret segment:offset as a "DOS" 
  858. calculation by delimiting the expression with "&" 
  859.  
  860. When you use the "#" and "&" symbols in this manner, realize that the resulting 
  861. linear address reflects the currently defined (page-mapped) space. 
  862.  
  863.  
  864. ΓòÉΓòÉΓòÉ 5.5. Moving on the Command Line ΓòÉΓòÉΓòÉ
  865.  
  866. ASDT32 recognizes the following function keys on the command line: 
  867.  
  868.  Enter           Moves the cursor to the beginning of the command line and 
  869.                  executes the commands on the command line. 
  870.  
  871.  Home            Moves the cursor to the beginning of the command line. 
  872.  
  873.  End             Moves the cursor to the end of text on the command line. 
  874.  
  875.  Up Arrow        Moves the cursor to the first line of the edit area (valid 
  876.                  only in a disassembly or memory window). 
  877.  
  878.  Down Arrow      Moves the cursor to the first line of the edit area (valid 
  879.                  only in a disassembly or memory window). 
  880.  
  881.  Left Arrow      Moves the cursor left one position unless the cursor is at the 
  882.                  beginning of the command line. 
  883.  
  884.  Right Arrow     Moves the cursor right one position unless the cursor is at 
  885.                  the end of the command line. 
  886.  
  887.  PgUp            Scrolls the first window segment up the number of lines in 
  888.                  that segment (valid only in an LDT/GDT, IDT, or page window). 
  889.  
  890.  PgDn            Scrolls the first window segment down the number of lines in 
  891.                  that segment (valid only in an LDT/GDT, IDT, or page window). 
  892.  
  893.  Ctrl-PgUp       Scrolls the first window segment up one line in that segment 
  894.                  (valid only in an LDT/GDT, IDT, or page window). 
  895.  
  896.  Ctrl-PgDn       Scrolls the first window segment down one line in that segment 
  897.                  (valid only in an LDT/GDT, IDT, or page window). 
  898.  
  899.  Tab             Moves the cursor to the next command on the command line and 
  900.                  wraps around from the last command to the first command. 
  901.  
  902.  Back Tab        Moves the cursor to the previous command on the command line 
  903.                  and wraps around from the first command to the last command. 
  904.  
  905.  Spacebar        Replaces the character at the cursor position with a blank and 
  906.                  moves the cursor right one position. 
  907.  
  908.  Backspace       Moves the cursor left one position, erases the character at 
  909.                  the new cursor position, and moves the remainder of the 
  910.                  command line left one position. 
  911.  
  912.  Insert          Changes the insert mode. A caret at the beginning of the 
  913.                  command line indicates that insert mode is active. 
  914.  
  915.  Del             Erases the character at the cursor and moves the remainder of 
  916.                  the command line left one position. 
  917.  
  918.  Shift           Shifts to upper case and reverses the effect of Caps Lock. 
  919.  
  920.  Caps Lock       Shifts to upper case for the alphabetic keys. 
  921.  
  922.  Ctrl-Home       (Clear) erases the entire command line and places the cursor 
  923.                  at the beginning of the command line. 
  924.  
  925.  Ctrl-End        (Clear End-of-Line) erases the command line beginning at the 
  926.                  cursor position continuing to the end of the command line. 
  927.  
  928.  PrtSc           Causes the ASDT32 screen to be printed. 
  929.  
  930.  ASDT32 recognizes the following function keys while the user program is 
  931.  executing: 
  932.  
  933.  PrtSc           Interrupts (as the default hot key) the user program if the /K 
  934.                  option was specified or the SK command was issued prior to 
  935.                  executing the user program. 
  936.  
  937.                  Note:  ASDT32 assumes that you want to print your screen when 
  938.                  you press the shift key at the same time that you press the 
  939.                  PrtSc key.  On some hardware configurations, you need to press 
  940.                  the shift key a full second or two before pressing the PrtSc 
  941.                  key to have ASDT32 ignore the keystrokes and allow OS/2 to 
  942.                  print your screen. 
  943.  
  944.                  If you want, you can define the hot key to be any scan code 
  945.                  that you desire with the /K=nn option or the SK nn command. 
  946.  
  947.  
  948. ΓòÉΓòÉΓòÉ 6. Window Area ΓòÉΓòÉΓòÉ
  949.  
  950. The window area occupies the bottom portion of the ASDT32 display. This area is 
  951. where you view disassembled instructions, memory, LDT/GDT or IDT descriptors, 
  952. or page directory or page table entries. You can access the window area through 
  953. window commands, individual window line commands, and direct editing in the 
  954. window itself. 
  955.  
  956. The window consists of fifteen lines. Each line has a line identifier that is 
  957. used to address the lines with commands. These identifiers are the ASDT32 
  958. variables L1 through L9 and M1 through M6. Each window line displays its 
  959. identifier at the beginning of the line. You can address any window line in any 
  960. window with the L1-L9 and M1-M6 commands. 
  961.  
  962. There is always a primary window. The primary window is the type of line that 
  963. is displayed on line L1, the first line in the window display area of ASDT32. 
  964. Initially, the primary window is disassembly. The primary window can be 
  965. disassembly, memory, LDT/GDT, IDT, or page. This is indicated on line 8 of the 
  966. ASDT32 display. 
  967.  
  968. You can set up a secondary window for disassembly and memory windows. If the 
  969. primary window is disassembly, then the secondary window must be memory.  If 
  970. the primary window is memory, then the secondary window must be disassembly. 
  971.  
  972. You can divide all primary windows into multiple window segments. Every primary 
  973. window line shows an asterisk near the front of the line when that line starts 
  974. a window segment. Multiple window segments allow you to view more than one 
  975. disassembly, memory, LDT/GDT, IDT, or page address at once. 
  976.  
  977. You can set up the window area in any of the following configurations: 
  978.  
  979.   Window Type     Contents               Segments     Browse      Edit
  980.  
  981.   Disassembly     15 disassembly lines     1-15        Yes         Yes
  982.   Memory          15 memory lines          1-15        Yes         Yes
  983.   Disasm/Memory   15 disasm/memory lines   1-14,1      Yes         Yes
  984.   Memory/Disasm   15 memory/disasm lines   1-14,1      Yes         Yes
  985.   LDT/GDT         15 LDT/GDT lines         1-15        Yes         No
  986.   IDT             15 IDT lines             1-15        Yes         No
  987.   Page            15 page lines            1-15        Yes         No
  988.  
  989.  
  990. ΓòÉΓòÉΓòÉ 6.1. Window Contents ΓòÉΓòÉΓòÉ
  991.  
  992. The disassembly window area shows portions of memory as hexadecimal 
  993. instructions and disassembled mnemonics for those instructions. A disassembly 
  994. window consists of one to fifteen lines showing a contiguous block of 
  995. disassembled instructions. Each disassembly line shows an address (either 
  996. selector:offset or 8-higit linear or physical), the hexadecimal instruction or 
  997. its AL86 or Intel (MASM) text, an operand address, and operand contents 
  998. (byte/word/dword) if appropriate. 
  999.  
  1000. Note:  The text of the instruction is shown as the default.  If you want to see 
  1001. the instruction as hex, enter the disassembly window and toggle the line(s) for 
  1002. a given segment from text by using the insert key. 
  1003.  
  1004. Within a disassembly window you may alter and scroll through instructions. You 
  1005. can switch the mnemonic format with the DA (Disassemble AL86) and DM 
  1006. (Disassemble MASM) commands. Also, if the disassembly line is in the range of 
  1007. the code origin (CO), ASDT32 displays "$" near the front of the line and 
  1008. displays the disassembly line address as :offset, where the offset is from the 
  1009. CO. This allows you to display a disassembly segment that matches your assembly 
  1010. listing. 
  1011.  
  1012. The memory window area shows portions of memory. A memory window consists of 
  1013. one to fifteen memory lines showing a contiguous block of memory. Each memory 
  1014. line shows an address (either selector:offset or 8-higit linear or physical), 
  1015. sixteen bytes (one paragraph) of memory in hexadecimal format, and the same 
  1016. sixteen bytes in either ASCII or EBCDIC format. You can switch the format with 
  1017. the AS (ASCII) and EB (EBCDIC) commands. Within a memory window you may alter 
  1018. and scroll through memory. 
  1019.  
  1020. In both the disassembly and memory windows, ASDT32 may substitute a symbol name 
  1021. for a given line address.  This assumes that the line address corresponds to 
  1022. some symbol read in.  Note that code origin usage will override this 
  1023. substitution process; i.e., if "$" is present on a disassembly line, ASDT32 
  1024. will not substitute the offset address with a symbol name. 
  1025.  
  1026. This substitution process extends to the operand address when possible.  The 
  1027. symbol name replacement for an operand address is not overridden by code origin 
  1028. usage. 
  1029.  
  1030. The LDT/GDT window area shows LDT and GDT descriptors. Each LDT/GDT line shows 
  1031. the table index, the descriptor type, and other descriptor information based on 
  1032. the descriptor type. Likewise, the IDT window area shows IDT descriptors. 
  1033.  
  1034. The page window area shows page directory or page table entries.  Each 
  1035. directory or table entry line shows the linear address that is used to 
  1036. determine which entry to display, the physical frame for the entry, and 
  1037. additional entry (such as the dirty bit status) information. 
  1038.  
  1039. Within an LDT/GDT, IDT, or page window, you may scroll through descriptor 
  1040. table, page directory, or page table entries. These windows are browsing 
  1041. windows and do not allow you to edit the entries. 
  1042.  
  1043.  
  1044. ΓòÉΓòÉΓòÉ 6.2. Moving Among Windows ΓòÉΓòÉΓòÉ
  1045.  
  1046. A set of ASDT32 commands is available to move among all of the ASDT32 windows. 
  1047. Moving among the different windows changes the primary window. The name of the 
  1048. primary window is displayed at the beginning of line 8 on the ASDT32 screen. 
  1049.  
  1050. Use the following commands to switch windows: MW (switch to memory), LW (switch 
  1051. to LDT/GDT), VW (switch to IDT), PW (switch to page), and DW (switch to 
  1052. disassembly). To toggle among the windows, use the NW (Next Window) command or 
  1053. press the F4 key. On entry, the primary window is disassembly. 
  1054.  
  1055.  
  1056. ΓòÉΓòÉΓòÉ 6.3. Moving in the Disassembly and Memory Windows ΓòÉΓòÉΓòÉ
  1057.  
  1058. The disassembly and memory windows are edit windows. ASDT32 recognizes commands 
  1059. on the command line and the following function keys while editing these window 
  1060. areas: 
  1061.  
  1062.  Enter             Moves the cursor to the beginning of the command line and 
  1063.                    executes the commands on the command line. 
  1064.  
  1065.  Home              Moves the cursor to the beginning of the command line but 
  1066.                    does not execute the commands on the command line. 
  1067.  
  1068.  Up Arrow          Moves the cursor up one line. When the cursor reaches the 
  1069.                    top of the window, it wraps around to the bottom line. 
  1070.  
  1071.  Down Arrow        Moves the cursor down one line. When the cursor reaches the 
  1072.                    bottom of the window, it wraps around to the top line. 
  1073.  
  1074.  Left Arrow        Moves the cursor left to the next position where ASDT32 
  1075.                    accepts keystrokes. When the cursor reaches the beginning of 
  1076.                    a line, it wraps to the end of the previous line. 
  1077.  
  1078.  Right Arrow       Moves the cursor right to the next position where ASDT32 
  1079.                    accepts keystrokes. When the cursor reaches the end of a 
  1080.                    line, it wraps to the beginning of the next line. 
  1081.  
  1082.  Ctrl-Left Arrow   Scrolls the window up one byte. 
  1083.  
  1084.  Ctrl-Right Arrow  Scrolls the window down one byte. 
  1085.  
  1086.  PgUp              Scrolls the window up the number of lines in the segment. 
  1087.  
  1088.  PgDn              Scrolls the window down the number of lines in the segment. 
  1089.  
  1090.  Ctrl-PgUp         Scrolls the window up one line. 
  1091.  
  1092.  Ctrl-PgDn         Scrolls the window down one line. 
  1093.  
  1094.  Tab               Moves the cursor right to the next column. The cursor wraps 
  1095.                    as it does with the Right Arrow. 
  1096.  
  1097.  Back Tab          Moves the cursor left to the previous column. The cursor 
  1098.                    wraps as it does with the Left Arrow. 
  1099.  
  1100.  Spacebar          Functions similarly to the Right Arrow except that the 
  1101.                    Spacebar is a valid data key when entering character data. 
  1102.  
  1103.  Backspace         Functions similarly to the Left Arrow. 
  1104.  
  1105.  Del               Deletes the window in which the cursor is located and 
  1106.                    combines it with the previous window. If only one window 
  1107.                    exists, no action is taken. 
  1108.  
  1109.  Ins               In the disassembly window, toggles the line display between 
  1110.                    the text of and the hex for that line's instruction.  The 
  1111.                    line's address and operand information (if any) are always 
  1112.                    displayed. In the memory window, no action is taken. 
  1113.  
  1114.  Shift             Shifts to upper case and reverses the effect of Caps Lock. 
  1115.  
  1116.  Caps Lock         Shifts to upper case for the alphabetic keys. 
  1117.  
  1118.  Ctrl-Home         Moves the cursor to the beginning of the command line and 
  1119.                    erases the entire command line. 
  1120.  
  1121.  PrtSc             Causes the ASDT32 screen to be printed. 
  1122.  
  1123.  The LDT/GDT, IDT, and page windows are browse windows. ASDT32 recognizes 
  1124.  commands on the command line and the command line function keys while browsing 
  1125.  these window areas. See Moving on the Command Line for a list of these keys. 
  1126.  
  1127.  When the window area is being used by the Compare Memory (CM) function, a 
  1128.  different set of function keys is available. See CM - Compare Memory for 
  1129.  details. 
  1130.  
  1131.  
  1132. ΓòÉΓòÉΓòÉ 6.4. Altering Disassembly and Memory ΓòÉΓòÉΓòÉ
  1133.  
  1134.  
  1135. ΓòÉΓòÉΓòÉ 6.4.1. Creating Windows ΓòÉΓòÉΓòÉ
  1136.  
  1137. A new window is created by entering a new address for the desired line. This is 
  1138. done by typing over the old address or by entering one of the L1-M6 commands on 
  1139. the command line. ASDT32 defines that line as the first line of a disassembly 
  1140. or memory window. ASDT32 displays an asterisk at the left of the address to 
  1141. indicate that the line begins a new window. The end of any window is determined 
  1142. by the first line of the following window. 
  1143.  
  1144. A secondary window segment is created by entering an MW or DW command on the 
  1145. command line if you are in a disassembly or memory window mode. For example, to 
  1146. create a memory window segment in the disassembly window at line L8, enter 
  1147. "MW L8" on the command line. To create a disassembly window segment in the 
  1148. memory window at line M2, enter "DW M2" on the command line. You are limited to 
  1149. only one secondary window for a given primary window. 
  1150.  
  1151.  
  1152. ΓòÉΓòÉΓòÉ 6.4.2. Altering Data within a Window ΓòÉΓòÉΓòÉ
  1153.  
  1154. You can alter disassembled instructions with hexadecimal input. To do this, 
  1155. move the cursor to the appropriate byte in the hex area for the instruction 
  1156. itself or for the referenced operand (if there is one and the reference is 
  1157. valid) area and type over the data that is displayed. 
  1158.  
  1159. Note:  The text and the hex of the instruction are not displayed simultaneously 
  1160. for a given line.  You can use the Ins key to toggle between these two methods 
  1161. of display for a disassembly window segment.  The cursor must be located in the 
  1162. segment that you wish to toggle. 
  1163.  
  1164. When in the instruction's hex field, each keystroke results in a modification 
  1165. of the instruction; that is, ASDT32 updates the instruction as each higit is 
  1166. entered. When in the instruction's referenced operand field, each keystroke 
  1167. results in a modification of that memory location.  However, please note that 
  1168. ASDT32 arranges the referenced operand as it would appear in a processor 
  1169. register (ASDT32 undoes the byte reversal). 
  1170.  
  1171. You can alter memory with hexadecimal or character input. To do this, move the 
  1172. cursor to the appropriate byte in either the hex or the character area and type 
  1173. over the data that is displayed. Each keystroke results in a modification of 
  1174. memory; that is, one nibble is modified for each higit entered, and one full 
  1175. byte is modified for each character entered in the character area. 
  1176.  
  1177. ASDT32 updates a window area line under any of the following conditions: 
  1178.  
  1179.      The cursor is on the window line. 
  1180.  
  1181.      A command (or command series) is executed. 
  1182.  
  1183.  To prevent unintentional data alteration, ASDT32 will not move the cursor from 
  1184.  the address area to the hexadecimal area when a character key is pressed. Use 
  1185.  one of the cursor keys or the space bar to move the cursor into the 
  1186.  hexadecimal display area from the address area. 
  1187.  
  1188.  
  1189. ΓòÉΓòÉΓòÉ 6.4.3. Deleting a Window ΓòÉΓòÉΓòÉ
  1190.  
  1191. Delete a disassembly or memory window and combine it with the previous window 
  1192. by pressing the Del key with the cursor anywhere in the secondary window or by 
  1193. entering the appropriate L1-M6 command without a parameter. 
  1194.  
  1195. When the primary window is disassembly, the DW command deletes the memory 
  1196. window segment if present. When the primary window is memory, the MW command 
  1197. deletes the disassembly window segment if present. 
  1198.  
  1199.  
  1200. ΓòÉΓòÉΓòÉ 7. Setting Breakpoints ΓòÉΓòÉΓòÉ
  1201.  
  1202. ASDT32 provides permanent, complex, and procedure step breakpoints. For each of 
  1203. the nine ASDT32 display screens, you can have up to eighteen permanent or 
  1204. complex breakpoints or up to seventeen permanent or complex breakpoints and one 
  1205. procedure step breakpoint. 
  1206.  
  1207.  
  1208. ΓòÉΓòÉΓòÉ 7.1. Permanent Breakpoints ΓòÉΓòÉΓòÉ
  1209.  
  1210. The permanent breakpoints are divided into primary and secondary groups. The 
  1211. primary group is named S1 through S9, and the secondary group is named V1 
  1212. through V9. The difference between the S group and the V group is that the S 
  1213. breakpoints default to an "on" or active condition when set, and the V 
  1214. breakpoints default to an "off" or inactive condition when set. V breakpoints 
  1215. must be specifically turned on to become active. 
  1216.  
  1217. Note:  The V1-V9 variables are no longer displayed at the top of the ASDT32 
  1218. screen. See CB - Complex Breakpoint for details on how to view your V1-V9 
  1219. variables. 
  1220.  
  1221. The breakpoints are divided this way to give you visible breakpoints and extra 
  1222. scratch pad space, which can double as additional breakpoints when needed. 
  1223. Since nine active breakpoints are usually enough for a given debug session, the 
  1224. nine inactive breakpoints serve as scratch pad variables to hold intermediate 
  1225. calculations or base addresses. Usually, you will use V1-V9 as scratch pad 
  1226. variables and S1-S9 as breakpoints. However, if you need more breakpoints per 
  1227. screen, you can turn any of the V variables on so that it becomes an active 
  1228. breakpoint. 
  1229.  
  1230.  
  1231. ΓòÉΓòÉΓòÉ 7.2. Procedure Stepping ΓòÉΓòÉΓòÉ
  1232.  
  1233. ASDT32 provides a single temporary breakpoint which is used as a procedure step 
  1234. or module step facility. This function is provided in a function key (F9 by 
  1235. default) because it consists of several ASDT32 commands. The procedure step is 
  1236. performed by setting a breakpoint at the instruction following the current 
  1237. instruction, executing, and then removing the breakpoint. 
  1238.  
  1239. You will use the procedure step most frequently for CALL, INT, and REP 
  1240. instructions. If you are stepping through your program and you reach one of 
  1241. these instructions, the procedure step command sequence "S9=EX+IL;EX;S9" will 
  1242. execute the subroutine or block of code and stop at the instruction following 
  1243. the CALL, INT, or REP instruction. This uses breakpoint S9 as a substitute for 
  1244. an automatic module step function. 
  1245.  
  1246. If you plan to use the built-in procedure step function, you should not set a 
  1247. breakpoint in S9 since it will be replaced by the procedure step breakpoint. Of 
  1248. course, you can set other breakpoints as procedure step breakpoints yourself by 
  1249. issuing the appropriate commands. 
  1250.  
  1251.  
  1252. ΓòÉΓòÉΓòÉ 7.3. Breakpoint Addresses ΓòÉΓòÉΓòÉ
  1253.  
  1254. ASDT32 supports four types of addressing schemes for breakpoint setting. A 
  1255. breakpoint can be either an 8-higit linear,  an 8-higit physical, a 
  1256. selector:offset address, or a segment:offset address for virtual 8086 mode 
  1257. applications. ASDT32 displays breakpoints in a relative address format whenever 
  1258. possible. If the breakpoint address is not more than 4K greater than the active 
  1259. code origin (CO) address, ASDT32 displays the breakpoint as an offset preceded 
  1260. by "$." Otherwise, if the same condition is true for CS, ASDT32 displays the 
  1261. breakpoint as an offset preceded by "+." 
  1262.  
  1263. If ASDT32 can not display a selector:offset breakpoint address as an offset of 
  1264. either the CO or the CS, then ASDT32 displays this breakpoint as an offset 
  1265. preceded by "#" for protected-mode virtual addresses or "&" for virtual 8086 
  1266. mode addresses. 
  1267.  
  1268. Physical addresses that can not be displayed as an offset of the CO or the CS 
  1269. are preceded by "!" whereas linear addresses that fall into this category are 
  1270. preceded by a blank. Null breakpoints are displayed as "........." 
  1271.  
  1272. For a virtual address breakpoint, ASDT32 may substitute a symbol name in the 
  1273. breakpoint's display area. This assumes that the breakpoint address corresponds 
  1274. to some symbol read in.  Note that code origin usage will override this 
  1275. substitution process; i.e., if "$" is present in the breakpoint display area, 
  1276. ASDT32 will not substitute the offset address with a symbol name. 
  1277.  
  1278.  
  1279. ΓòÉΓòÉΓòÉ 7.4. Complex Breakpoints ΓòÉΓòÉΓòÉ
  1280.  
  1281. You can change any active ASDT32 breakpoint to a complex breakpoint with the CB 
  1282. command. Complex breakpoints have an optional condition and an optional count. 
  1283. You will use complex breakpoints most often to stop when your program meets a 
  1284. particular condition or when it executes the nth occurrence of a particular 
  1285. instruction. Counts are also useful inside loops. 
  1286.  
  1287. You can have both complex breakpoints and regular breakpoints set at the same 
  1288. time. For each complex breakpoint, ASDT32 takes the breakpoint only when its 
  1289. condition and count satisfy the requirements. Otherwise, it returns control to 
  1290. your program for further execution. 
  1291.  
  1292. To set a complex breakpoint, you must first have an active breakpoint. You 
  1293. create an active breakpoint with the appropriate V1-V9 or S1-S9 command. Then 
  1294. you use the CB command to add a condition and a count to the breakpoint to make 
  1295. it complex. 
  1296.  
  1297. You can display the current condition, count, and occurrence count for a 
  1298. complex breakpoint by issuing the CB command with the breakpoint name as an 
  1299. operand; e.g., "CB S5." ASDT32 will display the breakpoint's condition and 
  1300. count on the command line so you can change them and reenter them easily. It 
  1301. also displays the occurrence count, or the number of times the complex 
  1302. breakpoint has been hit, on the message line. 
  1303.  
  1304.  
  1305. ΓòÉΓòÉΓòÉ 7.5. Multi-process, Multi-thread Breakpoints ΓòÉΓòÉΓòÉ
  1306.  
  1307. All breakpoints that are set are maintained across all processes and threads 
  1308. that are running.  You can deactivate a breakpoint that is set for one process 
  1309. or thread while ASDT32 has control over some other process or thread. 
  1310. Similarly, you can reactivate a breakpoint that belongs to another process or 
  1311. thread. 
  1312.  
  1313. See S1-S9 - Set Breakpoints S1-S9 and D1-D9 - Select Display for details on how 
  1314. to deactivate and reactivate breakpoints.  Pay particular attention to the 
  1315. caveats given. 
  1316.  
  1317.  
  1318. ΓòÉΓòÉΓòÉ 7.6. Sticky Breakpoints ΓòÉΓòÉΓòÉ
  1319.  
  1320. You can force ASDT32 to stop on every occurrence of a breakpoint by using the 
  1321. SB command.  This sticky nature is usually reserved for physical address 
  1322. breakpoints and breakpoints which resolve to a linear address that is above the 
  1323. 512M line. See SB - Sticky Breakpoint for more information on sticky 
  1324. breakpoints. 
  1325.  
  1326.  
  1327. ΓòÉΓòÉΓòÉ 8. Hardware Debug Registers ΓòÉΓòÉΓòÉ
  1328.  
  1329. In addition to the V1-S9 breakpoints, ASDT32 allows you to set the hardware 
  1330. debug registers. These registers support both instruction and data breakpoints 
  1331. and can pinpoint when a data item (for example) is altered. 
  1332.  
  1333. See T0 - Suspend/Reactivate Hardware Debug Registers and T1-T4 - Set Hardware 
  1334. Debug Registers for details on how to set/reset and arm/disarm the hardware 
  1335. debug registers. 
  1336.  
  1337.  
  1338. ΓòÉΓòÉΓòÉ 9. Indirect Addressing ΓòÉΓòÉΓòÉ
  1339.  
  1340. In addition to numeric values and ASDT32 variables, you can use indirect 
  1341. addressing to reference the contents of memory. This allows you to examine and 
  1342. use memory contents without having to look at the memory locations directly 
  1343. using the various ASDT32 windows. 
  1344.  
  1345.  
  1346. ΓòÉΓòÉΓòÉ 9.1. How to Use Indirect Addresses ΓòÉΓòÉΓòÉ
  1347.  
  1348. ASDT32 distinguishes indirect addresses by a trailing "%" and an optional 
  1349. length. The syntax for an indirect address is: 
  1350.  
  1351. target = expr %L
  1352.  
  1353. where:
  1354.   target = the variable or register you wish to change,
  1355.   expr   = an ASDT32 expression for an address,
  1356.   %      = the trigger for an indirect address, and
  1357.   L      = the number of bytes you want to reference.
  1358.  
  1359. Valid values for L are 1, 2, 4, and 6. If you do not specify any value for L, 
  1360. then L defaults to 1. If L is 4, ASDT32 treats the 4 bytes in memory as a 
  1361. 4-byte (selector:offset) pointer if expr is similarly constructed. Otherwise, 
  1362. the 4 bytes in memory are treated as a fixed 32-bit linear or physical address 
  1363. (again depending on expr). L must follow immediately after the "%." 
  1364.  
  1365.  
  1366. ΓòÉΓòÉΓòÉ 9.2. Indirect Addressing Examples ΓòÉΓòÉΓòÉ
  1367.  
  1368. The following examples illustrate various ways you can use indirect addresses: 
  1369.  
  1370.  AX = DS:SI %2             uses (DS:SI) -> memory for 2 bytes. 
  1371.  
  1372.  AH = DS:SI %              uses (DS:SI) -> memory for 1 byte. 
  1373.  
  1374.  S1 = SS:BP%4              uses (SS:BP) -> memory for 4 bytes.  Note that S1 is 
  1375.                            set to a 16:16 pointer. 
  1376.  
  1377.  S1 = 12345678!%4          uses (physical address 12345678) -> memory for 4 
  1378.                            bytes.  Note that S1 is set to a 32-bit physical 
  1379.                            value. 
  1380.  
  1381.  S1 = SS:EBP%6             uses (SS:EBP) -> memory for 6 bytes.  Note that S1 
  1382.                            is set to a 16:32 pointer. 
  1383.  
  1384.  BL = DS:SI %4 %           uses (DS:SI) -> memory to get a selector:offset 
  1385.                            pointer, which will in turn be used to access 1 byte 
  1386.                            of memory. 
  1387.  
  1388.  
  1389. ΓòÉΓòÉΓòÉ 10. Address Conversion ΓòÉΓòÉΓòÉ
  1390.  
  1391. You will often find it convenient to have ASDT32 convert a given virtual 8086 
  1392. segment:offset or protected-mode selector:offset address to its corresponding 
  1393. linear address.  Further, you may find it useful to have ASDT32 convert any 
  1394. address to its corresponding physical address.  ASDT32 allows you to do this 
  1395. with the use of the "~" and "~~" operators. 
  1396.  
  1397.  
  1398. ΓòÉΓòÉΓòÉ 10.1. How to Use the Address Conversion Operators. ΓòÉΓòÉΓòÉ
  1399.  
  1400. The "~" operator causes ASDT32 to convert a running expression to its 
  1401. corresponding linear address. The syntax for this operation is: 
  1402.  
  1403. target = expr~
  1404.  
  1405. where:
  1406.   target = the variable or register you wish to change,
  1407.   expr   = an ASDT32 expression for an address (that is not physical), and
  1408.   ~      = the trigger for linear address conversion
  1409.  
  1410. The "~~" operator causes ASDT32 to convert a running expression to its 
  1411. corresponding physical address. The syntax for this operation is: 
  1412.  
  1413. target = expr~~
  1414.  
  1415. where:
  1416.   target = the variable or register you wish to change,
  1417.   expr   = an ASDT32 expression for an address (that is not physical), and
  1418.   ~~     = the trigger for physical address conversion
  1419.  
  1420.  
  1421. ΓòÉΓòÉΓòÉ 10.2. Address Conversion Examples ΓòÉΓòÉΓòÉ
  1422.  
  1423. The following examples illustrate various ways you can use address conversion: 
  1424.  
  1425.  M1 = DS:ESI~              converts (DS:ESI) to its corresponding linear 
  1426.                            address. 
  1427.  
  1428.  S1 = 12345678~            converts linear address 12345678 to linear address 
  1429.                            12345678 (no change, basically). 
  1430.  
  1431.  EAX = SS:BP~              converts virtual 8086 (SS:BP) to its corresponding 
  1432.                            linear address. 
  1433.  
  1434.  S1 = 12345678~~           converts linear address 12345678 to its 
  1435.                            corresponding physical address. 
  1436.  
  1437.  Note:  You can not use a physical address on the left side of the "~" and "~~" 
  1438.  operators. Also, if you have changed the linear base address of the LDT (using 
  1439.  the LD command), and you are now trying to convert some address to its 
  1440.  corresponding physical address,  ASDT32 assumes that you want to know the 
  1441.  physical address relative to the LDT that you are investigating. 
  1442.  
  1443.  
  1444. ΓòÉΓòÉΓòÉ 11. Hints for Using ASDT32 ΓòÉΓòÉΓòÉ
  1445.  
  1446. These hints are intended to aid your use of ASDT32. They range from very simple 
  1447. hints to more advanced ideas. 
  1448.  
  1449.  
  1450. ΓòÉΓòÉΓòÉ 11.1. Profile Use ΓòÉΓòÉΓòÉ
  1451.  
  1452. ASDT32 will read a profile from disk if you specify the profile name in the 
  1453. CONFIG.SYS file. The Execute Profile (EP) command is used to execute the 
  1454. commands in the profile. 
  1455.  
  1456. You can put any valid ASDT32 command or string of commands into a profile. 
  1457. Suggested commands include Define Key (DK) commands that define function keys 
  1458. that don't have defaults, commands to set up the display and colors as you want 
  1459. them, and common ASDT32 commands you use each time you debug a program. 
  1460.  
  1461.  
  1462. ΓòÉΓòÉΓòÉ 11.2. Symbol usage ΓòÉΓòÉΓòÉ
  1463.  
  1464. ASDT32 provides access to Public data that has been extracted from an OS/2 3.0 
  1465. LINK386 or LINK map. (Note that ASDT32 allows for multiple maps in this 
  1466. process.) A REXX (OS/2) module, ASDT32SM.CMD, performs this extraction for you, 
  1467. and the resulting symbol file name (with a file extension of .SYM) should be 
  1468. specified on the ASDT32 parameter line in the CONFIG.SYS file. 
  1469.  
  1470. During the initialization phase, ASDT32 will request system memory and put the 
  1471. extracted symbol file there. When you enter ASDT32, you can then use the '@' 
  1472. trigger to use a symbol name on the command line. E.g., M1=@_myproc will set 
  1473. the M1 address to that of the resolved address for Public entry _myproc. 
  1474.  
  1475. You can use symbol names in your ASDT32 profile, too.  This would enable you to 
  1476. set many breakpoints or key disassembly/memory lines to Public names whose 
  1477. addresses move between compilations of your program. 
  1478.  
  1479. In the disassembly and memory windows, in the operand address, and in the 
  1480. breakpoint display area, ASDT32 may substitute a symbol name for a given line 
  1481. address.  This assumes that these addresses correspond to some symbol read in. 
  1482.  
  1483. The QS and WI commands are used in association with symbols.  See QS - Qualify 
  1484. Segment Number and WI - What is Address for information on how these commands 
  1485. enhance symbol support. 
  1486.  
  1487.  
  1488. ΓòÉΓòÉΓòÉ 11.3. Disassembly ΓòÉΓòÉΓòÉ
  1489.  
  1490. ASDT32 provides a single instruction disassembly function even when you don't 
  1491. have a disassembly window shown. The disassembly of the next instruction to be 
  1492. executed, identified by the "EX" display, is always shown. If you set the 
  1493. primary window to disassembly, then disassembled instructions are shown 
  1494. beginning at L1, and ASDT32 will track the next instruction to be executed and 
  1495. will always display it at L1. 
  1496.  
  1497. You can indicate whether AL86 or Intel mnemonics are to be used by using the DA 
  1498. command or the DM command. If the instruction has an operand which references 
  1499. memory, the operand address is calculated and displayed as the OP variable. The 
  1500. non-displayed Instruction Length (IL) variable contains the length of the 
  1501. current instruction in bytes. 
  1502.  
  1503. You can use the variables OP and IL as command operands. For example, use the 
  1504. command L1=OP to display the contents of memory at the current instruction's 
  1505. operand address. This is the same operand address shown at the right side of 
  1506. the first instruction in the disassembly window. Use the IL variable when 
  1507. procedure stepping, as in "S9=EX+IL;EX;S9," which sets a breakpoint at the 
  1508. instruction following the one about to be executed. 
  1509.  
  1510. The disassembly function shows the instruction when a breakpoint is set. The 
  1511. disassembly indicates that you have set the breakpoint at the proper place and 
  1512. should help prevent inadvertent breakpoints in the middle of instructions. If a 
  1513. breakpoint is placed in the middle of an instruction, the breakpoint will not 
  1514. be hit during normal execution, and the instruction will probably be changed so 
  1515. that it executes incorrectly. 
  1516.  
  1517.  
  1518. ΓòÉΓòÉΓòÉ 11.4. Display Screens and Breakpoints ΓòÉΓòÉΓòÉ
  1519.  
  1520. A useful debugging technique is to use a different ASDT32 display (D1-D9) for 
  1521. each program (process) or code segment (CSECT or thread) being debugged. You 
  1522. can switch from screen to screen and can also save the contents of one screen 
  1523. into another. On each screen, the CO, breakpoints, disassembly locations, and 
  1524. memory locations are unique. The registers and flags are the same across 
  1525. screens. 
  1526.  
  1527. When an EX or ST command is executed, and the processor is subsequently stopped 
  1528. by a breakpoint, the ASDT32 display screen containing that breakpoint is 
  1529. automatically displayed. If the processor is stopped by something other than a 
  1530. breakpoint, the ASDT32 display that was active at the time of the EX or ST 
  1531. remains active. 
  1532.  
  1533. Each of the nine displays has nine V breakpoints and nine S breakpoints 
  1534. available, which provides a total of 162 possible breakpoints. The S 
  1535. breakpoints are turned on when set, but the V breakpoints are not turned on 
  1536. until set on with a command. This gives the V breakpoints scratch pad function. 
  1537.  
  1538. Note:  Due to screen space considerations, the V breakpoints are displayed via 
  1539. the CB command. 
  1540.  
  1541.  
  1542. ΓòÉΓòÉΓòÉ 11.5. Viewing Other OS/2 Sessions ΓòÉΓòÉΓòÉ
  1543.  
  1544. Viewing other OS/2 sessions while under ASDT32 requires a few steps.  First, 
  1545. you need to issue the HT command.  After the current thread has been halted, 
  1546. you can then enter a Ctrl-Esc sequence to locate a specific session (your host 
  1547. 370 session included).  If you choose to switch to your host 370 session, you 
  1548. could view listings of the halted thread. The Ctrl-Esc sequence will enable you 
  1549. to begin another session at this point, too. 
  1550.  
  1551. Returning to ASDT32 requires a few steps as well.  First, you need to enter 
  1552. Alt-Esc keystrokes to get back to the screen group that contains the halted 
  1553. thread.  Then you can press the hot key (the ASDT32 hot key if it is enabled) 
  1554. to enter ASDT32.  Finally, you should issue the RT command to allow the halted 
  1555. thread to resume. 
  1556.  
  1557. Note:  You should realize that when you halt a thread under ASDT32, other 
  1558. threads will still be running.  If any of these threads cause an ASDT32-trapped 
  1559. event, ASDT32 will get control again.  Additionally, the "complexion" of your 
  1560. ASDT32 environment may have changed somewhat when you return to ASDT32 since 
  1561. other processes are running. 
  1562.  
  1563.  
  1564. ΓòÉΓòÉΓòÉ 11.6. Remote Terminal ΓòÉΓòÉΓòÉ
  1565.  
  1566. ASDT32 can be moved to a remote terminal (if you have one connected via a COMn 
  1567. port (n=1 or 2)) with the "CG RT n" command. Your application will be displayed 
  1568. on the host machine's terminal. ASDT32 knows to display its screen on the 
  1569. remote terminal when you issue the "CG RT n" command. To tell ASDT32 to use a 
  1570. remote terminal from its invocation, use the /R=n parameter. See CG - 
  1571. Configuration for more information about remote terminals. 
  1572.  
  1573. The "CG RT n" command can be placed in a profile or can be assigned to a 
  1574. function key. 
  1575.  
  1576.  
  1577. ΓòÉΓòÉΓòÉ 11.7. Miscellaneous Tidbits ΓòÉΓòÉΓòÉ
  1578.  
  1579. This section describes some features or the inner workings of ASDT32 that don't 
  1580. seem to have a home for discussion in any other section! 
  1581.  
  1582.  
  1583. ΓòÉΓòÉΓòÉ 11.7.1. Filtering ΓòÉΓòÉΓòÉ
  1584.  
  1585. ASDT32 filters several IDT interrupts.  The interrupts that are filtered are 
  1586. the keyboard, the general protection fault (GPF), invalid opcode, and stack 
  1587. fault.  In essence, if ASDT32 owns the interrupt, ASDT32 will be entered.  Now 
  1588. ASDT32 needs to decide if it should put up its display screen for debugging or 
  1589. if it should pass the condition on to another handler. 
  1590.  
  1591. In the case of the keyboard interrupt, this is fairly simple.  If ASDT32 is 
  1592. looking for a hot key (i.e., ASDT32 is not in control), it compares the scan 
  1593. code from the keyboard processor with the currently defined hot key scan code. 
  1594. If a match occurs, ASDT32 presents the debug screen. If not, ASDT32 restores 
  1595. the scan code on the keyboard processor, and then it restores the interrupt 
  1596. information and jumps to the OS/2 3.0 keyboard handler. 
  1597.  
  1598. In the case of a GPF or an invalid opcode interrupt, ASDT32 must decide if the 
  1599. faulting instruction belongs to a system component.  ASDT32 will look at the 
  1600. pushed CS selector value, the task state register, or the virtual 8086 mode 
  1601. flag in the pushed eflags image to make its decision. If ASDT32 decides not to 
  1602. handle the GPF or invalid opcode interrupt, it returns control to the 
  1603. respective OS/2 3.0 handler. 
  1604.  
  1605. In the case of a stack fault, ASDT32 only handles limit violations. ASDT32 
  1606. looks at the error code on the stack to see if it is zero.  If so ASDT32 
  1607. displays the debug screen.  If not, it returns control to the OS/2 3.0 stack 
  1608. fault handler. 
  1609.  
  1610.  
  1611. ΓòÉΓòÉΓòÉ 11.7.2. Screen saving ΓòÉΓòÉΓòÉ
  1612.  
  1613. ASDT32 tries its heart out to save the user screen before it displays its own 
  1614. text screen.  If you are running with the remote terminal option, this is 
  1615. unnecessary, and if the user display is in a text mode to begin with, this is 
  1616. trivial. 
  1617.  
  1618. Unfortunately, with OS/2 3.0 many times the display is in a graphics mode for 
  1619. the Presentation Manager (PM).  This means that it is a very complex task for 
  1620. ASDT32 to save the contents of the adapter's registers along with the display 
  1621. memory planes before it establishes a text mode for its own screen. 
  1622.  
  1623. The implication of this is that ASDT32 may not be able to establish a text mode 
  1624. for its screen if you are using an adapter that it does not know about.  If 
  1625. ASDT32 can establish a text mode and put up its debug display, you may find 
  1626. detritus on the graphics-mode display upon return to the user application or 
  1627. when the SC command is used. 
  1628.  
  1629. If detritus occurs upon the display of a saved graphics-mode display, it is 
  1630. because ASDT32 employs a run-and-count algorithm to save the display memory 
  1631. planes.  ASDT32 has a limited amount of memory it can use to hold the values 
  1632. from these saved planes, and it frequently exhausts the save area before all 
  1633. the information is collected.  Hence, when an ensuing display restore operation 
  1634. occurs, ASDT32 can not restore all of the original information. 
  1635.  
  1636.  
  1637. ΓòÉΓòÉΓòÉ 12. ASDT32 Command Reference ΓòÉΓòÉΓòÉ
  1638.  
  1639. This section describes each of the available ASDT32 commands. Commands are 
  1640. listed alphabetically except for command groups, which are at the beginning of 
  1641. the list. These groups are the general register commands, the selector register 
  1642. commands, the specific register commands, the flag commands, and the vector 
  1643. commands. 
  1644.  
  1645. In many cases, a command description will apply to a set of commands. For 
  1646. example, the commands V1, V2, ..., V9 are described under the command format 
  1647. "V1-V9." 
  1648.  
  1649.  
  1650. ΓòÉΓòÉΓòÉ 12.1. AX BX CX DX AH AL BH BL CH CL DH DL EAX EBX ECX EDX - General Register ΓòÉΓòÉΓòÉ
  1651.  
  1652.  Purpose:  Alters the contents of the specified processor register. 
  1653.  
  1654.  Format:   reg [= expr] 
  1655.  
  1656.            reg          Any of AX, BX, CX, DX, AH, AL, BH, BL, CH, CL, DH, DL, 
  1657.                         EAX, EBX, ECX, or EDX. 
  1658.  
  1659.            expr         Any ASDT32 expression. 
  1660.  
  1661.  Examples: AX = 13B 
  1662.  
  1663.            Places '013B'x into the AX register. 
  1664.  
  1665.            CX = V1 + BX - 2 
  1666.  
  1667.            Places the sum of the contents of variable V1, the BX register, and 
  1668.            -2 into the CX register. 
  1669.  
  1670.            DX = DS 
  1671.  
  1672.            Copies the contents of the DS register into the DX register. 
  1673.  
  1674.            CL = DH 
  1675.  
  1676.            Copies the contents of the DH register into the CL register. 
  1677.  
  1678.            EAX = 12345678 
  1679.  
  1680.            Places the value '12345678'x into the EAX register. 
  1681.  
  1682.  Remarks:  You can alter the general registers (EAX, EBX, ECX, and EDX) in 
  1683.            their entirety or as 16-bit or as 8-bit registers (AX-DX, AL-DL, and 
  1684.            AH-DH). 
  1685.  
  1686.            ASDT32 uses only the least significant 16 bits or 8 bits that result 
  1687.            from an expression evaluation to set a 16-bit or 8-bit register. 
  1688.            ASDT32 truncates any additional bits and displays a warning message. 
  1689.  
  1690.            A null operand sets the register to zero. 
  1691.  
  1692.  
  1693. ΓòÉΓòÉΓòÉ 12.2. CS DS ES FS GS SS - Selector Register ΓòÉΓòÉΓòÉ
  1694.  
  1695.  Purpose:  Alters the contents of the specified selector register. 
  1696.  
  1697.  Format:   reg [= expr] 
  1698.  
  1699.            reg          Any of CS, DS, ES, FS, GS, or SS. 
  1700.  
  1701.            expr         Any ASDT32 expression. 
  1702.  
  1703.  Examples: CS = 1C42 
  1704.  
  1705.            Places the value '1C42'x into the CS register. 
  1706.  
  1707.            ES = SS 
  1708.  
  1709.            Copies the contents of the SS register into the ES register. 
  1710.  
  1711.            FS = XS 
  1712.  
  1713.            Copies the contents of the XS selector register variable into the FS 
  1714.            register. 
  1715.  
  1716.  Remarks:  To save and restore selector register contents, use the XS selector 
  1717.            register variable. ASDT32 treats XS just like a selector register. 
  1718.  
  1719.            Updating the CS register also updates the EX and LC displays. 
  1720.  
  1721.            A null operand sets the selector register to zero. 
  1722.  
  1723.  
  1724. ΓòÉΓòÉΓòÉ 12.3. SI DI SP BP ESI EDI ESP EBP - Specific Register ΓòÉΓòÉΓòÉ
  1725.  
  1726.  Purpose:  Alters the contents of the specified processor register. 
  1727.  
  1728.  Format:   reg [= expr] 
  1729.  
  1730.            reg          Any of SI, DI, SP, BP, ESI, EDI, ESP, OR EBP. 
  1731.  
  1732.            expr         Any ASDT32 expression. 
  1733.  
  1734.  Examples: BP = 13B 
  1735.  
  1736.            Places '013B'x into the BP register. 
  1737.  
  1738.            SI = V1 + BX - 2 
  1739.  
  1740.            Places the sum of the contents of variable V1, the BX register, and 
  1741.            -2 into the SI register. 
  1742.  
  1743.            ESP = M7 
  1744.  
  1745.            Places the contents of variable M7 into the ESP register. 
  1746.  
  1747.  Remarks:  ASDT32 uses only the least significant 16 bits that result from an 
  1748.            expression evaluation to set a 16-bit register. ASDT32 truncates any 
  1749.            additional bits and displays a warning message. 
  1750.  
  1751.            A null operand sets the register to zero. 
  1752.  
  1753.  
  1754. ΓòÉΓòÉΓòÉ 12.4. FL EFL AF CF DF IF LF NF OF PF RF SF TF VF ZF - Eflags Register ΓòÉΓòÉΓòÉ
  1755.  
  1756.  Purpose:  Alters the contents of the processor eflags register. 
  1757.  
  1758.  Format:   flag [= expr] 
  1759.  
  1760.            flag         Any of FL, EFL, AF, CF, DF, IF, LF, NF, OF, PF, RF, SF, 
  1761.                         TF, VF, or ZF. 
  1762.  
  1763.            expr         Any ASDT32 expression. 
  1764.  
  1765.  Examples: CF = 0 
  1766.  
  1767.            Sets the carry flag bit to '0'b. 
  1768.  
  1769.            EFL = 00002246 
  1770.  
  1771.            Sets the eflags register to '00002246'x. 
  1772.  
  1773.  Remarks:  The EFL command is used to alter the contents of the entire eflags 
  1774.            register.  When using the FL command the operand is evaluated, and 
  1775.            the least significant 16 bits of the evaluation are placed into the 
  1776.            FL register. ASDT32 truncates any additional bits and displays a 
  1777.            warning message. 
  1778.  
  1779.            A null operand sets the entire register to zero. 
  1780.  
  1781.            The remaining commands are used to alter individual bits within the 
  1782.            eflags register. If the command operand is null or evaluates to 
  1783.            zero, ASDT32 sets the flag bit to zero;  otherwise, it sets the flag 
  1784.            bit to one. 
  1785.  
  1786.  
  1787. ΓòÉΓòÉΓòÉ 12.5. IP EIP - Instruction Pointer Register ΓòÉΓòÉΓòÉ
  1788.  
  1789.  Purpose:  Alters the contents of the instruction pointer, updates the EX 
  1790.            variable, and updates the LC variable if appropriate. 
  1791.  
  1792.  Format:   reg [= expr] 
  1793.  
  1794.            reg          Either of IP or EIP. 
  1795.  
  1796.            expr         Any ASDT32 expression. 
  1797.  
  1798.  Examples: IP = 13B 
  1799.  
  1800.            ASDT32 sets the variable IP to '013B'x. 
  1801.  
  1802.            EIP = 1234513B 
  1803.  
  1804.            ASDT32 sets the variable EIP to '1234513B'x. 
  1805.  
  1806.            If the CO variable has any value other than null, ASDT32 tries to 
  1807.            maintain the following relationship: 
  1808.  
  1809.            CO:LC = CS:EIP 
  1810.  
  1811.            This lets you think in terms of your assembly listing offsets. 
  1812.  
  1813.  Remarks:  ASDT32 uses only the least significant 16 bits that result from an 
  1814.            expression evaluation when you set the IP. ASDT32 truncates any 
  1815.            additional bits and displays a warning message. 
  1816.  
  1817.            Updating the EIP register also updates the EX and LC displays. 
  1818.  
  1819.            A null operand sets the EIP to zero. 
  1820.  
  1821.  
  1822. ΓòÉΓòÉΓòÉ 12.6. AS - ASCII ΓòÉΓòÉΓòÉ
  1823.  
  1824.  Purpose:  Changes the current character translation to ASCII. 
  1825.  
  1826.  Format:   AS 
  1827.  
  1828.  Examples: AS 
  1829.  
  1830.            All characters are displayed in ASCII format. 
  1831.  
  1832.  Remarks:  Changes the characters displayed in the right side of the memory 
  1833.            area and the interpretation of the Code Origin CSECT name. 
  1834.  
  1835.            Initially, the screen is in ASCII format. Choices are ASCII and 
  1836.            EBCDIC. See EB - EBCDIC for the EBCDIC command. 
  1837.  
  1838.  
  1839. ΓòÉΓòÉΓòÉ 12.7. CA - Color Attributes ΓòÉΓòÉΓòÉ
  1840.  
  1841.  Purpose:  Sets the specified color attribute to the given value. 
  1842.  
  1843.  Format:   CA [= term value] 
  1844.  
  1845.            term         one of the following: 
  1846.  
  1847.                         N            Normal attribute. 
  1848.  
  1849.                         F            Fixed attribute. 
  1850.  
  1851.                         H            Highlight attribute. 
  1852.  
  1853.                         R            Reverse attribute. 
  1854.  
  1855.            value        The hexadecimal color code. The range of the number is 
  1856.                         '00'x to 'FF'x where the first higit describes the 
  1857.                         background color and the second higit describes the 
  1858.                         character color. 
  1859.  
  1860.  Examples: CA N 07 
  1861.  
  1862.            ASDT32 sets the normal attribute to white on black. 
  1863.  
  1864.            CA H 4F 
  1865.  
  1866.            ASDT32 sets the highlight attribute to high intensity white on red. 
  1867.  
  1868.            CA R 71 
  1869.  
  1870.            ASDT32 sets the reverse attribute to blue on white. 
  1871.  
  1872.            CA 
  1873.  
  1874.            ASDT32 sets the normal, fixed, highlight, and reverse attributes to 
  1875.            their default values. 
  1876.  
  1877.  Remarks:  The CA command has no function when ASDT32 is on a monochrome 
  1878.            display. 
  1879.  
  1880.            Defaults:  normal screen text is defaulted to high intensity white 
  1881.            on blue ('1F'x), fixed screen text is defaulted to light magenta on 
  1882.            blue ('1D'x), highlighted text defaults to yellow on blue ('1E'x), 
  1883.            and reverse video text is red on white ('74'x). 
  1884.  
  1885.            The majority of the ASDT32 screen is in normal text. Fixed 
  1886.            attributes usually denote items that the user can not modify such as 
  1887.            the text "EAX:" on the first line of the ASDT32 screen. Highlighting 
  1888.            is used to signal items such as an active breakpoint or the code 
  1889.            origin name. Reverse video is used to signal events such as a 
  1890.            breakpoint encountered. 
  1891.  
  1892.            Make sure you do not set a character color equal to its background 
  1893.            color;  parts of the screen will be impossible to read if this 
  1894.            occurs. If this happens for all three of the normal, fixed, and 
  1895.            highlighting attributes, the screen will go blank, but ASDT32 will 
  1896.            still be functioning. To read the screen again, type CA and enter it 
  1897.            even though you can't see it. This resets ASDT32's color attributes 
  1898.            to their default values. 
  1899.  
  1900.            The following chart shows the available colors and their numbers: 
  1901.  
  1902.                       Number     Color           Number     Color
  1903.                       ------     -----           ------     -----
  1904.                          0       Black              8       Gray
  1905.                          1       Blue               9       Light Blue
  1906.                          2       Green              A       Light Green
  1907.                          3       Cyan               B       Light Cyan
  1908.                          4       Red                C       Light Red
  1909.                          5       Magenta            D       Light Magenta
  1910.                          6       Brown              E       Yellow
  1911.                          7       White              F       High intensity White
  1912.  
  1913.  
  1914. ΓòÉΓòÉΓòÉ 12.8. CB - Complex Breakpoint ΓòÉΓòÉΓòÉ
  1915.  
  1916.  Purpose:  Sets an active breakpoint as a complex breakpoint with optional 
  1917.            condition and count, displays the current condition and count, or 
  1918.            displays all complex breakpoints. 
  1919.  
  1920.  Format:   CB [ bkpt ] [ cond ] , [ count ] 
  1921.  
  1922.            bkpt         Any ASDT32 breakpoint (V1-V9 or S1-S9) that is active 
  1923.                         on the current ASDT32 display screen. 
  1924.  
  1925.            cond         An expression for a condition to be satisfied before 
  1926.                         ASDT32 takes the breakpoint. 
  1927.  
  1928.            count        Any expression for the number of times for ASDT32 to 
  1929.                         hit the breakpoint before it takes the breakpoint. 
  1930.  
  1931.  Examples: CB S1 AX = 3 , 10 
  1932.  
  1933.            Sets S1 as a complex breakpoint. The condition to be met is for AX 
  1934.            to equal three, and ASDT32 will take the breakpoint the sixteenth 
  1935.            time this occurs at the S1 breakpoint's address. 
  1936.  
  1937.            CB V3 ES:EDI <> DS:ESI 
  1938.  
  1939.            Sets V3 as a complex breakpoint. The condition to be met is for the 
  1940.            contents of ES:EDI not to equal the contents of DS:ESI. ASDT32 will 
  1941.            take the breakpoint the first time this occurs at the S1 
  1942.            breakpoint's address. 
  1943.  
  1944.            CB 
  1945.  
  1946.            Displays all eighteen breakpoints for the current ASDT32 display 
  1947.            screen and shows complex breakpoints with their conditions, counts, 
  1948.            and occurrence counts. 
  1949.  
  1950.            Note:  This is a method by which you can examine your V1-V9 scratch 
  1951.            pad variables.  ASDT32 no longer displays V1-V9 at the top of its 
  1952.            main screen. 
  1953.  
  1954.            CB V8 
  1955.  
  1956.            Displays the condition and count fields for breakpoint V8 on the 
  1957.            command line so you can edit them and reenter them. Also displays 
  1958.            the current occurrence count for V8 on the message line. 
  1959.  
  1960.  Remarks:  You can create a complex breakpoint from any active breakpoint. For 
  1961.            introductory information about complex breakpoints, see Setting 
  1962.            Breakpoints. 
  1963.  
  1964.            You use the CB command to create a new complex breakpoint, modify an 
  1965.            existing complex breakpoint, return a complex breakpoint to a simple 
  1966.            breakpoint, and to display all of the complex breakpoints for the 
  1967.            active ASDT32 screen (D1-D9). 
  1968.  
  1969.            If you issue the CB command without any operands, ASDT32 replaces 
  1970.            the ASDT32 screen with a complex breakpoint window. This display 
  1971.            replaces the ASDT32 screen with complex (and simple) breakpoint 
  1972.            information. 
  1973.  
  1974.            The complex breakpoint window displays each possible complex 
  1975.            breakpoint (V1-V9 and S1-S9). For each active breakpoint that is 
  1976.            complex, the address, condition, count, and occurrence count are all 
  1977.            displayed. For each active simple breakpoint, the address is 
  1978.            displayed. 
  1979.  
  1980.            This screen is a "browse" window that does not allow you to edit. 
  1981.            Pressing any key restores the main ASDT32 screen. 
  1982.  
  1983.  
  1984. ΓòÉΓòÉΓòÉ 12.9. CG - Configuration ΓòÉΓòÉΓòÉ
  1985.  
  1986.  Purpose:  Define the display configuration to use. 
  1987.  
  1988.  Format:   CG [= term] 
  1989.  
  1990.            term         one of the following: 
  1991.  
  1992.                         null         reset to single screen. 
  1993.  
  1994.                         RT n         use COMn (n=1 or 2) to communicate with a 
  1995.                                      remote terminal. 
  1996.  
  1997.  Examples: CG RT 1 
  1998.  
  1999.            Causes ASDT32 to write its screen to a remote terminal using the 
  2000.            COM1 port. 
  2001.  
  2002.            CG 
  2003.  
  2004.            Changes ASDT32 to the primary display. 
  2005.  
  2006.  Remarks:  The CG RT n command switches ASDT32 to a remote terminal that you 
  2007.            have hooked up via the COMn port (n=1 or 2). It is up to you to set 
  2008.            the baud rate or any other communication parameters as ASDT32 only 
  2009.            writes to the COMn port.  It is useful to place a command like MODE 
  2010.            COM1:19200,E,7,1 in your STARTUP.CMD even though you may change the 
  2011.            mode under OS/2 at any time. 
  2012.  
  2013.            The use of a remote terminal can be set at ASDT32 installation time 
  2014.            with the /R=n option as well.  With this option, you will have 
  2015.            ASDT32 using the remote terminal when it gains control. Issuing the 
  2016.            CG (null) command will always cause ASDT32 to collapse back to the 
  2017.            display of your application. 
  2018.  
  2019.  
  2020. ΓòÉΓòÉΓòÉ 12.10. CM - Compare Memory ΓòÉΓòÉΓòÉ
  2021.  
  2022.  Purpose:  Compares two memory blocks and displays the differences between 
  2023.            them. 
  2024.  
  2025.  Format:   CM addr1 , addr2 , length 
  2026.  
  2027.            addr1        Any ASDT32 expression for the starting address of one 
  2028.                         memory block. 
  2029.  
  2030.            addr2        Any ASDT32 expression for the starting address of the 
  2031.                         other memory block. 
  2032.  
  2033.            length       Any ASDT32 expression for the number of bytes to 
  2034.                         compare. 
  2035.  
  2036.  Examples: CM SS:BP , SS:BP+100 , 100 
  2037.  
  2038.            Compares 256 bytes from the location specified by SS:BP with the 
  2039.            same number of bytes from the location specified by SS:BP+'0100'x. 
  2040.            The first 112 bytes of each area are shown on the screen, and 
  2041.            mismatches are highlighted in the first area. The function keys 
  2042.            described below are active. 
  2043.  
  2044.            CM 12345678,78236541,16. 
  2045.  
  2046.            Compares 16 bytes from linear address '12345678'x with the same 
  2047.            number of bytes from linear address '78236541'x. The function keys 
  2048.            described below are active. 
  2049.  
  2050.  Remarks:  ASDT32 displays the two compared areas on the screen beginning at 
  2051.            addresses L1 and L8. Differences between the two areas are 
  2052.            highlighted in the first area. Seven lines of each memory area are 
  2053.            shown on the screen, and the number of mismatches on the screen and 
  2054.            in the entire area are shown on the message line. 
  2055.  
  2056.            You can scroll the window up and down in the compared areas. ASDT32 
  2057.            recognizes the following function keys in Compare Memory mode: 
  2058.  
  2059.            Esc                      Returns to normal ASDT32 operation and 
  2060.                                     restores the primary window of the screen. 
  2061.  
  2062.            Home                     Scrolls the compare window up to the 
  2063.                                     beginning of the compare field. 
  2064.  
  2065.            PgUp                     Scrolls the compare window up one screen 
  2066.                                     (seven lines). PgUp takes no action if the 
  2067.                                     first byte of the compare field is 
  2068.                                     displayed. 
  2069.  
  2070.            PgDn                     Scrolls the compare window down one screen 
  2071.                                     (seven lines). PgDn takes no action if the 
  2072.                                     last byte of compared memory is displayed 
  2073.                                     at the beginning of the display area. 
  2074.  
  2075.            Ctrl-Left Arrow          Scrolls the compare window up one byte. 
  2076.                                     Ctrl-Left Arrow takes no action if the 
  2077.                                     first byte of the compare field is 
  2078.                                     displayed. 
  2079.  
  2080.            Ctrl-Right Arrow         Scrolls the compare window down one byte. 
  2081.                                     Ctrl-Right Arrow takes no action if the 
  2082.                                     last byte of compared memory is displayed 
  2083.                                     at the beginning of the display area. 
  2084.  
  2085.  
  2086. ΓòÉΓòÉΓòÉ 12.11. CO - Code Origin ΓòÉΓòÉΓòÉ
  2087.  
  2088.  Purpose:  Tells ASDT32 your module's starting address so that ASDT32 can 
  2089.            compute and display a Location Counter which corresponds to your 
  2090.            assembly listing. 
  2091.  
  2092.  Format:   CO [= expr] 
  2093.  
  2094.            expr         Any ASDT32 expression. 
  2095.  
  2096.  Examples: CO = CS:0426 
  2097.  
  2098.            indicates that your module begins at offset '0426'x from your 
  2099.            program's code segment. ASDT32 displays the CO as "+00000426." 
  2100.  
  2101.            CO = CS:200 
  2102.  
  2103.            indicates that your module begins at offset '0200'x from your 
  2104.            program's code segment. ASDT32 displays the CO as "+00000200." 
  2105.  
  2106.  Remarks:  The CO facility enables you to think in terms of your assembly 
  2107.            listing without having to do relocation arithmetic. 
  2108.  
  2109.            ASDT32 displays the Code Origin in a relative address format if 
  2110.            possible. Relative addresses are designated with "+" for CS. 
  2111.  
  2112.            If the CO is set with any of the four addressing schemes, ASDT32 
  2113.            will show the CO as relative to the CS if the address resolves to 
  2114.            within 4K bytes (after) the CS. In this case, the CO will be 
  2115.            displayed as an offset preceded by "+."  If not, ASDT32 will display 
  2116.            it as a selector:offset or an 8-higit linear or physical address. 
  2117.  
  2118.            See Setting Breakpoints for more information. 
  2119.  
  2120.            If the CSECT begins with a JUMP instruction around the name of the 
  2121.            CSECT as shown below, the name will be displayed following the CO 
  2122.            display. 
  2123.  
  2124.                         ASDT32SMP CSECT
  2125.                                   J     LABEL1
  2126.                                   DC    AL1(10)
  2127.                                   DC    S'ASDT32SMP '
  2128.                         LABEL1    DS    0C
  2129.                                 . . .
  2130.  
  2131.            A null operand sets the CO variable to null. 
  2132.  
  2133.            Whenever CO is set, ASDT32 looks to see if the memory location 
  2134.            specified contains a short jump instruction.  If this instruction is 
  2135.            found, ASDT32 assumes that the CSECT name follows 3 bytes further. 
  2136.            ASDT32 will then display this CSECT name (up to 8 characters) in 
  2137.            ASCII or EBCDIC depending on the current display mode. 
  2138.  
  2139.  
  2140. ΓòÉΓòÉΓòÉ 12.12. CP - Copy Memory ΓòÉΓòÉΓòÉ
  2141.  
  2142.  Purpose:  Copies one memory block to another. 
  2143.  
  2144.  Format:   CP addr1 , addr2 , length 
  2145.  
  2146.            addr1        Any ASDT32 expression for the starting address of the 
  2147.                         source memory block. 
  2148.  
  2149.            addr2        Any ASDT32 expression for the starting address of the 
  2150.                         target memory block. 
  2151.  
  2152.            length       Any ASDT32 expression for the number of bytes to copy. 
  2153.  
  2154.  Examples: CP DS:100 , DS:200 , 30. 
  2155.  
  2156.            Copies 30 bytes from the location specified by DS:100 to the 
  2157.            location specified by DS:200. 
  2158.  
  2159.            CP L1 , L1+1 , 100 
  2160.  
  2161.            Makes 256 copies of the character at the memory location addressed 
  2162.            by L1 filling the memory bytes which start at L1+1. This can be used 
  2163.            as a "fill memory" function. 
  2164.  
  2165.  Remarks:  The Copy Memory function allows the source block and target block to 
  2166.            overlap, so you could make changes that you don't expect if you 
  2167.            specify blocks that overlap. 
  2168.  
  2169.            An easy way to fill a block of memory with a specific character is 
  2170.            to set L1 to point to the first byte, change the first byte to the 
  2171.            character wanted, and then issue the command "CP L1,L1+1,length" 
  2172.            where you specify the number of copies wanted for the length field. 
  2173.  
  2174.            You may wish to compare two memory blocks after one has been copied 
  2175.            to the other. See CM - Compare Memory for the Compare Memory 
  2176.            command. 
  2177.  
  2178.  
  2179. ΓòÉΓòÉΓòÉ 12.13. CT - Step Count ΓòÉΓòÉΓòÉ
  2180.  
  2181.  Purpose   Sets the default step count (the number of user program instructions 
  2182.            to execute with the ST command). 
  2183.  
  2184.  Format    CT [= expr] 
  2185.  
  2186.            expr         Any ASDT32 expression. 
  2187.  
  2188.  Examples: CT 8 
  2189.  
  2190.            ASDT32 sets the step count to eight. 
  2191.  
  2192.            CT 
  2193.  
  2194.            ASDT32 sets the step count to one. 
  2195.  
  2196.  Remarks:  ASDT32 uses only the least significant 16 bits that result from an 
  2197.            expression evaluation to set the CT. ASDT32 truncates any additional 
  2198.            bits and displays a warning message. 
  2199.  
  2200.            When you enter the ST command without an operand, ASDT32 gets the 
  2201.            number of user program instructions to be executed from the CT 
  2202.            variable. 
  2203.  
  2204.            If the operand is omitted from the CT command, ASDT32 sets the step 
  2205.            count to one. 
  2206.  
  2207.  
  2208. ΓòÉΓòÉΓòÉ 12.14. DA - Disassemble AL86 ΓòÉΓòÉΓòÉ
  2209.  
  2210.  Purpose:  Changes the current disassemble mode to IBM AL86 format. 
  2211.  
  2212.  Format:   DA 
  2213.  
  2214.  Examples: DA 
  2215.  
  2216.            Instructions will be disassembled using IBM AL86 mnemonics. 
  2217.  
  2218.  Remarks:  Disassembles the instructions pointed to by CS:EIP using IBM AL86 
  2219.            mnemonics. 
  2220.  
  2221.            Initially, all disassembled instructions are shown in IBM AL86 
  2222.            mnemonics. Choices are IBM AL86 mnemonics (DA) or Intel (MASM) 
  2223.            mnemonics (DM). See DM - Disassemble MASM (Intel) for the DM 
  2224.            command. 
  2225.  
  2226.  
  2227. ΓòÉΓòÉΓòÉ 12.15. DK - Define Key ΓòÉΓòÉΓòÉ
  2228.  
  2229.  Purpose:  Sets up, changes, or removes a function key definition. 
  2230.  
  2231.  Format:   DK [key [I or D cmds]] 
  2232.  
  2233.            key          The key to be defined (F1, F2, ..., F10, S-F1, S-F2, 
  2234.                         ..., S-F10, C-F1, C-F2, ..., C-F10, A-F1, A-F2, ..., 
  2235.                         A-F10). 
  2236.  
  2237.            I            Place the commands on the command line and execute them 
  2238.                         immediately when the function key is pressed. 
  2239.  
  2240.            D            Place the commands on the command line when the 
  2241.                         function key is pressed but do not execute them. 
  2242.  
  2243.            cmds         A string of valid ASDT32 commands entered as you would 
  2244.                         enter them on the command line. This string may contain 
  2245.                         semicolons, and the first command may begin with a 
  2246.                         slash. 
  2247.  
  2248.  Examples: DK S-F9 I DM 
  2249.  
  2250.            ASDT32 sets the Shift-F9 (S-F9) key to the string "DM." Each time 
  2251.            the S-F9 key is pressed, ASDT32 shows disassembled instructions in 
  2252.            Intel (MASM) mnemonics. 
  2253.  
  2254.            DK A-F5 D DA 
  2255.  
  2256.            ASDT32 sets the Alt-F5 (A-F5) key to the string "DA." Each time the 
  2257.            A-F5 key is pressed, ASDT32 puts this string on the command line. 
  2258.  
  2259.            DK C-F1 
  2260.  
  2261.            ASDT32 removes any command definition for the Ctrl-F1 (C-F1) key. 
  2262.            You do not use the I/D keyword when removing a key definition. 
  2263.  
  2264.            DK 
  2265.  
  2266.            ASDT32 displays the current settings of all of the function keys. 
  2267.  
  2268.  Remarks:  ASDT32 supports the function keys F1 through F10, shifted function 
  2269.            keys S-F1 through S-F10, controlled function keys C-F1 through 
  2270.            C-F10, and alternate function keys A-F1 through A-F10. This provides 
  2271.            a total of 40 function keys. 
  2272.  
  2273.            ASDT32 provides default definitions for keys F1 through F10. You can 
  2274.            change these by redefining the key(s) you want to change. The 
  2275.            definitions are listed in Function Keys. If you want to redefine 
  2276.            existing keys or define additional ones, you can include DK commands 
  2277.            in the profile you invoke when you start ASDT32. 
  2278.  
  2279.            You must enter the I (immediate) or D (deferred) keyword when you 
  2280.            define a key. It is not required when you remove a key definition. 
  2281.  
  2282.            If you press a function key which has no definition, ASDT32 displays 
  2283.            a message and takes no other action. 
  2284.  
  2285.            ASDT32 maintains an 800-byte buffer for commands associated with 
  2286.            function keys. If you define many keys to be long commands, it is 
  2287.            possible to run out of room in the buffer. If this happens, ASDT32 
  2288.            will display a message, and you will not be able to make any 
  2289.            additional key definitions in the current ASDT32 session. You can 
  2290.            still use keys that are already defined and can redefine existing 
  2291.            keys. 
  2292.  
  2293.  
  2294. ΓòÉΓòÉΓòÉ 12.16. DM - Disassemble MASM (Intel) ΓòÉΓòÉΓòÉ
  2295.  
  2296.  Purpose:  Changes the current disassemble mode to the Intel (MASM) format. 
  2297.  
  2298.  Format:   DM 
  2299.  
  2300.  Examples: DM 
  2301.  
  2302.            Instructions will be disassembled using Intel (MASM) mnemonics. 
  2303.  
  2304.  Remarks:  Disassembles the instructions pointed to by CS:EIP using Intel 
  2305.            (MASM) mnemonics. 
  2306.  
  2307.            Initially, all disassembled instructions are shown in IBM AL86 
  2308.            mnemonics. Choices are IBM AL86 mnemonics (DA) or INTEL (MASM) 
  2309.            mnemonics (DM). See DA - Disassemble AL86 for the DA command. 
  2310.  
  2311.  
  2312. ΓòÉΓòÉΓòÉ 12.17. DW - Disassembly Window ΓòÉΓòÉΓòÉ
  2313.  
  2314.  Purpose:  Switches to Disassembly Window mode. 
  2315.  
  2316.  Format:   DW [value] 
  2317.  
  2318.            value        The line number (L1-M6) at which to start the 
  2319.                         disassembly window. 
  2320.  
  2321.  Examples: DW 
  2322.  
  2323.            ASDT32 switches the edit portion of the ASDT32 display to a 
  2324.            disassembly window and sets the primary window mode to disassembly. 
  2325.            If a secondary memory window is displayed, ASDT32 removes it. 
  2326.  
  2327.            DW M1 
  2328.  
  2329.            ASDT32 switches lines M1 through M6 of the ASDT32 display to show 
  2330.            disassembled instructions. The primary window mode of ASDT32 is not 
  2331.            changed. 
  2332.  
  2333.  Remarks:  The disassembly window displays disassembled instructions in either 
  2334.            text or hexadecimal format.  You can toggle between these two modes 
  2335.            of display by using the Ins key while your cursor is in the 
  2336.            disassembly window.  The toggle action pertains to the instructions 
  2337.            that belong to the segment in which the cursor lies. 
  2338.  
  2339.            ASDT32 always shows the address of a given line's instruction. If 
  2340.            applicable, ASDT32 also displays the operand of the instruction. 
  2341.  
  2342.            ASDT32 displays the primary window mode at the beginning of line 8 
  2343.            of the ASDT32 screen. If the primary window is disassembly, then L1 
  2344.            and the following disassembly lines track the current CS:EIP as your 
  2345.            program runs. ASDT32 also tracks CS:EIP for a secondary disassembly 
  2346.            window. Initially, the primary window is disassembly. 
  2347.  
  2348.            See MW - Memory Window for the MW command, which changes to a memory 
  2349.            window. See NW - Next Window for the NW command, which switches 
  2350.            among all of the ASDT32 windows. 
  2351.  
  2352.  
  2353. ΓòÉΓòÉΓòÉ 12.18. D1-D9 - Select Display ΓòÉΓòÉΓòÉ
  2354.  
  2355.  Purpose:  Selects or sets one of the nine ASDT32 display screens. 
  2356.  
  2357.  Format:   Dn [Ds or ON or OFF] 
  2358.  
  2359.            n            Any of 1-9. Indicates which screen is being selected 
  2360.                         (D1-D9). 
  2361.  
  2362.            s            Any of 1-9. Indicates which screen is being saved 
  2363.                         (D1-D9). 
  2364.  
  2365.            ON           Activates the breakpoints for Dn. 
  2366.  
  2367.            OFF          Suspends the breakpoints for Dn. 
  2368.  
  2369.  Examples: D4 OFF 
  2370.  
  2371.            All the active breakpoints for screen D4 are suspended. 
  2372.  
  2373.            D5 
  2374.  
  2375.            Screen D5 is selected as the active ASDT32 screen. 
  2376.  
  2377.            D2 = D1 
  2378.  
  2379.            The contents of screen D1 are saved in screen D2. 
  2380.  
  2381.  Remarks:  These variables are common to all nine displays:  registers, memory, 
  2382.            M7-M9, and step count. 
  2383.  
  2384.            These variables are unique to each display:  V1-V9, S1-S9, L1-L9, 
  2385.            M1-M6, and CO. 
  2386.  
  2387.            After ASDT32 has finished executing a block of user instructions, it 
  2388.            will display the screen containing the active breakpoint that 
  2389.            terminated the execution. If more than one screen contains that same 
  2390.            active breakpoint, ASDT32 will display the lowest numbered screen. 
  2391.  
  2392.            The breakpoints of a screen (e.g., Dy) do not have to be activated 
  2393.            when ASDT32 is displaying another screen (e.g., Dx) unless they had 
  2394.            been deactivated previously; that is, when you switch screens from 
  2395.            Dy to Dx, Dy's breakpoints remain active. 
  2396.  
  2397.            Note:  When you issue a Dn ON command, the breakpoints for the Dn 
  2398.            screen are associated with the current process and thread ids.  This 
  2399.            was implemented so that you could reactivate breakpoints for an 
  2400.            entire screen whose breakpoints had become deactivated due to the 
  2401.            termination of a thread or process. This is different from the 
  2402.            results that you would get if you issued Sn ON commands for the 
  2403.            various deactivated breakpoints on the current screen. See S1-S9 - 
  2404.            Set Breakpoints S1-S9 to learn how reactivating breakpoints with the 
  2405.            Sn ON command differs from the Dn ON command. 
  2406.  
  2407.            See Display Screens and Breakpoints for a discussion of how to use 
  2408.            the nine ASDT32 display screens to your advantage. 
  2409.  
  2410.  
  2411. ΓòÉΓòÉΓòÉ 12.19. EB - EBCDIC ΓòÉΓòÉΓòÉ
  2412.  
  2413.  Purpose:  Changes the current character translation to EBCDIC. 
  2414.  
  2415.  Format:   EB 
  2416.  
  2417.  Examples: EB 
  2418.  
  2419.            All characters are displayed in EBCDIC format. 
  2420.  
  2421.  Remarks:  Changes the characters displayed in the right side of the memory 
  2422.            area and the interpretation of the Code Origin CSECT name that may 
  2423.            be displayed. 
  2424.  
  2425.            Initially, the screen is in ASCII format. Choices are ASCII and 
  2426.            EBCDIC. See AS - ASCII for the ASCII command. 
  2427.  
  2428.  
  2429. ΓòÉΓòÉΓòÉ 12.20. EP - Execute Profile ΓòÉΓòÉΓòÉ
  2430.  
  2431.  Purpose:  Executes a profile containing a series of ASDT32 commands.  This 
  2432.            profile must have been read in by ASDT32 during the initialization 
  2433.            phase. 
  2434.  
  2435.  Format:   EP 
  2436.  
  2437.  Examples: EP 
  2438.  
  2439.            Executes commands from ASDT32's profile storage area. 
  2440.  
  2441.  Remarks:  ASDT32 does not support disk I/O after the OS/2 initialization 
  2442.            phase. Hence, you must have ASDT32 read your profile in during this 
  2443.            initialization phase.  ASDT32 stores your profile in its internal 
  2444.            data area where your commands can be retrieved and executed with the 
  2445.            EP command. 
  2446.  
  2447.            To have ASDT32 read in your profile, you need to specify the fully 
  2448.            qualified profile name in your CONFIG.SYS file.  You can specify 
  2449.            ASDT32 parameters along with a profile name. See Installing ASDT32 
  2450.            for the syntax rules that allow you to specify a profile and ASDT32 
  2451.            parameters. 
  2452.  
  2453.            ASDT32 limits a profile to 1000 bytes.  This includes carriage 
  2454.            returns, line feeds, and end-of-file markers.  ASDT32 does not 
  2455.            recognize tabs and can not process commands that are greater than 76 
  2456.            characters in length (not including trailing blanks, carriage 
  2457.            return, and line feed). 
  2458.  
  2459.            Commands from a file are executed one at a time. If an invalid 
  2460.            command is encountered, the appropriate ASDT32 message is displayed, 
  2461.            and profile processing is aborted. 
  2462.  
  2463.            You can execute a profile that has been read in as often as you like 
  2464.            by reissuing the EP command. 
  2465.  
  2466.  
  2467. ΓòÉΓòÉΓòÉ 12.21. ET - Execute with Timing ΓòÉΓòÉΓòÉ
  2468.  
  2469.  Purpose:  Executes your program with a timing counter enabled.  ASDT32 informs 
  2470.            you how much time elapsed when it regains control. 
  2471.  
  2472.  Format    ET = expr [, adj] 
  2473.  
  2474.            expr         Any ASDT32 expression that defines the execution 
  2475.                         termination address. 
  2476.  
  2477.            adj          Any ASDT32 expression that defines the amount (in 
  2478.                         microseconds) of time with which to adjust that 
  2479.                         recorded by ASDT32. 
  2480.  
  2481.  Examples: ET M1 
  2482.  
  2483.            Executes with a timing counter from the current instruction up to 
  2484.            but not including the instruction at address M1. 
  2485.  
  2486.            ET CS:1F4D , 14 
  2487.  
  2488.            Executes with a timing counter from the current instruction up to 
  2489.            but not including the instruction at offset '1F4D'x.  ASDT32 will 
  2490.            adjust the time taken by 20 microseconds before reporting. 
  2491.  
  2492.  Remarks:  ASDT32 will introduce a time artifact over the interval measured due 
  2493.            to overhead.  This artifact is difficult to approximate, hence, you 
  2494.            are given the opportunity to supply the artifact value (in 
  2495.            microseconds). 
  2496.  
  2497.            A way for you to ascertain a good approximation for the environment 
  2498.            you find yourself in is to issue the ET EX command.  This will have 
  2499.            your program spin on the current instruction and ASDT32 report the 
  2500.            time taken for this zero-instruction event.  The time reported by 
  2501.            ASDT32 is all overhead.  A few runs of this should give you the 
  2502.            adjustment value necessary. 
  2503.  
  2504.            The time taken is reported on the ASDT32 message line when control 
  2505.            returns to ASDT32.  The value is given (in decimal) in microseconds. 
  2506.            Note that the adjustment value you supply as a parameter to ASDT32 
  2507.            will be interpreted as hexadecimal unless you terminate it with the 
  2508.            "." operator. 
  2509.  
  2510.            ASDT32's precision in the 10-microsecond range is good.  In the 
  2511.            microsecond range, it is suspect. Note that ASDT32 can now measure 
  2512.            intervals that take longer than 55 milliseconds.  If you want to see 
  2513.            this 55-millisecond rollover, interrupts must be enabled for some 
  2514.            time during this interval. 
  2515.  
  2516.            ASDT32 uses the S9 breakpoint for the terminating address specified. 
  2517.            ASDT32 will leave this breakpoint set for your inspection upon 
  2518.            return. If the address specified is not hit, you can check the value 
  2519.            in S9 the next time ASDT32 gains control. 
  2520.  
  2521.  
  2522. ΓòÉΓòÉΓòÉ 12.22. EX - Execute ΓòÉΓòÉΓòÉ
  2523.  
  2524.  Purpose:  Passes control of the processor to your program. 
  2525.  
  2526.  Format:   EX 
  2527.  
  2528.  Examples: EX 
  2529.  
  2530.            Gives control to your program, which begins executing at the current 
  2531.            CS:EIP. 
  2532.  
  2533.  Remarks:  Execution of your program begins at the point determined by the 
  2534.            combination of the CS and EIP registers. ASDT32 restores your 
  2535.            display screen and sets active breakpoints in your program before 
  2536.            execution begins. 
  2537.  
  2538.            Control is retained by OS/2 until ASDT32 receives an interrupt. When 
  2539.            ASDT32 regains control, you are shown the reason in the form of a 
  2540.            message or breakpoint highlight. ASDT32 saves your display screen 
  2541.            and removes the breakpoints from your program. 
  2542.  
  2543.            The processor registers and memory display reflect the processor 
  2544.            status at the time of the interrupt. If any breakpoints were 
  2545.            overlayed by execution of your program, the breakpoint display is 
  2546.            blinked to indicate that that breakpoint was not active for a 
  2547.            portion of your program execution. (This applies only to programs 
  2548.            running in a VDM session). 
  2549.  
  2550.            Note:  The first instruction of your program is single-stepped 
  2551.            before the breakpoints are inserted. This permits execution to begin 
  2552.            at the point of a breakpoint without stopping immediately. 
  2553.  
  2554.            ASDT32 sets function key F7 to the EX command on entry. 
  2555.  
  2556.  
  2557. ΓòÉΓòÉΓòÉ 12.23. F FA FC FE FX - Find, Find ASCII, Find CSECT, Find EBCDIC, Find Hex ΓòÉΓòÉΓòÉ
  2558.  
  2559.  Purpose:  Find character or hexadecimal strings in memory. 
  2560.  
  2561.  Format:   Ft [ string ] [ , s ] [ , hiaddr ] 
  2562.  
  2563.            t            Type of find (one of the following): 
  2564.  
  2565.                         null         current mode (ASCII, CSECT, hex, or 
  2566.                                      EBCDIC) 
  2567.  
  2568.                         A            ASCII 
  2569.  
  2570.                         C            CSECT 
  2571.  
  2572.                         E            EBCDIC 
  2573.  
  2574.                         X            Hex 
  2575.  
  2576.            string       The string to be found in memory. This string may be 
  2577.                         delimited by quotes (" "). 
  2578.  
  2579.            s            Search technique (one of the following): 
  2580.  
  2581.                         *            task search (LDT first then the GDT) 
  2582.  
  2583.                         expr         any ASDT32 expression that determines a 
  2584.                                      selector for the single segment to search. 
  2585.                                      If ", hiaddr" is specified, then this "s" 
  2586.                                      expression is interpreted as the lower 
  2587.                                      bound address of a system-wide search 
  2588.                                      (linear or physical) range. 
  2589.  
  2590.            hiaddr       any ASDT32 expression that is interpreted as the higher 
  2591.                         bound linear or physical address of a system-wide 
  2592.                         search range. 
  2593.  
  2594.  Examples: /FX 123E4 
  2595.  
  2596.            Does a repeat find of the '0123E4'x search argument throughout the 
  2597.            task's immediate segment register areas. 
  2598.  
  2599.            /FA buffer; L1 = FX 
  2600.  
  2601.            Does a repeat (task) find of the ASCII-string (buffer) and displays 
  2602.            memory beginning at the location where the string was found. 
  2603.  
  2604.            FE "Top of Data" , DS 
  2605.  
  2606.            Tries to find the EBCDIC-string (Top of Data) in memory beginning at 
  2607.            the start of the DS segment up to its segment limit. 
  2608.  
  2609.            FA " garbage dump ", * 
  2610.  
  2611.            Tries to find the ASCII-string ( garbage dump ) in memory using the 
  2612.            task search technique. 
  2613.  
  2614.            FC SINT3, CS 
  2615.  
  2616.            Tries to find the CSECT name (SINT3) in the current CS segment. 
  2617.  
  2618.            FC AINTHND, 0, 400000 
  2619.  
  2620.            Tries to find the CSECT name (AINTHND) in the system-wide address 
  2621.            range starting at linear address 0 and ending at linear address 4M. 
  2622.  
  2623.            FC AINTHND, 0!, 400000! 
  2624.  
  2625.            Tries to find the CSECT name (AINTHND) in the system-wide address 
  2626.            range starting at physical address 0 and ending at physical address 
  2627.            4M. 
  2628.  
  2629.            FC - 
  2630.  
  2631.            Tries to find the closest (previous) CSECT address relative to the 
  2632.            current CS and EIP address. 
  2633.  
  2634.  Remarks:  Task searching is employed for all finds until you specify some 
  2635.            selector, linear, or physical address expression after a comma. The 
  2636.            technique last used is employed in any repeat find. ASDT32 requires 
  2637.            that you use the same addressing scheme (linear or physical) for the 
  2638.            second expression as you use for the first in a system-wide search 
  2639.            technique (", s, hiaddr"). 
  2640.  
  2641.            If the string is found, the FX variable contains the address of the 
  2642.            string. If the string is not found, the FX variable remains as it 
  2643.            was before the search request. 
  2644.  
  2645.            Since the second character of the F command is a blank, at least one 
  2646.            blank must always follow the F command. It will operate in the 
  2647.            current character translation mode (ASCII, CSECT, hex, or EBCDIC). 
  2648.  
  2649.            Character strings may not include semicolons. Commas are special 
  2650.            characters and denote that either a task search indicator ("*"), a 
  2651.            selector expression, or a system-wide address range follows. (Note 
  2652.            that a system-wide address will include two commas.) If you want a 
  2653.            comma to be part of your string, enclose the string in quotes. 
  2654.  
  2655.            For strings without delimiting quotes, leading blanks are always 
  2656.            ignored yet trailing blanks are ignored only if there is no 
  2657.            delimiting comma present.  Every blank or comma (within the 
  2658.            enclosing quotes) is considered part of the search string when the 
  2659.            quotes are used. 
  2660.  
  2661.            For the F, FA, FC, and FE commands, the string may include upper or 
  2662.            lower case characters, numbers, special characters, and blanks. For 
  2663.            the FX command, the string may contain any of the 16 higits. 
  2664.  
  2665.            If an odd number of higits are entered for the FX command, the 
  2666.            string is padded on the left with one zero higit. 
  2667.  
  2668.            The length of a search string is limited by the command line length 
  2669.            except when ASDT32 is searching for a hex string.  ASDT32 limits hex 
  2670.            string searches to 8-higits (4 bytes). The verification message will 
  2671.            only display the first seven characters of the search string. 
  2672.  
  2673.            Searching starts at the beginning of the LDT's first valid data or 
  2674.            code descriptor selector (task search), at the beginning of the most 
  2675.            recently specified selector (segment search), or at the beginning of 
  2676.            a linear or physical address range (system-wide search) unless a 
  2677.            repeat find is done. For repeat find, the search begins where the 
  2678.            previous search terminated. Task searching continues on through the 
  2679.            GDT once the LDT has been exhausted. If ASDT32 discovers a 
  2680.            discontinuity in a linear address search range, it terminates the 
  2681.            search at that point of the system-wide searching. This means that 
  2682.            if a particular address in your linear address search range is not 
  2683.            defined by any page table or is paged out, ASDT32 will not continue 
  2684.            the search. 
  2685.  
  2686.            The FC command will have ASDT32 search only those descriptor 
  2687.            selectors that reference valid code segments (when system-wide 
  2688.            search is not being used). If the CSECT is found, ASDT32 will set 
  2689.            the CO variable if a jump ('EB'x) instruction is discovered three 
  2690.            bytes prior to the CSECT address.  See CO - Code Origin for more 
  2691.            information about ASDT32's usage of the code origin variable. 
  2692.  
  2693.            FC - can be used to have ASDT32 search for a CSECT name previous to 
  2694.            the current CS:EIP address.  Repeated use of this command will have 
  2695.            ASDT32 continue hunting for the next previous CSECT name within the 
  2696.            CS address space (wrapping at offset 0 and the CS limit). 
  2697.  
  2698.            If the search string is omitted, the previous string will be used. 
  2699.            The repeat find function may be performed by adding a slash to the 
  2700.            beginning of any of the find commands or by using the F5 key. 
  2701.  
  2702.            ASDT32 sets function key F5 to the FX command on entry. 
  2703.  
  2704.  
  2705. ΓòÉΓòÉΓòÉ 12.24. HP - Help ΓòÉΓòÉΓòÉ
  2706.  
  2707.  Purpose:  Display information about ASDT32. 
  2708.  
  2709.  Format:   HP 
  2710.  
  2711.  Examples: HP 
  2712.  
  2713.            Displays a screen containing all the ASDT32 commands in logical 
  2714.            groupings. 
  2715.  
  2716.  Remarks:  The help screen temporarily replaces the ASDT32 screen. Press any 
  2717.            key to return to the ASDT32 screen. 
  2718.  
  2719.            ASDT32 sets function key F1 to the HP command on entry. 
  2720.  
  2721.  
  2722. ΓòÉΓòÉΓòÉ 12.25. HT - Halt Thread ΓòÉΓòÉΓòÉ
  2723.  
  2724.  Purpose:  To suspend the current thread and exit ASDT32 to OS/2. 
  2725.  
  2726.  Format:   HT 
  2727.  
  2728.  Examples: HT 
  2729.  
  2730.            Suspends the current thread and returns your session to OS/2. 
  2731.  
  2732.  Remarks:  HT should be used primarily to scan other screen groups.  The most 
  2733.            popular subset of this action is to view your host session.  By 
  2734.            entering the HT command (which causes ASDT32 to halt the current 
  2735.            thread and return to OS/2) and then entering a series of Alt-Esc 
  2736.            keystrokes or a Ctrl-Esc sequence, you can view listings of the 
  2737.            halted thread on your host session.  To return to ASDT32, you need 
  2738.            to enter a series of Alt-Esc keystrokes until you are back in the 
  2739.            same screen group where you had ASDT32 suspend the thread.  Now you 
  2740.            can enter the hot key (if you have the hot key option enabled) to 
  2741.            give control back to ASDT32.  Finally, you can enter the RT command, 
  2742.            which will allow your thread to be resumed.  See RT - Resume Thread 
  2743.            to learn more about resuming halted threads. 
  2744.  
  2745.            You can halt up to ten threads if you want.  Halting threads as they 
  2746.            give control to ASDT32 allows you to see what impact the remaining 
  2747.            threads that are running have on the system. 
  2748.  
  2749.            You can not halt a thread at a breakpoint.  This is due to the fact 
  2750.            that ASDT32 inserts your breakpoints for you before it halts the 
  2751.            thread. 
  2752.  
  2753.  
  2754. ΓòÉΓòÉΓòÉ 12.26. IB - Input Byte ΓòÉΓòÉΓòÉ
  2755.  
  2756.  Purpose:  Reads one byte from a designated port (into a register if 
  2757.            specified). 
  2758.  
  2759.  Format:   IB port [, reg] 
  2760.  
  2761.            port         The I/O port address from which the byte is to be read. 
  2762.  
  2763.            reg          The 8-bit register into which the byte is to be placed. 
  2764.  
  2765.  Examples: IB 40 , AL 
  2766.  
  2767.            Reads one byte from I/O port '0040'x and places it in register AL. 
  2768.            The port and the value read are shown in a message. 
  2769.  
  2770.            IB 21 
  2771.  
  2772.            Reads one byte from I/O port '0021'x and displays the port and the 
  2773.            value read in a message. 
  2774.  
  2775.  Remarks:  To read a port but not place the value read into a register, you can 
  2776.            omit the register name and the message line will display the value 
  2777.            read. 
  2778.  
  2779.  
  2780. ΓòÉΓòÉΓòÉ 12.27. IW - Input Word ΓòÉΓòÉΓòÉ
  2781.  
  2782.  Purpose:  Reads one word from a designated port (into a register if 
  2783.            specified). 
  2784.  
  2785.  Format:   IW port [, reg] 
  2786.  
  2787.            port         The I/O port address from which the word is to be read. 
  2788.  
  2789.            reg          The 16-bit register into which the word is to be 
  2790.                         placed. 
  2791.  
  2792.  Examples: IW 58 , DX 
  2793.  
  2794.            Reads one word from I/O port '0058'x and places it in register DX. 
  2795.            The port and the value read are shown in a message. 
  2796.  
  2797.            IW 31 
  2798.  
  2799.            Reads one word from I/O port '0031'x and displays the port and the 
  2800.            value read in a message. 
  2801.  
  2802.  Remarks:  To read a port but not place the value read into a register, you can 
  2803.            omit the register name and the message line will display the value 
  2804.            read. 
  2805.  
  2806.  
  2807. ΓòÉΓòÉΓòÉ 12.28. LC - Location Counter ΓòÉΓòÉΓòÉ
  2808.  
  2809.  Purpose:  Sets the pseudo-variable, Location Counter (LC), and updates either 
  2810.            the EIP variable or the CO variable. 
  2811.  
  2812.  Format:   LC [= expr] 
  2813.  
  2814.            expr         Any ASDT32 expression. 
  2815.  
  2816.  Examples: LC = 12D 
  2817.  
  2818.            ASDT32 sets the pseudo-variable LC to '012D'x. 
  2819.  
  2820.            If the CO variable is null, ASDT32 sets the CO variable according to 
  2821.            the formula 
  2822.  
  2823.            CO = CS:EIP-LC 
  2824.  
  2825.            If CO is a linear address, then the CS base linear address is used. 
  2826.            If CO is a physical address, then the CS base physical address is 
  2827.            used. 
  2828.  
  2829.            This provides an alternate means for setting the CO. When CO is 
  2830.            null, the command LC=12D tells ASDT32 that the program counter 
  2831.            (CS:EIP) corresponds to the assembly listing LC value of '012D'x. 
  2832.            ASDT32 computes the origin address and puts it into CO. 
  2833.  
  2834.            If the CO variable has any value other than null, ASDT32 tries to 
  2835.            maintain the following relationship: 
  2836.  
  2837.            CO:LC = CS:EIP 
  2838.  
  2839.            This lets you think in terms of your assembly listing offsets. 
  2840.  
  2841.  Remarks:  Normally, you use the Location Counter (LC) in conjunction with the 
  2842.            Code Origin (CO) command to display a program location counter that 
  2843.            corresponds with the offsets in your assembly listing. You should be 
  2844.            familiar with the CO command before using the LC command. 
  2845.  
  2846.            The LC command with a null operand sets both the CO and the LC to 
  2847.            null. 
  2848.  
  2849.  
  2850. ΓòÉΓòÉΓòÉ 12.29. LD - LDT Register ΓòÉΓòÉΓòÉ
  2851.  
  2852.  Purpose:  Alters the contents of the LDT register or its base linear address. 
  2853.  
  2854.  Format:   LD [= expr] 
  2855.  
  2856.            expr         Any ASDT32 expression. 
  2857.  
  2858.  Examples: LD = XS 
  2859.  
  2860.            ASDT32 sets the LDT register to the contents of the XS register. 
  2861.  
  2862.            LD 128E3ABC 
  2863.  
  2864.            ASDT32 associates the user's LDT base address with linear address 
  2865.            '128E3ABC'x. 
  2866.  
  2867.  Remarks:  The current LDTR is changed when you enter the LD command followed 
  2868.            by a selector expression. When you change the LDT register, the user 
  2869.            program may not be able to continue with the altered value. 
  2870.  
  2871.            When a linear address is used, ASDT32 associates the user's LDT base 
  2872.            address with the one provided.  ASDT32 ensures that the address you 
  2873.            specify does indeed point to a valid LDT. You can not step, 
  2874.            terminate, or execute when you have changed the associated user's 
  2875.            LDT base address in this manner.  The idea behind this form of the 
  2876.            LD command is to allow you to view another process's LDT entries. 
  2877.  
  2878.            The LD command with a null operand restores the user program's LDT 
  2879.            register and its base address to the incoming values. If you attempt 
  2880.            to set the LDT to an invalid value or have ASDT32 associate the 
  2881.            user's LDT with a linear address that does not reference an LDT, 
  2882.            ASDT32 will display a message and will not act upon your request. 
  2883.            Additionally, ASDT32 does not allow you to set the LDT base address 
  2884.            to a physical address. 
  2885.  
  2886.            Note that when you change the linear address associated with the LDT 
  2887.            register, ASDT32 uses this value internally; i.e., it does not 
  2888.            update the GDT descriptor that the LDT register references.  Hence, 
  2889.            you would not see a corresponding difference in the LDT/GDT window. 
  2890.  
  2891.            Further, when you change the linear address associated with the LDT 
  2892.            register, ASDT32 uses the descriptor entries found in the 
  2893.            corresponding LDT.  This does not imply that it will use the page 
  2894.            tables associated with that LDT.  To accomplish this, you need to 
  2895.            change the LDT linear address (e.g., LD 12345678) and then use the 
  2896.            physical address conversion operator (e.g., L1 F:0~~ in the memory 
  2897.            window).  These actions coupled together allow you to view memory 
  2898.            that is associated with some other (not the current) process. 
  2899.  
  2900.  
  2901. ΓòÉΓòÉΓòÉ 12.30. LW - LDT/GDT Window ΓòÉΓòÉΓòÉ
  2902.  
  2903.  Purpose:  Switches to LDT/GDT Window Mode. 
  2904.  
  2905.  Format:   LW [*] 
  2906.  
  2907.            *            Indicates that ASDT32 should compress out all invalid 
  2908.                         descriptors from display. 
  2909.  
  2910.  Examples: LW 
  2911.  
  2912.            ASDT32 switches the edit portion of the ASDT32 display to an LDT/GDT 
  2913.            window and sets the primary window mode to LDT/GDT. 
  2914.  
  2915.            LW * 
  2916.  
  2917.            Causes ASDT32 to compress out all the invalid descriptors in its 
  2918.            LDT/GDT display. 
  2919.  
  2920.  Remarks:  The LDT/GDT window displays descriptor table entries in a decoded, 
  2921.            readable format. Each table entry line displays one descriptor table 
  2922.            entry. 
  2923.  
  2924.            ASDT32 displays the primary window at the beginning of line 8 on the 
  2925.            ASDT32 screen. The LDT/GDT window is not editable, but you can 
  2926.            scroll the entries displayed.  See Moving on the Command Line for a 
  2927.            listing of the command line scrolling keys and their function. See 
  2928.            NW - Next Window for the NW command, which switches among all types 
  2929.            of ASDT32 windows. 
  2930.  
  2931.  
  2932. ΓòÉΓòÉΓòÉ 12.31. L1-L9 - Alter Window Area ΓòÉΓòÉΓòÉ
  2933.  
  2934.  Purpose:  Alter the disassembly and memory edit, the LDT/GDT or IDT, or page 
  2935.            window portion of the ASDT32 display by changing the address of a 
  2936.            window display line. 
  2937.  
  2938.            Each disassembly or memory address variable is displayed in one of 
  2939.            the four addressing schemes that ASDT32 allows. Each LDT/GDT or IDT 
  2940.            address variable is displayed as a 4-higit index. Each page window 
  2941.            address variable is displayed as a linear address. 
  2942.  
  2943.  Format:   Ln [= expr] 
  2944.  
  2945.            n            The L variable to be manipulated. 
  2946.  
  2947.            expr         Any ASDT32 expression. 
  2948.  
  2949.  Examples: L1 = 12345678  (disassembly/memory windows) 
  2950.  
  2951.            Places the hexadecimal value '12345678'x into the L1 variable and 
  2952.            displays the contents of that linear address location. 
  2953.  
  2954.            L2 = SS:ESP  (disassembly/memory windows) 
  2955.  
  2956.            Places the contents of registers SS and ESP into the selector and 
  2957.            offset of variable L2 to display your current stack. 
  2958.  
  2959.            L3 = 002F  (LDT/GDT window) 
  2960.  
  2961.            Places the hexadecimal value '002F'x into the L3 variable and 
  2962.            displays the descriptor found as if '002F'x had been used as a 
  2963.            selector (in this case, the descriptor will be in the LDT). 
  2964.  
  2965.            L4 = 0003  (IDT window) 
  2966.  
  2967.            Places the hexadecimal value '0003'x into the L4 variable and 
  2968.            displays the descriptor found at the fourth descriptor slot in the 
  2969.            IDT. 
  2970.  
  2971.            L9 = ESI (page window) 
  2972.  
  2973.            Places the linear address (from the ESI register) into the L9 
  2974.            variable and displays the page directory (or table) entry that is 
  2975.            indicated by this linear address. 
  2976.  
  2977.  Remarks:  An L1-L9 command without a parameter causes the window that begins 
  2978.            with the specified line to be combined with the previous window. If 
  2979.            the specified line is not the beginning of a window, the command 
  2980.            merely causes the display to be updated. 
  2981.  
  2982.            When you have a secondary window set up, i.e., a memory window in 
  2983.            disassembly mode or a disassembly window in memory mode, you can set 
  2984.            any of the primary address variables and the first address variable 
  2985.            of the secondary window. You cannot set the other secondary window 
  2986.            address variables. (Secondary windows are valid only for the 
  2987.            disassembly and memory windows.) 
  2988.  
  2989.            Commands L1-L9 have the same function as typing over an address in 
  2990.            the window. (Typing over an address in a window is valid only in a 
  2991.            disassembly or memory window.) L1-L9's advantages include the use of 
  2992.            expressions and leaving the cursor on the command line. 
  2993.  
  2994.            When a window address variable is updated with one of these 
  2995.            commands, that variable defines the beginning of a window; the 
  2996.            remaining address variables in that window are also updated. In both 
  2997.            the disassembly and memory windows, ASDT32 may substitute a symbol 
  2998.            name for a given line address.  This assumes that the line address 
  2999.            corresponds to some symbol read in.  Note that code origin usage 
  3000.            will override this substitution process; i.e., if "$" is present on 
  3001.            a disassembly line, ASDT32 will not substitute the offset address 
  3002.            with a symbol name. 
  3003.  
  3004.            This substitution process extends to the operand address when 
  3005.            possible.  The symbol name replacement for an operand address is not 
  3006.            overridden by code origin usage. 
  3007.  
  3008.            Scrolling and skipping functions may be performed for the 
  3009.            disassembly and memory windows with these commands in conjunction 
  3010.            with the "/" key and the ENTER key: 
  3011.  
  3012.            / L1 = L1 - 10       Does a vertical scroll (upward). 
  3013.  
  3014.            / L5 = L5 + 1        Does a horizontal scroll (right). 
  3015.  
  3016.            / L1 = L1 + 200      Does a downward skip through memory and can be 
  3017.                                 useful for locating a large text buffer in 
  3018.                                 memory. 
  3019.  
  3020.            These commands may be used in conjunction with one of the FIND 
  3021.            commands to search memory for the occurrence of an item: 
  3022.  
  3023.            / FA string ; L1 = FX  (memory window) 
  3024.  
  3025.            The above sequence searches memory for an ASCII-character string 
  3026.            and, upon finding the string, displays it. 
  3027.  
  3028.            Scrolling and skipping functions may be performed for the LDT/GDT, 
  3029.            IDT, or page windows using the PgUp, PgDn, Ctrl-PgUp, and Ctrl-PgDn 
  3030.            keys. For example: 
  3031.  
  3032.            PgUp                 Does a vertical scroll of the L1 window 
  3033.                                 (upward). 
  3034.  
  3035.            Ctrl-PgDn            Does a scroll of one line of the L1 window 
  3036.                                 (downward). 
  3037.  
  3038.            Note that the PgUp, PgDn, Ctrl-PgUp, Ctrl-PgDn, Ctrl-Left Arrow, and 
  3039.            Ctrl-Right Arrow keys provide scrolling in the disassembly and 
  3040.            memory edit windows (not on the command line). 
  3041.  
  3042.  
  3043. ΓòÉΓòÉΓòÉ 12.32. MW - Memory Window ΓòÉΓòÉΓòÉ
  3044.  
  3045.  Purpose:  Switches to Memory Window mode. 
  3046.  
  3047.  Format:   MW [term] 
  3048.  
  3049.            term         The line number (L1-M6) at which to start the memory 
  3050.                         window. 
  3051.  
  3052.  Examples: MW 
  3053.  
  3054.            ASDT32 switches the edit portion of the ASDT32 display to a memory 
  3055.            window and sets the primary window mode to memory. If a secondary 
  3056.            disassembly window is displayed, ASDT32 removes it. 
  3057.  
  3058.            MW L9 
  3059.  
  3060.            ASDT32 switches lines L9 through M6 of the ASDT32 display to show 
  3061.            memory. The primary window mode of ASDT32 is not changed. 
  3062.  
  3063.  Remarks:  The memory window displays memory in hexadecimal and either ASCII or 
  3064.            EBCDIC format. Each memory line displays one paragraph (sixteen 
  3065.            bytes) of memory. 
  3066.  
  3067.            ASDT32 displays the primary window mode at the beginning of line 8 
  3068.            of the ASDT32 screen. If the primary window is disassembly, then L1 
  3069.            and the following disassembly lines track the current CS:EIP as your 
  3070.            program runs. ASDT32 also tracks CS:EIP for a secondary disassembly 
  3071.            window. 
  3072.  
  3073.            See DW - Disassembly Window for the DW command, which changes to a 
  3074.            disassembly window. See NW - Next Window for the NW command, which 
  3075.            switches among all types of ASDT32 windows. 
  3076.  
  3077.  
  3078. ΓòÉΓòÉΓòÉ 12.33. M1-M6 - Alter Window Area ΓòÉΓòÉΓòÉ
  3079.  
  3080.  Purpose:  Alter the disassembly and memory edit, the LDT/GDT or IDT, or page 
  3081.            window portion of the ASDT32 display by changing the address of a 
  3082.            window display line. 
  3083.  
  3084.            Each disassembly or memory address variable is displayed in one of 
  3085.            the four addressing schemes that ASDT32 allows. Each LDT/GDT or IDT 
  3086.            address variable is displayed as a 4-higit index. Each page window 
  3087.            address variable is displayed as a linear address. 
  3088.  
  3089.  Format:   Mn [= expr] 
  3090.  
  3091.            n            The M variable to be manipulated. 
  3092.  
  3093.            expr         Any ASDT32 expression. 
  3094.  
  3095.  Examples: M1 = A88762!  (disassembly/memory windows) 
  3096.  
  3097.            Places the hexadecimal value 'A88762'x into the M1 variable and 
  3098.            displays the contents of that physical address location. 
  3099.  
  3100.            M2 = CS:EIP  (disassembly/memory windows) 
  3101.  
  3102.            Places the contents of registers CS and EIP into the selector and 
  3103.            offset of variable M2 to display your current instruction stream. 
  3104.  
  3105.            M4 = 0020  (LDT/GDT window) 
  3106.  
  3107.            Places the hexadecimal value '0020'x into the M4 variable and 
  3108.            displays the descriptor found as if '0020'x had been used as a 
  3109.            selector (in this case, the descriptor will be in the GDT). 
  3110.  
  3111.            M5 = 0008  (IDT window) 
  3112.  
  3113.            Places the hexadecimal value '0008'x into the M5 variable and 
  3114.            displays the descriptor found at the ninth descriptor slot in the 
  3115.            IDT. 
  3116.  
  3117.            M6 = EIP (page window) 
  3118.  
  3119.            Places the linear address (from the EIP register) into the M6 
  3120.            variable and displays the page directory (or table) entry that is 
  3121.            indicated by this linear address. 
  3122.  
  3123.  Remarks:  An M1-M6 command without a parameter causes the window that begins 
  3124.            with the specified line to be combined with the previous window. If 
  3125.            the specified line is not the beginning of a window, the command 
  3126.            merely causes the display to be updated. 
  3127.  
  3128.            When you have a secondary window set up, i.e., a memory window in 
  3129.            disassembly mode or a disassembly window in memory mode, you can set 
  3130.            any of the primary address variables and the first address variable 
  3131.            of the secondary window. You cannot set the other secondary window 
  3132.            address variables. (Secondary windows are valid only for the 
  3133.            disassembly and memory windows.) 
  3134.  
  3135.            Commands M1-M6 have the same function as typing over an address in 
  3136.            the window. (Typing over an address in a window is valid only in a 
  3137.            disassembly or memory window.) M1-M6's advantages include the use of 
  3138.            expressions and leaving the cursor on the command line. 
  3139.  
  3140.            When a window address variable is updated with one of these 
  3141.            commands, that variable defines the beginning of a window; the 
  3142.            remaining address variables in that window are also updated. In both 
  3143.            the disassembly and memory windows, ASDT32 may substitute a symbol 
  3144.            name for a given line address.  This assumes that the line address 
  3145.            corresponds to some symbol read in.  Note that code origin usage 
  3146.            will override this substitution process; i.e., if "$" is present on 
  3147.            a disassembly line, ASDT32 will not substitute the offset address 
  3148.            with a symbol name. 
  3149.  
  3150.            This substitution process extends to the operand address when 
  3151.            possible.  The symbol name replacement for an operand address is not 
  3152.            overridden by code origin usage. 
  3153.  
  3154.            Scrolling and skipping functions may be performed with these 
  3155.            commands in conjunction with the "/" key and the ENTER key: 
  3156.  
  3157.            / M1 = M1 - 10       Does a vertical scroll (upward). 
  3158.  
  3159.            / M5 = M5 + 1        Does a horizontal scroll (right). 
  3160.  
  3161.            / M1 = M1 + 200      Does a downward skip through memory and can be 
  3162.                                 useful for locating a large text buffer in 
  3163.                                 memory. 
  3164.  
  3165.            These commands may be used in conjunction with one of the FIND 
  3166.            commands to search memory for the occurrence of an item: 
  3167.  
  3168.            / FA string ; M1 = FX  (memory window) 
  3169.  
  3170.            The above sequence searches memory for an ASCII-character string 
  3171.            and, upon finding the string, displays it. 
  3172.  
  3173.            Scrolling and skipping functions may be performed for the LDT/GDT, 
  3174.            IDT, or page window using the PgUp, PgDn, Ctrl-PgUp, and the 
  3175.            Ctrl-PgDn keys. For example: 
  3176.  
  3177.            PgUp                 Does a vertical scroll of the L1 window 
  3178.                                 (upward). 
  3179.  
  3180.            Ctrl-PgDn            Does a scroll of one line of the L1 window 
  3181.                                 (downward). 
  3182.  
  3183.            Note that the PgUp, PgDn, Ctrl-PgUp, Ctrl-PgDn, Ctrl-Left Arrow, and 
  3184.            Ctrl-Right Arrow keys provide scrolling in the disassembly and 
  3185.            memory edit windows (not on the command line). 
  3186.  
  3187.  
  3188. ΓòÉΓòÉΓòÉ 12.34. M7-M9 - Set Variables M7-M9 ΓòÉΓòÉΓòÉ
  3189.  
  3190.  Purpose:  Sets variables M7-M9. These variables provide scratch pad space, 
  3191.            which reflect one of the four addressing schemes that ASDT32 allows 
  3192.            as designated by the assigning expression. 
  3193.  
  3194.  Format:   Mn [= expr] 
  3195.  
  3196.            n            The M variable to be manipulated. 
  3197.  
  3198.            expr         Any ASDT32 expression. 
  3199.  
  3200.  Examples: M7 = 33F9AB 
  3201.  
  3202.            Places the value '33F9AB'x into the M7 variable. 
  3203.  
  3204.            M8 = V1:DI 
  3205.  
  3206.            Places the contents of variable V1 and register DI into the selector 
  3207.            and offset of variable M8. 
  3208.  
  3209.  Remarks:  Since these variables are not displayed, ASDT32 shows you a 
  3210.            confirmation message indicating the variable name and value each 
  3211.            time one of these variables is set. 
  3212.  
  3213.            M7 = 111111 + 222222 
  3214.  
  3215.            produces the confirmation message 
  3216.  
  3217.            M7 = 333333 
  3218.  
  3219.            In order to display the contents of one of these variables, you can 
  3220.            copy the variable into itself to produce a confirmation message 
  3221.            (M8=M8). 
  3222.  
  3223.            The selector and offset portions of the M7-M9 variables are kept 
  3224.            separately, so you can use these variables when you want to keep 
  3225.            both selector and offset parts of an address. 
  3226.  
  3227.            A variable command with a null operand sets the variable to null. 
  3228.  
  3229.  
  3230. ΓòÉΓòÉΓòÉ 12.35. NP - Not Present ΓòÉΓòÉΓòÉ
  3231.  
  3232.  Purpose:  Pages in memory (application-level code or data) that is valid but 
  3233.            is currently not present. 
  3234.  
  3235.  Format:   NP = expr 
  3236.  
  3237.  Examples: NP CS:13000 
  3238.  
  3239.            Pages in the code page associated with this address. 
  3240.  
  3241.  Remarks:  ASDT32 can page in memory for an application if it is valid but 
  3242.            currently not present.  Generally, you will want to use this 
  3243.            function when you need to disassemble code or peek at data that has 
  3244.            not been reached/accessed yet. 
  3245.  
  3246.            Note that you have to be running at the application level when you 
  3247.            issue this command.  (Page faults that occur while you are at the 
  3248.            system level crash the OS. )  Additionally, the memory that you are 
  3249.            interested in making present must also be faultable. 
  3250.  
  3251.  
  3252. ΓòÉΓòÉΓòÉ 12.36. NW - Next Window ΓòÉΓòÉΓòÉ
  3253.  
  3254.  Purpose:  Switches to the next ASDT32 window (memory, LDT/GDT, IDT, page, or 
  3255.            disassembly). 
  3256.  
  3257.  Format:   NW 
  3258.  
  3259.  Examples: NW 
  3260.  
  3261.            Switches among the ASDT32 windows in the following order: 
  3262.  
  3263.                Disassembly 
  3264.                Memory 
  3265.                LDT/GDT 
  3266.                IDT 
  3267.                Page 
  3268.  
  3269.  Remarks:  ASDT32 switches the edit portion of the ASDT32 display to the next 
  3270.            primary window in the sequence with that window's previously-defined 
  3271.            segments and secondary window (if any). 
  3272.  
  3273.            The disassembly window displays disassembled instructions in either 
  3274.            hexadecimal or text format (you can toggle between these two 
  3275.            formats). If applicable, ASDT32 also displays the operand of the 
  3276.            instruction. 
  3277.  
  3278.            The memory window displays memory in hexadecimal and either ASCII or 
  3279.            EBCDIC format. Each memory line displays one paragraph (sixteen 
  3280.            bytes) of memory. 
  3281.  
  3282.            The LDT/GDT and IDT windows display descriptor table entries in a 
  3283.            decoded, readable format. Each table entry line displays one 
  3284.            descriptor table entry. 
  3285.  
  3286.            The page window displays page directory or page table entries in a 
  3287.            decoded, readable format. Each directory or table entry line 
  3288.            displays one entry. 
  3289.  
  3290.            ASDT32 displays the primary window mode at the beginning of line 8 
  3291.            of the ASDT32 screen. 
  3292.  
  3293.            If the primary window is disassembly, then L1 and the following 
  3294.            disassembly lines track the current CS:EIP as your program runs. 
  3295.            ASDT32 also tracks CS:EIP for a secondary disassembly window. 
  3296.  
  3297.            See MW - Memory Window for the MW command, which changes to a memory 
  3298.            window. See LW - LDT/GDT Window for the LW command, which changes to 
  3299.            an LDT/GDT window. See VW - IDT Window for the VW command, which 
  3300.            changes to an IDT window. See PW - Page Window for the PW command, 
  3301.            which changes to a page window. See DW - Disassembly Window for the 
  3302.            DW command, which changes to a disassembly window. 
  3303.  
  3304.            ASDT32 sets function key F4 to the NW command on entry. 
  3305.  
  3306.  
  3307. ΓòÉΓòÉΓòÉ 12.37. OB - Output Byte ΓòÉΓòÉΓòÉ
  3308.  
  3309.  Purpose:  Writes one byte to a designated port. 
  3310.  
  3311.  Format:   OB port [, value] 
  3312.  
  3313.            port         The I/O port address to which the byte is to be 
  3314.                         written. 
  3315.  
  3316.            value        The register, expression, or ASDT32 variable to output 
  3317.                         to the port. 
  3318.  
  3319.  Examples: OB 40 , DL 
  3320.  
  3321.            Writes the contents of the DL register to I/O port '0040'x. 
  3322.  
  3323.            OB 21 , BH + CH 
  3324.  
  3325.            Writes the sum of the contents of the BH and CH registers to I/O 
  3326.            port '0021'x. 
  3327.  
  3328.            OB 38 
  3329.  
  3330.            Writes '00'x to I/O port '0038'x. 
  3331.  
  3332.            OB AH , AL 
  3333.  
  3334.            Writes the contents of the AL register to the port specified by the 
  3335.            contents of the AH register. 
  3336.  
  3337.  Remarks:  ASDT32 writes a zero to the port if you omit the value. 
  3338.  
  3339.            The port and the value written are shown in a message. 
  3340.  
  3341.  
  3342. ΓòÉΓòÉΓòÉ 12.38. OW - Output Word ΓòÉΓòÉΓòÉ
  3343.  
  3344.  Purpose:  Writes one word to a designated port. 
  3345.  
  3346.  Format:   OW port [, value] 
  3347.  
  3348.            port         The I/O port address to which the word is to be 
  3349.                         written. 
  3350.  
  3351.            value        The register, expression, or ASDT32 variable to output 
  3352.                         to the port. 
  3353.  
  3354.  Examples: OW 58 , AX 
  3355.  
  3356.            Writes the contents of the AX register to I/O port '0058'x. 
  3357.  
  3358.            OW 21 , BX + CX 
  3359.  
  3360.            Writes the sum of the contents of the BX and CX registers to I/O 
  3361.            port '0021'x. 
  3362.  
  3363.            OW 38 
  3364.  
  3365.            Writes '0000'x to I/O port '0038'x. 
  3366.  
  3367.            OW AX+BX , 10 
  3368.  
  3369.            Writes '0010'x to the port specified by the sum of the contents of 
  3370.            the AX and BX registers. 
  3371.  
  3372.  Remarks:  ASDT32 writes a zero to the port if you omit the value. 
  3373.  
  3374.            The port and the value written are shown in a message. 
  3375.  
  3376.  
  3377. ΓòÉΓòÉΓòÉ 12.39. PD - Print Disassembly ΓòÉΓòÉΓòÉ
  3378.  
  3379.  Purpose:  Prints the current ASDT32 disassembly window at the LPT1 address. 
  3380.  
  3381.  Format:   PD [expr] [,comport] 
  3382.  
  3383.            expr         Any ASDT32 expression to represent the number of bytes 
  3384.                         to be disassembled and printed. 4K is the maximum. 
  3385.  
  3386.            comport      Either 1 or 2 to designate com1 or com2. 
  3387.  
  3388.  Examples: PD 100 
  3389.  
  3390.            ASDT32 starts disassembling and printing from the disassembly window 
  3391.            L1 address for 256 bytes. 
  3392.  
  3393.            PD 100,1 
  3394.  
  3395.            ASDT32 starts disassembling from the disassembly window L1 address 
  3396.            for 256 bytes, and sends the data over the com1 port. 
  3397.  
  3398.  Remarks:  ASDT32 will print or send from the disassembly L1 address to the end 
  3399.            of the designated segment, to the last page-mapped byte, or for the 
  3400.            number of bytes that you specified up to a maximum of 4K bytes 
  3401.            (whichever occurs first). 
  3402.  
  3403.            Note:  :LPT1 is assumed and if expr is null while the disassembly 
  3404.            window L1 address is physical, ASDT32 will disassemble and print 4K 
  3405.            bytes! 
  3406.  
  3407.  
  3408. ΓòÉΓòÉΓòÉ 12.40. PI - Program Identification ΓòÉΓòÉΓòÉ
  3409.  
  3410.  Purpose:  Identifies the current thread's invocation path. 
  3411.  
  3412.  Format:   PI [Sn] 
  3413.  
  3414.            Sn           Any of the ASDT32 breakpoints, V1-V9 and S1-S9. 
  3415.  
  3416.  Examples: PI 
  3417.  
  3418.            Lists the current thread's invocation path on the ASDT32 message 
  3419.            line. 
  3420.  
  3421.            PI S4 
  3422.  
  3423.            Lists the invocation path of the thread that is associated with the 
  3424.            S4 breakpoint on the ASDT32 message line. 
  3425.  
  3426.  Remarks:  PI is useful in determining what program caused ASDT32 to get 
  3427.            control. This is especially helpful on a general protection fault. 
  3428.  
  3429.  
  3430. ΓòÉΓòÉΓòÉ 12.41. PM - Print Memory ΓòÉΓòÉΓòÉ
  3431.  
  3432.  Purpose:  Prints the current ASDT32 memory window at the LPT1 address. 
  3433.  
  3434.  Format:   PM [expr] [,comport] 
  3435.  
  3436.            expr         Any ASDT32 expression to represent the number of bytes 
  3437.                         to be formatted and printed. 4K is the maximum. 
  3438.  
  3439.            comport      Either 1 or 2 to designate com1 or com2. 
  3440.  
  3441.  Examples: PM 200 
  3442.  
  3443.            ASDT32 starts formatting and printing from the memory window L1 
  3444.            address for 512 bytes. 
  3445.  
  3446.            PM 200,1 
  3447.  
  3448.            ASDT32 starts formatting from the memory window L1 address for 512 
  3449.            bytes, and sends the data over the com1 port. 
  3450.  
  3451.  Remarks:  ASDT32 will print or send from the memory L1 address to the end of 
  3452.            the designated segment, to the last page-mapped byte, or for the 
  3453.            number of bytes that you specified up to a maximum of 4K bytes 
  3454.            (whichever occurs first). 
  3455.  
  3456.            Note:  :LPT1 is assumed and if expr is null while the memory window 
  3457.            L1 address is physical, ASDT32 will format and print 4K bytes! 
  3458.  
  3459.  
  3460. ΓòÉΓòÉΓòÉ 12.42. PR - Print Screen ΓòÉΓòÉΓòÉ
  3461.  
  3462.  Purpose:  Prints the current ASDT32 screen or the saved user screen. 
  3463.  
  3464.  Format:   PR [U] 
  3465.  
  3466.            U            Indicates that the saved user screen is to be printed 
  3467.                         instead of the ASDT32 screen. 
  3468.  
  3469.  Examples: PR 
  3470.  
  3471.            Prints the ASDT32 screen to the printer at the LPT1 address. 
  3472.  
  3473.            PR U 
  3474.  
  3475.            Prints the saved user screen to the printer at the LPT1 address. 
  3476.  
  3477.  Remarks:  ASDT32 uses the LPT1 address for printing.  You can also type the 
  3478.            PrtSc key while ASDT32 is in control to obtain a printout of 
  3479.            ASDT32's screen. 
  3480.  
  3481.            Note:  You should ensure that the saved screen is in text mode 
  3482.            before it is printed. Otherwise, ASDT32 will dump 2000 bytes of 
  3483.            compressed video plane data with unpredictable results. 
  3484.  
  3485.  
  3486. ΓòÉΓòÉΓòÉ 12.43. PW - Page Window ΓòÉΓòÉΓòÉ
  3487.  
  3488.  Purpose:  Switches to Page Window Mode. 
  3489.  
  3490.  Format:   PW [D or T or *] 
  3491.  
  3492.            D            Indicates that page directory entries should be shown 
  3493.                         for each linear address line variable. 
  3494.  
  3495.            T            Indicates that page table entries should be shown for 
  3496.                         each linear address line variable. 
  3497.  
  3498.            *            Indicates that ASDT32 should compress out all invalid 
  3499.                         page directory or page table entries from display. 
  3500.  
  3501.  Examples: PW 
  3502.  
  3503.            ASDT32 switches the edit portion of the ASDT32 display to a page 
  3504.            window and sets the primary window mode to PDE or PTE. 
  3505.  
  3506.            PW D 
  3507.  
  3508.            Causes ASDT32 to display page directory entries and set the primary 
  3509.            window mode to PDE. 
  3510.  
  3511.            PW T 
  3512.  
  3513.            Causes ASDT32 to display page table entries and set the primary 
  3514.            window mode to PTE. 
  3515.  
  3516.            PW * 
  3517.  
  3518.            Causes ASDT32 to compress out all the invalid page directory or 
  3519.            table entries from the ASDT32 display. 
  3520.  
  3521.  Remarks:  The page window displays page directory or table entries in a 
  3522.            decoded, readable format. Each table entry line displays one page 
  3523.            directory or table entry. The linear address of a given line 
  3524.            variable is used by ASDT32 to determine which page directory or 
  3525.            table entry to display.  The default is for ASDT32 to display page 
  3526.            table entries. 
  3527.  
  3528.            ASDT32 displays the primary window at the beginning of line 8 on the 
  3529.            ASDT32 screen. The page window is not editable, but you can scroll 
  3530.            the entries displayed.  See Moving on the Command Line for a listing 
  3531.            of the command line scrolling keys and their function. See NW - Next 
  3532.            Window for the NW command, which switches among all types of ASDT32 
  3533.            windows. 
  3534.  
  3535.  
  3536. ΓòÉΓòÉΓòÉ 12.44. QS - Qualify Segment Number ΓòÉΓòÉΓòÉ
  3537.  
  3538.  Purpose:  Qualifies a segment number (for a Public symbol). 
  3539.  
  3540.  Format:   QS seg# [, sel] 
  3541.  
  3542.            seg#         The segment number that you wish to qualify or 
  3543.                         interrogate.  If you do not specify a qualifying 
  3544.                         selector, ASDT32 displays the current qualification of 
  3545.                         the segment number on the message line. 
  3546.  
  3547.            sel          any ASDT32 expression that determines a selector that 
  3548.                         is to qualify the segment number. 
  3549.  
  3550.  Examples: QS 1 
  3551.  
  3552.            Displays the current selector that qualifies segment number 1. 
  3553.  
  3554.            QS 2, CS 
  3555.  
  3556.            Qualifies segment number 2 to the CS value. 
  3557.  
  3558.  Remarks:  When you extract Public data from a LNK386 map file using 
  3559.            ASDT32SM.CMD, the resulting .SYM file has a segment number and 
  3560.            offset that pertains to each symbol.  ASDT32 uses the segment number 
  3561.            for a symbol to return a selector value as part of the address. 
  3562.            ASDT32 does not know which selector value to associate with a given 
  3563.            segment number.  Hence, the QS command allows you to specify this 
  3564.            value. 
  3565.  
  3566.            If you do not qualify a segment number, ASDT32 defaults all segment 
  3567.            numbers to be qualified by 0 (the null selector).  ASDT32 will try 
  3568.            to guess what selector should be associated with a zero-qualified 
  3569.            segment using segment length data located in the LDT and GDT 
  3570.            entries.  This procedure is not guaranteed to succeed.  Hence, when 
  3571.            it fails, you should qualify the segment number via the QS command. 
  3572.  
  3573.            You can use a string of QS commands conveniently in an ASDT32 
  3574.            profile. See EP - Execute Profile for more information about 
  3575.            executing profiles while in ASDT32 
  3576.  
  3577.  
  3578. ΓòÉΓòÉΓòÉ 12.45. RC - Retrieve Command ΓòÉΓòÉΓòÉ
  3579.  
  3580.  Purpose:  Re-displays the last command line that was entered. 
  3581.  
  3582.  Format:   RC 
  3583.  
  3584.  Examples: RC 
  3585.  
  3586.            Re-displays the last command line that was entered and places the 
  3587.            cursor at the end of the command line. 
  3588.  
  3589.  Remarks:  ASDT32 saves the contents of up to ten command lines in a circular 
  3590.            queue. Repeated RC commands will re-display the last ten command 
  3591.            lines in reverse order. 
  3592.  
  3593.            Commands entered via function keys or from a profile are not 
  3594.            included in the saved command line queue. 
  3595.  
  3596.            ASDT32 sets function key F10 to the RC command on entry. 
  3597.  
  3598.  
  3599. ΓòÉΓòÉΓòÉ 12.46. RI - Restore Interrupt ΓòÉΓòÉΓòÉ
  3600.  
  3601.  Purpose:  Restores an ASDT32 interrupt to OS/2. 
  3602.  
  3603.  Format:   RI = expr 
  3604.  
  3605.            expr         Any ASDT32 expression that indicates which interrupt 
  3606.                         you want ASDT32 to restore to OS/2. 
  3607.  
  3608.  Examples: RI 0 
  3609.  
  3610.            ASDT32 restores control of interrupt 0 to OS/2. 
  3611.  
  3612.            RI C 
  3613.  
  3614.            ASDT32 restores control of interrupt '0C'x to OS/2. 
  3615.  
  3616.  Remarks:  ASDT32 controls various interrupts to gain control when some action 
  3617.            that generates one of these interrupts occurs.  There are times when 
  3618.            your device driver needs to control one of these ASDT32 interrupts. 
  3619.            By using the RI command, you can have ASDT32 relinquish control of a 
  3620.            specific interrupt. 
  3621.  
  3622.            You can tell ASDT32 not to take over a specific interrupt during its 
  3623.            installation by using the /n parameter (where n is one of 0, 1, 2, 
  3624.            3, 6, 8, C, or D). 
  3625.  
  3626.            See TI - Take Interrupt for information on how to take an ASDT32 
  3627.            interrupt away from OS/2 for ASDT32's usage. 
  3628.  
  3629.  
  3630. ΓòÉΓòÉΓòÉ 12.47. RK - Reset Keyboard Hot Key ΓòÉΓòÉΓòÉ
  3631.  
  3632.  Purpose:  Resets ASDT32's monitoring for a hot key. 
  3633.  
  3634.  Format:   RK 
  3635.  
  3636.  Examples: RK 
  3637.  
  3638.            ASDT32 no longer monitors keystrokes when it is not in control. 
  3639.  
  3640.  Remarks:  Subsequent hot key keystrokes do not return processor control to 
  3641.            ASDT32. 
  3642.  
  3643.            The use of the keyboard hot key can be set at ASDT32 installation 
  3644.            time with the /K option or at any other time with the SK command. 
  3645.            Setting this option causes ASDT32 to monitor all keystrokes when it 
  3646.            is not in control to see if you have requested the hot key function. 
  3647.            When your program is running and this option is set, a hot key will 
  3648.            return control to ASDT32. 
  3649.  
  3650.            Resetting this option with the RK command removes ASDT32 keystroke 
  3651.            monitoring duties. 
  3652.  
  3653.  
  3654. ΓòÉΓòÉΓòÉ 12.48. RT - Resume Thread ΓòÉΓòÉΓòÉ
  3655.  
  3656.  Purpose:  Resumes threads that were halted by the HT command. 
  3657.  
  3658.  Format:   RT [= pid] 
  3659.  
  3660.            pid          The process id of a specific thread that you halted 
  3661.                         with the HT command. 
  3662.  
  3663.  Examples: RT 
  3664.  
  3665.            ASDT32 resumes in LIFO fashion any threads that were halted using 
  3666.            the HT command. 
  3667.  
  3668.            RT 000B 
  3669.  
  3670.            ASDT32 resumes the thread that was halted by using the HT command 
  3671.            and has a process id number of eleven. 
  3672.  
  3673.  Remarks:  The RT command allows a previously halted thread to resume its 
  3674.            processing.  You can use the HT and RT commands in conjunction with 
  3675.            other keystrokes to view your host listings.  See HT - Halt Thread 
  3676.            for more information. 
  3677.  
  3678.            If you intend to resume halted threads in some other manner than the 
  3679.            default LIFO fashion adopted by the RT command, then you need to 
  3680.            remember the process id that is associated with each thread that you 
  3681.            halt.  ASDT32 displays a thread's process id on line 1 of the ASDT32 
  3682.            display. 
  3683.  
  3684.  
  3685. ΓòÉΓòÉΓòÉ 12.49. SB - Sticky Breakpoint ΓòÉΓòÉΓòÉ
  3686.  
  3687.  Purpose:  To make a specific breakpoint or all breakpoints sticky. 
  3688.  
  3689.            Sticky is defined to mean that ASDT32 will stop on a given 
  3690.            breakpoint regardless of the current PID and TID. 
  3691.  
  3692.  Format:   SB [ON or OFF or Sn ON or Sn OFF] 
  3693.  
  3694.            Sn           Any ASDT32 breakpoint (V1-S9). 
  3695.  
  3696.  Examples: SB ON 
  3697.  
  3698.            Sets a global sticky flag, which tells ASDT32 to stop on every 'CC'x 
  3699.            (breakpoint interrupt) that is encountered. 
  3700.  
  3701.            SB OFF 
  3702.  
  3703.            Resets the global ASDT32 sticky flag so that a decision is made by 
  3704.            ASDT32 on whether to stop on the current breakpoint based on PID and 
  3705.            TID comparisons. 
  3706.  
  3707.            SB S3 ON 
  3708.  
  3709.            Makes S3 sticky without affecting the status of any other 
  3710.            breakpoint. 
  3711.  
  3712.            SB S3 OFF 
  3713.  
  3714.            Resets S3's sticky status to normal (unless SB ON has set the global 
  3715.            sticky flag). 
  3716.  
  3717.  Remarks:  Normally, ASDT32 expends a great deal of energy to determine whether 
  3718.            it should stop on a 'CC'x that has been encountered.  Depending on 
  3719.            the current PID and TID that were in effect when you set a 
  3720.            breakpoint, ASDT32 tries to determine if it should stop execution of 
  3721.            your program or yield control back to OS/2.   However, if the global 
  3722.            sticky flag is on or if an individual breakpoint that is hit is 
  3723.            sticky, then ASDT32 knows to take control regardless of PID and TID 
  3724.            information. 
  3725.  
  3726.            Note:  ASDT32 always considers physical address breakpoints to be 
  3727.            sticky. It defaults virtual and linear address breakpoints that 
  3728.            resolve above the 512M line to be sticky.  You can change the sticky 
  3729.            status of these breakpoints by issuing SB Sn OFF when necessary. 
  3730.  
  3731.  
  3732. ΓòÉΓòÉΓòÉ 12.50. SC - Screen ΓòÉΓòÉΓòÉ
  3733.  
  3734.  Purpose:  Replaces the ASDT32 full screen display with the user program 
  3735.            display. 
  3736.  
  3737.  Format:   SC 
  3738.  
  3739.  Examples: SC 
  3740.  
  3741.            Displays the user program's screen and waits for any key to be 
  3742.            pressed. 
  3743.  
  3744.  Remarks:  Since ASDT32 uses the display screen to communicate with you, it 
  3745.            saves your program's screen each time ASDT32 is entered and restores 
  3746.            that screen each time it returns control to your program. When 
  3747.            ASDT32 is active and you wish to view your screen instead of the 
  3748.            ASDT32 screen, enter the SC command. Pressing any key restores the 
  3749.            ASDT32 screen. 
  3750.  
  3751.            ASDT32 sets function key F6 to the SC command on entry. 
  3752.  
  3753.  
  3754. ΓòÉΓòÉΓòÉ 12.51. SK - Set Keyboard Hot Key ΓòÉΓòÉΓòÉ
  3755.  
  3756.  Purpose:  Sets hot key monitoring by ASDT32. 
  3757.  
  3758.  Format:   SK [= nn] 
  3759.  
  3760.            nn           A 1-byte scan code that you want to be interpreted as 
  3761.                         the hot key. 
  3762.  
  3763.  Examples: SK 
  3764.  
  3765.            ASDT32 monitors keystrokes when it is not in control to see if you 
  3766.            have typed the currently-defined hot key.  This defaults to the 
  3767.            PrtSc key. 
  3768.  
  3769.            SK 4A 
  3770.  
  3771.            Defines the hot key to scan code 4A, which is the keypad minus. 
  3772.  
  3773.  Remarks:  Subsequent hot key keystrokes return processor control to ASDT32. 
  3774.  
  3775.            The use of the keyboard hot key can be set at ASDT32 installation 
  3776.            time with the /K option. Setting this option causes ASDT32 (when it 
  3777.            is not in control) to monitor keystrokes searching for a hot key. 
  3778.            When your program is running and this option is set, a hot key will 
  3779.            return control to ASDT32. 
  3780.  
  3781.            Resetting this option with the RK command removes ASDT32's 
  3782.            monitoring of keystrokes. 
  3783.  
  3784.  
  3785. ΓòÉΓòÉΓòÉ 12.52. SR - System Reset ΓòÉΓòÉΓòÉ
  3786.  
  3787.  Purpose:  Performs a system reset. 
  3788.  
  3789.  Format:   SR 
  3790.  
  3791.  Examples: SR 
  3792.  
  3793.            Re-ipls the machine causing control to be given to the boot-strap 
  3794.            loader. 
  3795.  
  3796.  Remarks:  This command is useful if you want a fresh power-on of the system 
  3797.            without turning the power switch off and on.  Memory is not 
  3798.            rechecked, and it is cleared.  ASDT32 does not regain control with 
  3799.            this command. 
  3800.  
  3801.  
  3802. ΓòÉΓòÉΓòÉ 12.53. ST - Step ΓòÉΓòÉΓòÉ
  3803.  
  3804.  Purpose:  Executes a specified number of user program instructions. 
  3805.  
  3806.  Format:   ST [= expr] 
  3807.  
  3808.            expr         Any ASDT32 expression. 
  3809.  
  3810.  Examples: ST 4 
  3811.  
  3812.            Four user program instructions are executed. 
  3813.  
  3814.  Remarks:  If the operand is null, the number of instructions executed defaults 
  3815.            to the value of the step count variable (CT). 
  3816.  
  3817.            Your display screen is restored, one user program instruction is 
  3818.            executed, the breakpoints are activated, and the remaining user 
  3819.            program instructions are executed. Program execution is terminated 
  3820.            by one of the interrupts ASDT32 handles, by a breakpoint, or by the 
  3821.            step count. The reason for termination is displayed with a message 
  3822.            or a breakpoint highlight. 
  3823.  
  3824.            Execution of your program always begins at the location pointed to 
  3825.            by CS:EIP. 
  3826.  
  3827.            The ASDT32 CT value is a 16-bit quantity.  If your expression 
  3828.            evaluates to a higher precision than this, then ASDT32 displays a 
  3829.            warning message, leaves the CT value as is, and does not single step 
  3830.            any instructions. 
  3831.  
  3832.            ASDT32 sets function key F8 to the ST command on entry. 
  3833.  
  3834.  
  3835. ΓòÉΓòÉΓòÉ 12.54. S1-S9 - Set Breakpoints S1-S9 ΓòÉΓòÉΓòÉ
  3836.  
  3837.  Purpose:  Sets the breakpoints that are displayed at the top left corner of 
  3838.            the ASDT32 display screen. 
  3839.  
  3840.            Each breakpoint is set via any of the four addressing schemes that 
  3841.            ASDT32 employs. It is displayed as an 8-higit address, an offset 
  3842.            from CS or CO, as an offset from some selector, or as "........" to 
  3843.            indicate that the breakpoint is null. 
  3844.  
  3845.  Format:   Sn [= expr or ON or OFF] 
  3846.  
  3847.            n            The S breakpoint to be manipulated. 
  3848.  
  3849.            expr         Any ASDT32 expression. 
  3850.  
  3851.            ON           Activates Sn as a breakpoint. 
  3852.  
  3853.            OFF          Suspends Sn as a breakpoint. 
  3854.  
  3855.  Examples: S1 = 345C00 
  3856.  
  3857.            Sets the S1 breakpoint to linear address '345C00'x. If this address 
  3858.            is below or more than 4K above the CS and the CO, the breakpoint is 
  3859.            displayed as "00345C00." 
  3860.  
  3861.            S2 = CO + 4 
  3862.  
  3863.            Sets the S2 breakpoint to four bytes beyond the current code origin 
  3864.            address. The breakpoint is displayed as "$00000004." 
  3865.  
  3866.            S5 = CS:CX 
  3867.  
  3868.            Sets the S5 breakpoint to the current code segment plus the contents 
  3869.            of the CX register. The breakpoint is displayed with a leading "+" 
  3870.            if CX < 4K. 
  3871.  
  3872.            S8 OFF 
  3873.  
  3874.            Deactivates the S8 breakpoint. 
  3875.  
  3876.  Remarks:  When a breakpoint is activated, the instruction at that address is 
  3877.            disassembled and displayed on the message line. 
  3878.  
  3879.            When any of the active breakpoints is encountered during the 
  3880.            execution of a user program, execution is stopped and control is 
  3881.            given to ASDT32. In addition to the nine S1-S9 breakpoints, the nine 
  3882.            V1-V9 variables may be used for address stops to provide a maximum 
  3883.            of eighteen address stops per screen. Since there are nine ASDT32 
  3884.            screens, a total of 162 address stops may be active at any given 
  3885.            time. 
  3886.  
  3887.            ASDT32 displays active breakpoints in a relative address format if 
  3888.            possible. A relative address is designated by "$" for CO, "+" for 
  3889.            CS, or "#" for any other selector when the breakpoint is not a 
  3890.            linear or physical address. "&" is used to denote a virtual 8086 
  3891.            mode breakpoint, which is neither a linear or physical address. 
  3892.  
  3893.            Linear address breakpoints have no designating character whereas 
  3894.            physical address breakpoints are designated by "!." The following 
  3895.            examples show how breakpoints are displayed under the various 
  3896.            conditions: 
  3897.  
  3898.                        Command      CO Setting  CS Base Address  CS Setting  Resulting Display
  3899.  
  3900.                       S1=CO+200      78694000       775A1000        005B       S1:$00000200
  3901.                       S5=CO-1A5      +0AE8          775A1000        005B       S5:+00000943
  3902.                       S8=025900!     null          !00025800        005B       S8:+00000100
  3903.                       S2=2D0003      3D590000       00100000        004F       S2: 002D0003
  3904.                       S1=DS:4567     +5900          3D000000        001F       S1:#00004567
  3905.                       S7=025900!     null          !003ABC00        005B       S7:!00025900
  3906.  
  3907.            ASDT32 highlights active breakpoints on the ASDT32 display screen. 
  3908.            Once you deactivate a breakpoint with an OFF operand, it remains 
  3909.            deactivated until it is reactivated with an ON operand. 
  3910.  
  3911.            Note:  ASDT32 will not reactivate a breakpoint for a process or 
  3912.            thread that has terminated.  This is due to the fact that every 
  3913.            breakpoint has a process id, a thread id, and an LDT associated with 
  3914.            it when it is set.  You may deactivate and reactivate the breakpoint 
  3915.            while its associated information is still valid, but you can not 
  3916.            reactivate it once its thread has been terminated.  If you want to 
  3917.            reactivate a screen's breakpoints and associate their addresses with 
  3918.            the current process id, thread id, and LDT, then issue a Dn ON 
  3919.            command. See D1-D9 - Select Display for more information. 
  3920.  
  3921.            Note:  When in virtual 8086 mode, you will set segment:offset 
  3922.            breakpoints when you use virtual addressing schemes.  Linear and 
  3923.            physical addressing schemes work the same as for protected mode. 
  3924.  
  3925.            A breakpoint command with a null operand sets the breakpoint to 
  3926.            null. For a virtual address breakpoint, ASDT32 may substitute a 
  3927.            symbol name in the breakpoint's display area. This assumes that the 
  3928.            breakpoint address corresponds to some symbol read in.  Note that 
  3929.            code origin usage will override this substitution process; i.e., if 
  3930.            "$" is present in the breakpoint display area, ASDT32 will not 
  3931.            substitute the offset address with a symbol name. 
  3932.  
  3933.            A special form of breakpoint, the procedure step, is used to run an 
  3934.            entire module or section of code that is invoked with a CALL, INT, 
  3935.            or REP instruction. ASDT32 provides a procedure step function, which 
  3936.            uses S9 to set a breakpoint at the instruction following the one 
  3937.            about to be executed. If the instruction about to be executed is a 
  3938.            CALL, INT, or REP, the effect is for the entire module to be 
  3939.            executed. The command sequence is "S9 = EX+IL;EX;S9." 
  3940.  
  3941.            ASDT32 sets function key F9 to the procedure step command sequence 
  3942.            on entry. 
  3943.  
  3944.            You can change active breakpoints into complex breakpoints with the 
  3945.            CB command. See Setting Breakpoints and CB - Complex Breakpoint for 
  3946.            more information. 
  3947.  
  3948.  
  3949. ΓòÉΓòÉΓòÉ 12.55. TI - Take Interrupt ΓòÉΓòÉΓòÉ
  3950.  
  3951.  Purpose:  Takes an ASDT32 interrupt from OS/2 for ASDT32's usage. 
  3952.  
  3953.  Format:   TI = expr 
  3954.  
  3955.            expr         Any ASDT32 expression that indicates which interrupt 
  3956.                         you want ASDT32 to take from OS/2. 
  3957.  
  3958.  Examples: TI 2 
  3959.  
  3960.            ASDT32 takes control of interrupt 2 from OS/2. 
  3961.  
  3962.            TI D 
  3963.  
  3964.            ASDT32 takes control of interrupt '0D'x from OS/2. 
  3965.  
  3966.  Remarks:  ASDT32 manipulates various interrupt vectors to gain control when 
  3967.            specific actions/exceptions occur. There are times when your device 
  3968.            driver needs to control one of these ASDT32 interrupts.  By using 
  3969.            the RI command, you can have ASDT32 relinquish control of a specific 
  3970.            interrupt.  By using the TI command, you can have ASDT32 regain 
  3971.            control of the specific interrupt. 
  3972.  
  3973.            See RI - Restore Interrupt for information on how to restore an 
  3974.            ASDT32 interrupt to OS/2. 
  3975.  
  3976.  
  3977. ΓòÉΓòÉΓòÉ 12.56. TP - Terminate Process ΓòÉΓòÉΓòÉ
  3978.  
  3979.  Purpose:  Terminates the current process that ASDT32 is monitoring. 
  3980.  
  3981.  Format:   TP 
  3982.  
  3983.  Examples: TP 
  3984.  
  3985.            ASDT32 terminates the current process (program) and returns to OS/2. 
  3986.  
  3987.  Remarks:  TP allows you to end a process that ASDT32 has intercepted.  This is 
  3988.            useful when a stack limit violation or a general protection fault 
  3989.            has caused ASDT32 to gain control. 
  3990.  
  3991.            ASDT32 can not terminate a process that is running at level 0. 
  3992.            ASDT32 will issue a warning message if you try to do this and will 
  3993.            not attempt to terminate the process. Additionally, if you issue TP 
  3994.            for a device driver that ASDT32 is monitoring during the 
  3995.            initialization phase, the system will hang. 
  3996.  
  3997.            ASDT32 sets function key F3 to the TP command on entry. 
  3998.  
  3999.  
  4000. ΓòÉΓòÉΓòÉ 12.57. TS - Task State Register ΓòÉΓòÉΓòÉ
  4001.  
  4002.  Purpose:  Alters the contents of the TSR. 
  4003.  
  4004.  Format:   TS [= expr] 
  4005.  
  4006.            expr         Any ASDT32 expression. 
  4007.  
  4008.  Examples: TS = 2A 
  4009.  
  4010.            ASDT32 sets the task state register to '002A'x. 
  4011.  
  4012.  Remarks:  The current TSR (task state register) is changed when you enter the 
  4013.            TS command. When you change the TSR, your program may not be able to 
  4014.            continue with the altered value. 
  4015.  
  4016.            ASDT32 uses only the least significant 16 bits that result from an 
  4017.            expression evaluation to set the TSR. ASDT32 truncates any 
  4018.            additional bits and displays a warning message. 
  4019.  
  4020.            The TS command with a null operand restores your program's TSR to 
  4021.            its original value. If you attempt to set the TSR to an invalid 
  4022.            value, ASDT32 will display a message and will not set the register. 
  4023.  
  4024.  
  4025. ΓòÉΓòÉΓòÉ 12.58. T0 - Suspend/Reactivate Hardware Debug Registers ΓòÉΓòÉΓòÉ
  4026.  
  4027.  Purpose:  Suspends or reactivates the hardware debug registers (DR0-DR3). 
  4028.  
  4029.  Format:   T0 [ON or OFF] 
  4030.  
  4031.            ON           Reactivates all DRx that have settings. 
  4032.  
  4033.            OFF          Suspends all DRx that have settings. 
  4034.  
  4035.  Examples: T0 OFF 
  4036.  
  4037.            Keeps DR0-DR3 disarmed upon exit from ASDT32. 
  4038.  
  4039.            T0 ON 
  4040.  
  4041.            Reactivates all of DR0-DR3 that have settings. 
  4042.  
  4043.  Remarks:  If you reference the T1-T4 commands (see T1-T4 - Set Hardware Debug 
  4044.            Registers), you will notice that ASDT32 will deactivate your DR0-DR3 
  4045.            settings for various reasons that generally deal with the fact that 
  4046.            the PID under which you set DR0-DR3 has been switched out or 
  4047.            terminated.  T0 ON will reactivate any suspended hardware debug 
  4048.            register setting and will associate the current PID with it. 
  4049.  
  4050.  
  4051. ΓòÉΓòÉΓòÉ 12.59. T1-T4 - Set Hardware Debug Registers ΓòÉΓòÉΓòÉ
  4052.  
  4053.  Purpose:  Sets the hardware debug registers (DR0-DR3). 
  4054.  
  4055.            Each DRx is set by using the Tn command where n is 1-4 and x=n-1. 
  4056.            ASDT32 uses the information specified with the T1-T4 commands to 
  4057.            load DR0-DR3 and DR7 upon return to OS/2. 
  4058.  
  4059.  Format:   Tn [= opnds or ON or OFF] 
  4060.  
  4061.            n            The DRx register to be set (x=n-1);  e.g., the T4 
  4062.                         command sets DR3. 
  4063.  
  4064.            null         ASDT32 retrieves information about DRx's current 
  4065.                         setting and places this data on the command line for 
  4066.                         review or editing. 
  4067.  
  4068.            opnds        operands (addr,action,len,context,exact) that must 
  4069.                         appear in this order.  Only addr is required. 
  4070.  
  4071.                         addr         Any ASDT32 expression that defines the 
  4072.                                      address that you want DRx to monitor.  A 
  4073.                                      virtual address will have ASDT32 calculate 
  4074.                                      the linear address. 
  4075.  
  4076.                                      Note:  The hardware debug registers are 
  4077.                                      loaded with linear addresses. Hence, 
  4078.                                      ASDT32 will not accept a physical address 
  4079.                                      for the T1-T4 commands. 
  4080.  
  4081.                         action       I (breaks on instruction execution only), 
  4082.                                      W (breaks on data writes only), or R 
  4083.                                      (breaks on data reads or writes but not on 
  4084.                                      instruction fetches).  The default action 
  4085.                                      is W. 
  4086.  
  4087.                         len          1, 2, or 4 to specify the length of the 
  4088.                                      data item to be monitored. The hardware 
  4089.                                      requires that multiple-byte fields be 
  4090.                                      aligned on their proper boundaries.  For 
  4091.                                      the I action, ASDT32 will force the length 
  4092.                                      byte to 1.  The default length is 1 byte. 
  4093.  
  4094.                         context      G (global level) or L (local level).  The 
  4095.                                      default context is global. 
  4096.  
  4097.                         exact        E (exact data breakpoint match) or ^ (for 
  4098.                                      inexact data breakpoint match).  The Intel 
  4099.                                      processor slows the execution so that data 
  4100.                                      breakpoints are reported on the 
  4101.                                      instruction that causes them when the 
  4102.                                      exact option is indicated.  The default is 
  4103.                                      exact. 
  4104.  
  4105.            ON           Reactivates DRx. 
  4106.  
  4107.            OFF          Suspends DRx. 
  4108.  
  4109.  Examples: T1 5F:0245,I 
  4110.  
  4111.            Sets DR0 to stop on instructions referenced at the corresponding 
  4112.            linear address (to which 5F:0245 resolves). 
  4113.  
  4114.            T2 123456,R,2,G,^ 
  4115.  
  4116.            Sets DR1 to stop on data reads/writes from/to this linear address 
  4117.            without the exact option. 
  4118.  
  4119.            T3 OFF 
  4120.  
  4121.            Deactivates DR2. 
  4122.  
  4123.            T1 
  4124.  
  4125.            Places the current settings associated with DR0 on the ASDT32 
  4126.            command line for review or editing. 
  4127.  
  4128.  Remarks:  In general, ASDT32 is allowing you to set the hardware debug 
  4129.            registers as mentioned in the Intel 80386 Programmer's Reference. 
  4130.            You should acquaint yourself with this reference guide before using 
  4131.            the T1-T4 commands. 
  4132.  
  4133.            The hardware automatically resets the local enable bits of DR7 at 
  4134.            every task switch to avoid unwanted breakpoint conditions in the new 
  4135.            task.  However, OS/2 does not implement hardware task switching. 
  4136.            Hence, ASDT32 does the best it can to determine when a hardware 
  4137.            debug register is "truly" hit for your settings; i.e., if you use 
  4138.            local context, ASDT32 looks to see if the current PID matches the 
  4139.            one that was in effect when you set DRx.  If the PIDs do not match, 
  4140.            ASDT32 disables the local context DRx, and returns control to OS/2. 
  4141.  
  4142.            Note:  Global context means that ASDT32 will not check DRx's PID. 
  4143.            ASDT32 just assumes that you always want the trap. The same holds 
  4144.            true for all linear address DRx settings above the 512M line.  Even 
  4145.            so, ASDT32 will deactivate a DRx with a global context if it 
  4146.            determines that the address does not involve code above the 512M 
  4147.            line and its PID has been killed. 
  4148.  
  4149.            See T0 - Suspend/Reactivate Hardware Debug Registers for a method 
  4150.            that allows you to suspend or reactivate all 4 DR0-DR3 registers at 
  4151.            once. 
  4152.  
  4153.  
  4154. ΓòÉΓòÉΓòÉ 12.60. UM - User Mask ΓòÉΓòÉΓòÉ
  4155.  
  4156.  Purpose:  Displays and optionally sets the interrupt controller mask while 
  4157.            ASDT32 has processor control. 
  4158.  
  4159.  Format:   UM [= value] 
  4160.  
  4161.            value        The interrupt mask value (must evaluate to '00'x 
  4162.                         through 'FF'x). 
  4163.  
  4164.  Examples: UM 
  4165.  
  4166.            Displays the current ASDT32 mask for the 8259 interrupt levels. 
  4167.  
  4168.            UM BC 
  4169.  
  4170.            Sets the user mask to 'BC'x, which allows only the keyboard and 
  4171.            diskette interrupts while ASDT32 has control (assuming that these 
  4172.            interrupts were not disabled by your program). 
  4173.  
  4174.  Remarks:  ASDT32 will not let you set a value which disables the keyboard. 
  4175.  
  4176.            When ASDT32 gets control, ASDT32 saves the current interrupt mask 
  4177.            register (I/O port '21'x). It then ORs the value you select with the 
  4178.            current mask. 
  4179.  
  4180.            Note:  This means you cannot enable interrupts in ASDT32 that were 
  4181.            disabled in your program. 
  4182.  
  4183.            ASDT32 initializes the user mask to '00'x.  You can specify another 
  4184.            initial value for ASDT32 with the /U=nn parameter used by ASDT32 
  4185.            during installation (nn represents the byte that you want to serve 
  4186.            as the user mask). 
  4187.  
  4188.            The UM command allows you to specify which 8259 interrupt levels are 
  4189.            to be masked off while in ASDT32.  However, when ASDT32 returns 
  4190.            control to your program (via the EX, HT, ST, and TP commands), it 
  4191.            restores the previously saved interrupt mask register value. 
  4192.  
  4193.            Because of the complex nature of this command, only those familiar 
  4194.            with 8259 interrupt levels and operation should use it. 
  4195.  
  4196.  
  4197. ΓòÉΓòÉΓòÉ 12.61. VR - Version ΓòÉΓòÉΓòÉ
  4198.  
  4199.  Purpose:  Displays the ASDT32 version number and release date. 
  4200.  
  4201.  Format:   VR 
  4202.  
  4203.  Examples: VR 
  4204.  
  4205.            Displays the version number and release date for the ASDT32 that you 
  4206.            have installed. 
  4207.  
  4208.  Remarks:  To support OS/2 3.0, some information had to be removed from the 
  4209.            ASDT32 screen.  The least painful to squirrel away was the release 
  4210.            information.  You can now view this data via the VR command. 
  4211.  
  4212.  
  4213. ΓòÉΓòÉΓòÉ 12.62. VW - IDT Window ΓòÉΓòÉΓòÉ
  4214.  
  4215.  Purpose:  Switches to IDT Window Mode. 
  4216.  
  4217.  Format:   VW 
  4218.  
  4219.  Examples: VW 
  4220.  
  4221.            ASDT32 switches the edit portion of the ASDT32 display to an IDT 
  4222.            window and sets the primary window mode to IDT. 
  4223.  
  4224.  Remarks:  The IDT window displays descriptor table entries in a decoded, 
  4225.            readable format. Each table entry line displays one descriptor table 
  4226.            entry. 
  4227.  
  4228.            ASDT32 displays the primary window at the beginning of line 8 on the 
  4229.            ASDT32 screen. The IDT window is not editable, but you can scroll 
  4230.            the entries displayed.  See Moving on the Command Line for a listing 
  4231.            of the command line scrolling keys and their function. See NW - Next 
  4232.            Window for the NW command, which switches among all types of ASDT32 
  4233.            windows. 
  4234.  
  4235.  
  4236. ΓòÉΓòÉΓòÉ 12.63. V1-V9 - Set Variables V1-V9 ΓòÉΓòÉΓòÉ
  4237.  
  4238.  Purpose:  Sets the scratch pad/breakpoint variables that are displayed only on 
  4239.            the ASDT32 CB display screen. 
  4240.  
  4241.            Each breakpoint is set via any of the four addressing schemes that 
  4242.            ASDT32 employs. It is displayed as an 8-higit address, an offset 
  4243.            from CS or CO, as an offset from some selector, or as "........" to 
  4244.            indicate that the breakpoint is null. 
  4245.  
  4246.  Format:   Vn [= expr or ON or OFF] 
  4247.  
  4248.            n            The V breakpoint to be manipulated. 
  4249.  
  4250.            expr         Any ASDT32 expression. 
  4251.  
  4252.            ON           Activates Vn as a breakpoint. 
  4253.  
  4254.            OFF          Suspends Vn as a breakpoint. 
  4255.  
  4256.  Examples: V1 = CS:EIP + 2B8 
  4257.  
  4258.            Adds '02B8'x to the current program counter and places the result in 
  4259.            the V1 variable. 
  4260.  
  4261.            V2 = V1 + AX 
  4262.  
  4263.            Places the sum of the contents of variable V1 and the AX register 
  4264.            into the V2 variable. 
  4265.  
  4266.            V5 = CO:CX;V5 ON 
  4267.  
  4268.            Sets the V5 breakpoint to the current code origin plus the contents 
  4269.            of the CX register and activates the breakpoint. The breakpoint is 
  4270.            displayed with a leading "$" if CX is < 4K. 
  4271.  
  4272.  Remarks:  Since these variables are not displayed on the primary screen, 
  4273.            ASDT32 shows you a confirmation message indicating the variable name 
  4274.            and value each time one of these variables is set. 
  4275.  
  4276.            V1 = 111111 + 222222 
  4277.  
  4278.            produces the confirmation message 
  4279.  
  4280.            V1 = 333333 
  4281.  
  4282.            In order to display the contents of one of these variables, you can 
  4283.            copy the variable into itself to produce a confirmation message 
  4284.            (V8=V8). 
  4285.  
  4286.            At times, it may be useful to use one or more of the V1-V9 variables 
  4287.            as address stops (breakpoints). ASDT32 displays active breakpoints 
  4288.            in a relative address format if possible. A relative address is 
  4289.            designated by "$" for CO, "+" for CS, or "#" for any other selector 
  4290.            when the breakpoint is not a linear or physical address. "&" is used 
  4291.            to denote a virtual 8086 mode breakpoint, which is neither a linear 
  4292.            or physical address. 
  4293.  
  4294.            Linear address breakpoints have no designating character whereas 
  4295.            physical address breakpoints are designated by "!." 
  4296.  
  4297.            The default state for the V breakpoints is inactive. See Setting 
  4298.            Breakpoints and S1-S9 - Set Breakpoints S1-S9 for more information. 
  4299.  
  4300.            Note:  ASDT32 highlights active V1-V9 breakpoints on the ASDT32 CB 
  4301.            display screen. See CB - Complex Breakpoint for details on how to 
  4302.            view your V1-V9 variables. Once you activate a variable with an ON 
  4303.            operand, it remains activated until it is deactivated either with an 
  4304.            OFF operand or by being set to null. 
  4305.  
  4306.            Note:  ASDT32 will not reactivate a breakpoint for a process or 
  4307.            thread that has terminated.  This is due to the fact that every 
  4308.            breakpoint has a process id, a thread id, and an LDT associated with 
  4309.            it when it is set.  You may deactivate and reactivate the breakpoint 
  4310.            while its associated information is still valid, but you can not 
  4311.            reactivate it once its thread has been terminated.  If you want to 
  4312.            reactivate a screen's breakpoints and associate their addresses with 
  4313.            the current process id, thread id, and LDT, then issue a Dn ON 
  4314.            command. See D1-D9 - Select Display for more information. 
  4315.  
  4316.            Note:  When in virtual 8086 mode, you will set segment:offset 
  4317.            breakpoints when you use virtual addressing schemes.  Linear and 
  4318.            physical addressing schemes work the same as for protected mode. For 
  4319.            a virtual address breakpoint, ASDT32 may substitute a symbol name in 
  4320.            the breakpoint's display area. This assumes that the breakpoint 
  4321.            address corresponds to some symbol read in.  Note that code origin 
  4322.            usage will override this substitution process; i.e., if "$" is 
  4323.            present in the breakpoint display area, ASDT32 will not substitute 
  4324.            the offset address with a symbol name. 
  4325.  
  4326.            A breakpoint command with a null operand sets the breakpoint to 
  4327.            null. 
  4328.  
  4329.            You can change active breakpoints into complex breakpoints with the 
  4330.            CB command. See Setting Breakpoints and CB - Complex Breakpoint for 
  4331.            more information. 
  4332.  
  4333.  
  4334. ΓòÉΓòÉΓòÉ 12.64. WA - Window Assumptions ΓòÉΓòÉΓòÉ
  4335.  
  4336.  Purpose:  Causes ASDT32 to make assumptions about the selector used for 
  4337.            setting the window, breakpoint, and CO variables during assignment 
  4338.            commands. 
  4339.  
  4340.  Format:   WA [ON or OFF] 
  4341.  
  4342.  Examples: WA ON 
  4343.  
  4344.            Causes ASDT32 to use window assumptions. 
  4345.  
  4346.            WA OFF 
  4347.  
  4348.            Causes ASDT32 to stop using window assumptions. 
  4349.  
  4350.  Remarks:  Window assumptions affect assignments to the window, breakpoint, and 
  4351.            CO variables.  Some examples follow that result when ASDT32 is using 
  4352.            window assumptions: 
  4353.  
  4354.                             CO 35        -  CO gets CS:35
  4355.                             S8 12345678  -  S8 gets CO+12345678 or CS:12345678 depending on
  4356.                                             whether the code origin is set
  4357.                             L1 EIP       -  L1 gets CS:EIP if CO is null
  4358.                             L1 LC        -  L1 gets CO+LC if CO is set
  4359.  
  4360.            Note:  If you specify a source constant or variable that consists of 
  4361.            a selector and an offset, ASDT32 will use that selector and offset. 
  4362.  
  4363.            The /W option causes ASDT32 to use window assumptions, too. 
  4364.  
  4365.  
  4366. ΓòÉΓòÉΓòÉ 12.65. WI - What is Address ΓòÉΓòÉΓòÉ
  4367.  
  4368.  Purpose:  Matches an address to its corresponding symbol (if found). 
  4369.  
  4370.  Format:   WI addr 
  4371.  
  4372.            addr         any ASDT32 expression that determines a selector:offset 
  4373.                         address that you wish to check for a symbol match. 
  4374.  
  4375.  Examples: WI CS:500 
  4376.  
  4377.            Displays the name of a symbol on the message line if the address 
  4378.            matches that of any symbol. 
  4379.  
  4380.  Remarks:  WI is the inverse function of specifying a symbol name on the 
  4381.            command line.  This is useful to poll any given virtual address to 
  4382.            see if it matches up with some symbol. 
  4383.  
  4384.            Each symbol that could match up with the specified address needs to 
  4385.            have its segment number qualified. If you do not qualify a segment 
  4386.            number, ASDT32 defaults all segment numbers to be qualified by 0 
  4387.            (the null selector). ASDT32 will try to guess what selector should 
  4388.            be associated with a zero-qualified segment using segment length 
  4389.            data located in the LDT and GDT entries.  This procedure is not 
  4390.            guaranteed to succeed.  Hence, when it fails, you should qualify the 
  4391.            segment number via the QS command. See QS - Qualify Segment Number 
  4392.            for information about qualifying a segment number. 
  4393.  
  4394.  
  4395. ΓòÉΓòÉΓòÉ 12.66. XS - Extra Selector Register ΓòÉΓòÉΓòÉ
  4396.  
  4397.  Purpose:  Alters the contents of the extra selector register variable. 
  4398.  
  4399.  Format:   XS [= expr] 
  4400.  
  4401.            expr         Any ASDT32 expression. 
  4402.  
  4403.  Examples: XS = 1C42 
  4404.  
  4405.            Places the value '1C42'x into the XS variable. 
  4406.  
  4407.            XS = CS 
  4408.  
  4409.            Copies the contents of the CS register into the XS variable. 
  4410.  
  4411.  Remarks:  To save and restore selector register contents, use the XS segment 
  4412.            register variable. ASDT32 treats XS just like a real selector 
  4413.            register. 
  4414.  
  4415.            ASDT32 uses only the least significant 16 bits that result from an 
  4416.            expression evaluation to set the XS variable. ASDT32 truncates any 
  4417.            additional bits and displays a warning message. 
  4418.  
  4419.            A null operand sets the XS variable to zero. 
  4420.  
  4421.  
  4422. ΓòÉΓòÉΓòÉ 13. ASDT32 Messages ΓòÉΓòÉΓòÉ
  4423.  
  4424. This section describes all of the messages that may appear on the ASDT32 
  4425. display screen message line. A message either indicates that an action was 
  4426. taken or describes an error that has occurred. 
  4427.  
  4428. If you have trouble understanding an error or what action to take in response 
  4429. to an error, refer to the appropriate command in ASDT32 Command Reference. 
  4430.  
  4431. Messages are listed by subject. 
  4432.  
  4433.  
  4434. ΓòÉΓòÉΓòÉ 13.1. General Messages ΓòÉΓòÉΓòÉ
  4435.  
  4436.  ADDRESSED PAGE IS NOT PRESENT You are trying to use a (resolved) linear 
  4437.    address whose corresponding page is not present.  Hence, ASDT32 can not 
  4438.    complete the command. 
  4439.  
  4440.  ASDT32  VERSION x.x  mm/dd/yy The VR command lists the current version and 
  4441.    release date for ASDT32. 
  4442.  
  4443.  BREAKPOINT(S) DEACTIVATED ASDT32 deactivated at least one breakpoint.  This 
  4444.    usually happens due to the fact that some process or thread has terminated, 
  4445.    and ASDT32 can no longer track breakpoints with that process or thread. 
  4446.  
  4447.  COMMAND "xx" NOT RECOGNIZED The command you issued is not a valid ASDT32 
  4448.    command. 
  4449.  
  4450.  DOUBLE FAULT WON'T ALLOW THIS The command you issued is not legal once ASDT32 
  4451.    has captured a double fault.  This is largely due to the fact that the 
  4452.    machine and the operating system are not trustworthy at this point. 
  4453.  
  4454.  INVALID SELECTOR SPECIFIED The selector you have specified for some ASDT32 
  4455.    command is invalid. 
  4456.  
  4457.  INT '51'X Your program generated a protected-mode interrupt '51'x.  ASDT32 
  4458.    uses this special interrupt to get keystrokes. 
  4459.  
  4460.  LDT BASE ADDRESS HAS CHANGED You tried to execute an ASDT32 command that 
  4461.    requires the LDT to be what it was upon entry. 
  4462.  
  4463.  SYMFILE NOT ENTIRELY READ IN ASDT32 has a 192KB limit on the total number of 
  4464.    bytes it will read in for a symbol file. 
  4465.  
  4466.  
  4467. ΓòÉΓòÉΓòÉ 13.2. Invocation Messages ΓòÉΓòÉΓòÉ
  4468.  
  4469.  DIVIDE-BY-ZERO INTERRUPT (0) ASDT32 gained control via a divide by zero 
  4470.    interrupt. This usually indicates an error in your program, but does not 
  4471.    necessarily indicate a division error. 
  4472.  
  4473.  ERROR READING PROFILE: xxxxxxx ASDT32 failed when it tried to read in a 
  4474.    profile due to some specification by you in the CONFIG.SYS file. 
  4475.  
  4476.  GENERAL PROTECTION FAULT xxxx ASDT32 gained control because an INT '0D'x 
  4477.    occurred.  This indicates that there was a general protection fault. The 
  4478.    error code is shown and is retained in the ASDT32 variable, EC. 
  4479.  
  4480.  HOT KEY INTERRUPT ASDT32 gained control because you typed the currently 
  4481.    defined hot key. The hot key yields control to ASDT32 if you have issued an 
  4482.    SK command or if you invoked ASDT32 with the /K option. 
  4483.  
  4484.  INVALID OPCODE INTERRUPT (6) ASDT32 gained control because an invalid opcode 
  4485.    was detected by the execution unit or the type of operand is invalid for the 
  4486.    given opcode. 
  4487.  
  4488.  NMI SWITCH INTERRUPT (2) ASDT32 gained control due to an INT 2 being issued. 
  4489.    This usually means that you hit the NMI switch. 
  4490.  
  4491.  PARAMETER UNRECOGNIZED: /x ASDT32 did not recognize an invocation parameter 
  4492.    that you specified in the CONFIG.SYS file. 
  4493.  
  4494.  SINGLE STEP TRAP INTERRUPT (1) ASDT32 gained control because the trap flag 
  4495.    (TF) was set while the processor was executing an instruction. You may clear 
  4496.    this flag with the TF command and continue if desired. 
  4497.  
  4498.  STACK LIMIT VIOLATION ASDT32 gained control because an INT '0C'x occurred. 
  4499.    This indicates that the stack limit was violated. 
  4500.  
  4501.  386 DEBUG REGISTER TRAP (DRn) ASDT32 gained control because the 80386 hardware 
  4502.    debug register n signalled an event. 
  4503.  
  4504.  
  4505. ΓòÉΓòÉΓòÉ 13.3. Expression Evaluation Messages ΓòÉΓòÉΓòÉ
  4506.  
  4507.  CAN'T CONVERT ADDR TO PHYSICAL You have changed the linear base address of the 
  4508.    LDT (using the LD command), and you are now trying to convert some address 
  4509.    to its corresponding physical address.  ASDT32 assumes that you want to know 
  4510.    the physical address relative to the LDT that you are investigating, and 
  4511.    ASDT32 can not convert the address because the associated data has been 
  4512.    swapped out from physical memory. 
  4513.  
  4514.  COULDN'T FIND SPECIFIED SYMBOL The symbol name specified was not matched in 
  4515.    the symbol file read in. 
  4516.  
  4517.  EXPRESSION CAUSES OVERFLOW Your expression requires more precision than ASDT32 
  4518.    provides. 
  4519.  
  4520.  PHYSICAL ADDRESS NOT ALLOWED You have tried to convert a physical address to 
  4521.    another form of address.  ASDT32 does not allow this. 
  4522.  
  4523.  SEGMENT NUMBER MUST BE < 257 ASDT32 currently supports LNK386 map segment 
  4524.    numbers 1-256. 
  4525.  
  4526.  SYMBOLS WERE NOT READ IN You have tried to use a symbol name (via the trigger 
  4527.    '@'), and no symbol file was read in by ASDT32. 
  4528.  
  4529.  UNRECOGNIZED OPERAND:  xxxxxxxx A term in the command expression you entered 
  4530.    is not valid. 
  4531.  
  4532.  WARNING: OPERAND TRUNCATED This message warns you that the operand you 
  4533.    specified is too large to fit in the target register or variable. ASDT32 
  4534.    fits as much as possible and truncates the rest. 
  4535.  
  4536.  
  4537. ΓòÉΓòÉΓòÉ 13.4. "CA" Command Messages ΓòÉΓòÉΓòÉ
  4538.  
  4539.  UNRECOGNIZED OPERAND:  xx A term in the operand expression you entered is not 
  4540.    valid. Either you incorrectly specified the type of attribute that you 
  4541.    wanted set (must be one of N, F, H, or R), or you gave an invalid value for 
  4542.    the attribute. 
  4543.  
  4544.  
  4545. ΓòÉΓòÉΓòÉ 13.5. "CB" Command Messages ΓòÉΓòÉΓòÉ
  4546.  
  4547.  BREAKPOINT IS NOT ACTIVE You attempted to set a complex breakpoint when that 
  4548.    breakpoint was inactive. Activate or set the breakpoint address before 
  4549.    setting up the complex condition and count. 
  4550.  
  4551.  BREAKPOINT IS NOT COMPLEX You have requested to see the complex definition of 
  4552.    a particular breakpoint, but that breakpoint is not complex. 
  4553.  
  4554.  BREAKPOINT NOT RECOGNIZED The complex breakpoint you have attempted to set is 
  4555.    not a valid breakpoint. 
  4556.  
  4557.  COMPLEX BREAKPOINT DEACTIVATED A complex breakpoint's occurrence count has 
  4558.    matched the count, and ASDT32 has taken the breakpoint. ASDT32 deactivates 
  4559.    the breakpoint. 
  4560.  
  4561.  CONDITION MUST BE < 16 CHARS ASDT32 limits a complex condition field to 15 
  4562.    characters. 
  4563.  
  4564.  COUNT FIELD EXPRESSION INVALID You have specified an unrecognized ASDT32 
  4565.    expression for the count field. 
  4566.  
  4567.  OCCURRENCE COUNT = xx ASDT32 displays the complex condition and count for the 
  4568.    breakpoint you requested. 
  4569.  
  4570.  SYNTAX: CB SX CONDITION,COUNT ASDT32 displays the syntax for the command. 
  4571.  
  4572.  VALID OPERATOR NOT FOUND ASDT32 expects one of the following logical operators 
  4573.    for a complex condition:  <, >, =, <=, >=, or <>. 
  4574.  
  4575.  1ST EXPRESSION IS INVALID You have requested an unrecognized ASDT32 expression 
  4576.    for the left half of the complex breakpoint condition. 
  4577.  
  4578.  2ND EXPRESSION IS INVALID You have requested an unrecognized ASDT32 expression 
  4579.    for the right half of the complex breakpoint condition. 
  4580.  
  4581.  
  4582. ΓòÉΓòÉΓòÉ 13.6. "CG" Command Messages ΓòÉΓòÉΓòÉ
  4583.  
  4584.  USING REMOTE TERMINAL ASDT32 is using the remote terminal display because this 
  4585.    configuration has been selected. 
  4586.  
  4587.  USING SINGLE SCREEN ASDT32 is using the primary display because the remote 
  4588.    terminal configuration has been reset. 
  4589.  
  4590.  
  4591. ΓòÉΓòÉΓòÉ 13.7. "CM" Command Messages ΓòÉΓòÉΓòÉ
  4592.  
  4593.  INVALID ADDRESSING EXPRESSION One of the two memory addressing expressions is 
  4594.    not acceptable to ASDT32. 
  4595.  
  4596.  LENGTH FIELD EVALUATES TO 0 You have specified an ASDT32 expression for the 
  4597.    length field that evaluates to 0.  Hence, the command is not executed. 
  4598.  
  4599.  SEGMENT LIMIT WILL BE VIOLATED A segment limit violation will occur if ASDT32 
  4600.    compares the two memory blocks for the length that you have specified. 
  4601.  
  4602.  SYNTAX: CM ADDR1,ADDR2,LENGTH ASDT32 displays the syntax for the command. 
  4603.  
  4604.  xxx OF xxxxx MISMATCHES ASDT32 is comparing the two memory blocks and is 
  4605.    displaying as much of the two blocks as possible. The number of mismatches 
  4606.    shown on the screen and the total number of mismatches are displayed. 
  4607.  
  4608.  
  4609. ΓòÉΓòÉΓòÉ 13.8. "CP" Command Messages ΓòÉΓòÉΓòÉ
  4610.  
  4611.  INVALID ADDRESSING EXPRESSION One of the two memory addressing expressions is 
  4612.    not acceptable to ASDT32. 
  4613.  
  4614.  LENGTH FIELD EVALUATES TO 0 You have specified an ASDT32 expression for the 
  4615.    length field that evaluates to 0.  Hence, the command is not executed. 
  4616.  
  4617.  SEGMENT LIMIT WILL BE VIOLATED A segment limit violation will occur if ASDT32 
  4618.    copies the memory block to the indicated destination for the length that you 
  4619.    have specified. 
  4620.  
  4621.  SYNTAX: CP ADDR1,ADDR2,LENGTH ASDT32 displays the syntax for the command. 
  4622.  
  4623.  
  4624. ΓòÉΓòÉΓòÉ 13.9. "DK" Command Messages ΓòÉΓòÉΓòÉ
  4625.  
  4626.  FUNCTION KEY BUFFER IS FULL You have exceeded the amount of space ASDT32 has 
  4627.    set up for commands associated with function keys. The total amount of space 
  4628.    for function key commands is 800 bytes. 
  4629.  
  4630.  KEY IS NOT DEFINED You pressed a function key that has not been defined. No 
  4631.    action was taken by ASDT32. 
  4632.  
  4633.  KEY "xxxxx" DEFINED The function key definition you specified was added to the 
  4634.    list of function keys. 
  4635.  
  4636.  KEY "xxxxx" DEFINITION REMOVED The function key definition you specified was 
  4637.    removed from the list of function keys. 
  4638.  
  4639.  
  4640. ΓòÉΓòÉΓòÉ 13.10. "DW," "MW," "LW," and "VW" Command Messages ΓòÉΓòÉΓòÉ
  4641.  
  4642.  INVALID DESCRIPTOR You tried to use L1-M6 as a source variable while you were 
  4643.    in an LDT/GDT or IDT window, and the descriptor that was referenced is not 
  4644.    valid. 
  4645.  
  4646.  OPERAND NOT ALLOWED ASDT32 does not allow an LDT/GDT or IDT secondary window. 
  4647.  
  4648.  
  4649. ΓòÉΓòÉΓòÉ 13.11. "EP" Command Messages ΓòÉΓòÉΓòÉ
  4650.  
  4651.  ASDT32 PROFILE WAS NOT READ IN No profile was read in during the 
  4652.    initialization phase.  Hence, the EP command can not be executed. 
  4653.  
  4654.  COMMAND TOO LONG - ABORTED A command in the specified profile is too long to 
  4655.    fit on ASDT32's command line. 
  4656.  
  4657.  PROFILE NOT ENTIRELY READ IN ASDT32 has a limit on the total number of bytes 
  4658.    it will read in for a profile during the initialization phase. If your 
  4659.    profile contains more than 1600 bytes, it will be truncated. 
  4660.  
  4661.  
  4662. ΓòÉΓòÉΓòÉ 13.12. "ET" Command Messages ΓòÉΓòÉΓòÉ
  4663.  
  4664.  ET COMMAND REQUIRES AN OPERAND This command requires a breakpoint expression 
  4665.    as an operand. 
  4666.  
  4667.  XXXXXXXXXX MICROSECONDS TAKEN The elapsed time interval is reported to you in 
  4668.    microseconds. 
  4669.  
  4670.  
  4671. ΓòÉΓòÉΓòÉ 13.13. "EX" Command Messages ΓòÉΓòÉΓòÉ
  4672.  
  4673.  ASDT32 CAN NOT SINGLE STEP This message informs you that ASDT32 can not single 
  4674.    step the current instruction taken as CS:EIP. Generally, this implies that 
  4675.    you changed either the CS or EIP register such that ASDT32 can not resume 
  4676.    your program.  ASDT32 single steps the first instruction before it EXecutes 
  4677.    your program so that you do not spin on a breakpoint. 
  4678.  
  4679.  EX COMMAND ALLOWS NO OPERANDS You specified an operand with the EX command, 
  4680.    and ASDT32 will not allow operands to be used with the EX command. 
  4681.  
  4682.  
  4683. ΓòÉΓòÉΓòÉ 13.14. "F," "FA," "FC," "FE," and "FX" Command Messages ΓòÉΓòÉΓòÉ
  4684.  
  4685.  STRING xxxxxxxx NOT FOUND The search string you requested could not be found. 
  4686.  
  4687.  xxxxxxxx FOUND AT xxxxxxxx The search string you requested was found at the 
  4688.    memory location displayed at the right. 
  4689.  
  4690.  * OR SELECTOR EXPR REQUIRED You have a "," delimiter, which indicates the need 
  4691.    for either a following "*" (task search indicator) or ASDT32 selector 
  4692.    expression (for a single segment search). 
  4693.  
  4694.  
  4695. ΓòÉΓòÉΓòÉ 13.15. "HT" and "RT" Command Messages ΓòÉΓòÉΓòÉ
  4696.  
  4697.  ASDT32 CAN NOT RESUME THE THREAD ASDT32 can not resume a halted thread because 
  4698.    that thread has terminated or ASDT32 could not locate the process in 
  4699.    question. 
  4700.  
  4701.  CS:EIP DOES NOT ALLOW FOR HALT The current CS:EIP locates an instruction that 
  4702.    is invalid. Usually, this means that the linear address is not mapped. 
  4703.    Occasionally, it means that there is only one byte left for the segment, and 
  4704.    the HT command needs two bytes for the J * opcode and operand. 
  4705.  
  4706.  HT COMMAND ALLOWS NO OPERANDS You specified an operand with the HT command, 
  4707.    and ASDT32 will not allow operands to be used with the HT command. 
  4708.  
  4709.  NO HALTING AT A BREAKPOINT ASDT32 will not allow you to halt a thread at a 
  4710.    breakpoint.  This is due to the fact that ASDT32 inserts your breakpoints 
  4711.    for you before it halts the thread. 
  4712.  
  4713.  NO THREADS CURRENTLY HALTED ASDT32 can not resume any threads because none are 
  4714.    halted. 
  4715.  
  4716.  PID SPECIFIED IS NOT FROZEN ASDT32 can not resume a specific thread of the 
  4717.    process id (PID) that you specified because it did not halt a thread of that 
  4718.    particular PID. 
  4719.  
  4720.  TOO MANY THREADS HALTED ASDT32 currently allows only ten threads to be halted 
  4721.    at the same time. 
  4722.  
  4723.  
  4724. ΓòÉΓòÉΓòÉ 13.16. "IB," "IW," "OB," and "OW" Command Messages ΓòÉΓòÉΓòÉ
  4725.  
  4726.  VALUE xxxx OUTPUT TO PORT xxxx This message lists the port to which you wrote 
  4727.    data and the value of that data. 
  4728.  
  4729.  VALUE xxxx READ FROM PORT xxxx This message listed the port from which you 
  4730.    read data and the value of that data. 
  4731.  
  4732.  
  4733. ΓòÉΓòÉΓòÉ 13.17. "LD" Command Messages ΓòÉΓòÉΓòÉ
  4734.  
  4735.  INVALID DESCRIPTOR You tried to use an index that referenced a descriptor that 
  4736.    is not a valid LDT descriptor. 
  4737.  
  4738.  INVALID LDT BASE ADDRESS You tried to alter the current LDT base address to a 
  4739.    linear address that is not the start of a valid LDT. 
  4740.  
  4741.  PHYSICAL ADDRESS NOT ALLOWED You can not set the base address of the current 
  4742.    LDT to a physical address.  ASDT32 allows linear base addresses for this 
  4743.    command. 
  4744.  
  4745.  
  4746. ΓòÉΓòÉΓòÉ 13.18. "L1-M6" and "M7-M9" Command Messages ΓòÉΓòÉΓòÉ
  4747.  
  4748.  CAN'T SET "xx" IN THIS WINDOW You have a split disassembly/memory window and 
  4749.    have tried to set a second window segment in the secondary window. ASDT32 
  4750.    allows only one secondary window segment (e.g., one memory window in 
  4751.    disassembly mode). 
  4752.  
  4753.  Mx = xxxxxxxx ASDT32 has set the contents of the displayed variable as shown 
  4754.    (e.g., M7 = 99903A65 or Mx = 1234:908DC9AF). 
  4755.  
  4756.  PHYSICAL ADDRESS NOT ALLOWED You can not set a line variable in the page 
  4757.    window to a physical address.  ASDT32 allows linear base addresses for these 
  4758.    commands when the page window is displayed. 
  4759.  
  4760.  
  4761. ΓòÉΓòÉΓòÉ 13.19. "NP" Command Messages ΓòÉΓòÉΓòÉ
  4762.  
  4763.  CS:EIP DOES NOT ALLOW FOR NP The current CS:EIP locates an instruction that 
  4764.    dose not allow ASDT32 to page in memory.  ASDT32 pages in memory by 
  4765.    referencing said memory in your instruction stream.  This is accomplished 
  4766.    via a LB opcode and a single step that is transparent to you.  If the 
  4767.    current instruction does not allow for this transaction, ASDT32 can not page 
  4768.    in memory. 
  4769.  
  4770.  ENVIRONMENT WILL NOT PERMIT NP ASDT32 can not page in memory while you are 
  4771.    currently running at level 0. 
  4772.  
  4773.  INVALID ADDRESSING EXPRESSION The address that you specified is not acceptable 
  4774.    to ASDT32. 
  4775.  
  4776.  NP COMMAND REQUIRES AN OPERAND This command requires an address expression as 
  4777.    an operand. 
  4778.  
  4779.  PAGE IS ALREADY PRESENT The address that you specified yields a page that is 
  4780.    already in memory. 
  4781.  
  4782.  PHYSICAL ADDRESS NOT ALLOWED You have specified a physical address to be paged 
  4783.    in.  This makes no sense to ASDT32 as the address specified must be virtual 
  4784.    or linear. 
  4785.  
  4786.  
  4787. ΓòÉΓòÉΓòÉ 13.20. "PD and PM" Command Messages ΓòÉΓòÉΓòÉ
  4788.  
  4789.  PRINT CANCELLED DUE TO ERROR ASDT32 detected a problem with the printer.  The 
  4790.    printing operation has been terminated. 
  4791.  
  4792.  SEGMENT LIMIT WOULD OVERFLOW A segment limit violation would occur if ASDT32 
  4793.    prints the disassembly or memory block for the length that you have 
  4794.    specified. 
  4795.  
  4796.  UNRECOGNIZED OPERAND xx The comport number entered is invalid. 
  4797.  
  4798.  
  4799. ΓòÉΓòÉΓòÉ 13.21. "PI" Command Messages ΓòÉΓòÉΓòÉ
  4800.  
  4801.  ASDT32 CAN NOT LOCATE THE PATH ASDT32 can not find the current thread's 
  4802.    invocation path.  This happens most often with device drivers during the 
  4803.    initialization phase. 
  4804.  
  4805.  BREAKPOINT IS NOT SET The breakpoint you have attempted to use as a parameter 
  4806.    to the PI command is valid, but it has no value associated with it.  Hence, 
  4807.    it has no process or thread associated with it either. 
  4808.  
  4809.  BREAKPOINT NOT RECOGNIZED The breakpoint you have attempted to use as a 
  4810.    parameter to the PI command is not valid. 
  4811.  
  4812.  C:\TEST\BIN\TEST.EXE This is an example of a successful program identification 
  4813.    by ASDT32. 
  4814.  
  4815.  
  4816. ΓòÉΓòÉΓòÉ 13.22. "PR" Command Messages ΓòÉΓòÉΓòÉ
  4817.  
  4818.  PRINT CANCELLED DUE TO ERROR ASDT32 detected a problem with the printer.  The 
  4819.    printing operation has been terminated. 
  4820.  
  4821.  
  4822. ΓòÉΓòÉΓòÉ 13.23. "QS" Command Messages ΓòÉΓòÉΓòÉ
  4823.  
  4824.  QS COMMAND REQUIRES AN OPERAND This command requires a segment number 
  4825.    expression. 
  4826.  
  4827.  SEGMENT NUMBER MUST BE < 257 ASDT32 currently supports LNK386 map segment 
  4828.    numbers 1-256. 
  4829.  
  4830.  SEGMENT NUMBER OF 0 NOT ALLOWED ASDT32 currently supports LNK386 map segment 
  4831.    numbers 1-256. 
  4832.  
  4833.  SEGMENT NUMBER QUALIFIED AS xxxx ASDT32 shows the value of the selector which 
  4834.    qualifies the specified segment number. 
  4835.  
  4836.  SYMBOLS WERE NOT READ IN You have tried to qualify a segment number, but no 
  4837.    symbol file was read in by ASDT32. 
  4838.  
  4839.  
  4840. ΓòÉΓòÉΓòÉ 13.24. "RI" and "TI" Command Messages ΓòÉΓòÉΓòÉ
  4841.  
  4842.  ASDT32 ALREADY HAS THE INTERRUPT You are trying to take an interrupt for 
  4843.    ASDT32 that it already owns. 
  4844.  
  4845.  ASDT32 DOESN'T OWN THE INTERRUPT ASDT32 is not the current owner of the 
  4846.    interrupt that you wish to restore to OS/2. 
  4847.  
  4848.  ASDT32 DOESN'T USE THE INTERRUPT The operand you specified does not indicate 
  4849.    an interrupt that ASDT32 uses. 
  4850.  
  4851.  IDT ENTRY IS NOT A TASK GATE You are trying to have ASDT32 take over the 
  4852.    double fault interrupt, and the current descriptor in the IDT does not 
  4853.    describe a task gate. ASDT32 requires that the descriptor describe a task 
  4854.    gate. 
  4855.  
  4856.  RI(TI) COMMAND REQUIRES AN OPERAND Both of these commands require a specified 
  4857.    interrupt as an operand. 
  4858.  
  4859.  
  4860. ΓòÉΓòÉΓòÉ 13.25. "RK" and "SK" Command Messages ΓòÉΓòÉΓòÉ
  4861.  
  4862.  HOT KEY HAS BEEN DISABLED ASDT32 will no longer monitor keystrokes for a hot 
  4863.    key. 
  4864.  
  4865.  HOT KEY DEFINED AS 'nn'X The hot key has been set as the scan code nn. 
  4866.  
  4867.  
  4868. ΓòÉΓòÉΓòÉ 13.26. "SB" Command Messages ΓòÉΓòÉΓòÉ
  4869.  
  4870.  BREAKPOINT IS NOT ACTIVE You attempted to set a breakpoint as sticky or as not 
  4871.    sticky and it is inactive. Activate or set the breakpoint address before 
  4872.    trying to change its sticky status. 
  4873.  
  4874.  BREAKPOINT NOT RECOGNIZED The breakpoint that you wish to make sticky is not a 
  4875.    valid breakpoint. 
  4876.  
  4877.  SB COMMAND REQUIRES AN OPERAND You have not specified an operand for the SB 
  4878.    command, and it requires one. 
  4879.  
  4880.  
  4881. ΓòÉΓòÉΓòÉ 13.27. "SC" Command Messages ΓòÉΓòÉΓòÉ
  4882.  
  4883.  PRESS ANY KEY TO RETURN This message informs you that you are viewing your 
  4884.    program's display screen. Pressing any key will return to the ASDT32 screen. 
  4885.    This message occurs only when your display screen is not the same as the one 
  4886.    for ASDT32. 
  4887.  
  4888.  
  4889. ΓòÉΓòÉΓòÉ 13.28. "ST" Command Messages ΓòÉΓòÉΓòÉ
  4890.  
  4891.  ASDT32 CAN NOT SINGLE STEP This message informs you that ASDT32 can not single 
  4892.    step the current instruction taken as CS:EIP. Generally, this implies that 
  4893.    you changed either the CS or EIP register such that ASDT32 can not resume 
  4894.    your program. 
  4895.  
  4896.  
  4897. ΓòÉΓòÉΓòÉ 13.29. "S1-S9" and "V1-V9" Command Messages ΓòÉΓòÉΓòÉ
  4898.  
  4899.  Sx: INVALID AS A BREAKPOINT ASDT32 can not set the breakpoint at the address 
  4900.    that you have specified.  Check to see that the address uses a valid 
  4901.    selector and that the offset falls within the selector's segment limit 
  4902.    (assuming that this is a virtual address).  Additionally, check to see that 
  4903.    you are not trying to reactivate a breakpoint whose thread or process has 
  4904.    terminated. 
  4905.  
  4906.  Sx: xxxxxxxxxxxx The indicated breakpoint has been activated. The string shown 
  4907.    is the disassembled instruction at the breakpoint. 
  4908.  
  4909.  
  4910. ΓòÉΓòÉΓòÉ 13.30. "TP" Command Messages ΓòÉΓòÉΓòÉ
  4911.  
  4912.  ENVIRONMENT WILL NOT PERMIT TP ASDT32 can not terminate the process if it is 
  4913.    currently running at level 0. 
  4914.  
  4915.  
  4916. ΓòÉΓòÉΓòÉ 13.31. "T0-T4" Command Messages ΓòÉΓòÉΓòÉ
  4917.  
  4918.  ADDRESS NOT ALIGNED FOR LENGTH The T1-T4 command address that you have 
  4919.    specified does not match its corresponding field length.  2-byte fields must 
  4920.    be aligned on word boundaries, and 4-byte fields must be aligned on 
  4921.    doubleword boundaries. 
  4922.  
  4923.  HARDWARE REGISTER NOT ACTIVE You are attempting to use one of the T1-T4 (null) 
  4924.    commands for editing purposes, and Tn is not active. 
  4925.  
  4926.  INSUFFICIENT SPACE FOR Tn NULL You are attempting to use one of the T1-T4 
  4927.    (null) commands for editing purposes, and you have not left enough room on 
  4928.    the ASDT32 command line for Tn's parameter display. 
  4929.  
  4930.  PHYSICAL ADDRESS NOT ALLOWED You have specified a physical address for the 
  4931.    T1-T4 registers. DR0-DR3 require a linear address, and ASDT32 will not 
  4932.    convert a physical address to a linear address. 
  4933.  
  4934.  T0 COMMAND REQUIRES AN OPERAND You are attempting to use the T0 command 
  4935.    without an operand.  It requires either ON or OFF. 
  4936.  
  4937.  
  4938. ΓòÉΓòÉΓòÉ 13.32. "UM" Command Messages ΓòÉΓòÉΓòÉ
  4939.  
  4940.  INTERRUPT CONTROLLER MASK = xx ASDT32 has read the contents of the interrupt 
  4941.    controller mask register. 
  4942.  
  4943.  INVALID SETTING - KEYBD MASKED You attempted to set the interrupt mask to a 
  4944.    value which masks off the keyboard. ASDT32 does not allow this. 
  4945.  
  4946.  
  4947. ΓòÉΓòÉΓòÉ 13.33. "WI" Command Messages ΓòÉΓòÉΓòÉ
  4948.  
  4949.  NO CORRESPONDING SYMBOL FOUND You have tried to find a symbol name that 
  4950.    matches the specified address, but ASDT32 could not locate one that 
  4951.    corresponds. 
  4952.  
  4953.  SYMBOLS WERE NOT READ IN You have tried to find a symbol name that matches the 
  4954.    specified address, but no symbol file was read in by ASDT32. 
  4955.  
  4956.  WI COMMAND REQUIRES AN OPERAND This command requires a virtual address 
  4957.    expression. 
  4958.