===============================================================================
     From: Elad Nachman                  Refer: 0       
  Subject: Writing your own Debugger         1: 80xxx          Status: Public 
-------------------------------------------------------------------------------
Hello I-Gene!

 On the Wednesday April 20 1994 20:38, I-Gene Leong 
Headbanged on my metal fuses and wrote to Aaron Martin:

 IL> Now.. I need some info.

 IL> WHAT DO THE DEBUG REGISTERS DO???
 IL> and
 IL> Could you maybe outline the bit fields of the debug registers?

Here you go:

Comment |
dr0,dr1,dr2,dr3 32bit regs represnt breakpoints 0-3, linear address
dr4,dr5  reserved, dr6 is statues reg : bits 0-3 are per each breakpoint -
which one was triggered. Bit DR7 is the debug control register:

LEN3  R/W3  LEN2  R/W2  LEN1  R/W1  LEN0  R/W0                    GE LE G3 L3 G2 L2 G1 L1 G0 L0
31-30-29-28-27-26-25-24-23-22-21-20-19-18-17-16-15-14-13-12-11-10-9- 8- 7- 6- 5- 4- 3- 2- 1- 0 bit #

LENn field (2 bits):

00 : byte/breakpoint Legal at any address
01 : Word (2 bytes) / Breakpoint must be at even address
10 : Reserved
11 : Dword (4 bytes) / Breakpoint address must be on Dword Boundary

R/Wn field (2 bits):

00 - Execution Breakpoint
01 - Memory write Breakpoint
10 - Reserved for future use
11 - Memory Read Or Write Breakpoint

Gn - Globally Enable Breakpoint. Breakpoint is enable untill cleared.
Ln - Local Breakpoint. Cleared after a Task Switch.
GE/LE - exact match. if used the return address points exactly at the
interrupting instruction (The CPU slows). If not set ,
the address might be a bit farther ahead. Recommended!
|

.386P
code segment USE16
assume cs:code
org 100h
begin:
jmp start
data1 dd 03f0h
data2 dd 0
data3 dd 0
data4 dd 0
data5 dd 0
data6 dd 0
data7 dd 0
data8 dw 303h
data8_ dw 3h
data_nul dd 8 dup(0)
start:
xor ax,ax
mov ds,ax
cli
mov bx,cs
mov word ptr ds:[0004],offset handler
mov word ptr ds:[0006],bx
sti
;mov eax,03f0h
;mov dr0,eax
;mov eax,00000000000000110000001100000011b
;mov dr7,eax
mov ax,cs
mov es,ax
mov di,offset data1
mov ax,0de09h
int 67h
mov al,byte ptr ds:[03f0h]
mov ax,4c00h
int 21h

handler proc far
push es
push di
mov ax,cs
mov es,ax
mov di,offset data_nul
mov ax,0de09h
int 67h
mov ax,0007h
int 10h
pop di
pop es
iret
endp

code ends
end begin

Fare thee well,

Elad

--- 
 * Origin: None is Listed! (2:403/169.4)

