Chuck Guzis declared on Wednesday 07 December 2005 21:32:
  On 12/7/2005 at 9:03 PM Patrick Finnegan wrote:
 Chuck Guzis declared on Wednesday 07 December 2005
20:26:
  keeping things like the DAA instruction intact
and supporting a
 bunch of do-nothing instructions like MOV DL,DL. 
FYI, that most certainly doesn't just "do nothing."  It updates the
 flags based on the contents of the DL register, and you could do a
 conditional jump based on the results. 
 With all due respect, I suggest that you review your X86 instructions
 and their effect on flags.  Try running this little bit of code under
 your favorite debugger (DEBUG is fine) and have a gander at the flags
 register:
 xor  ax,ax
 mov dl,-1
 mov dl,dl
 int 3 
I'll admit it's been a while since I've bother to do much x86 assembly,
but I don't doubt you're right.  I think I might have been thinking more
of "and dl, dl", which I'm pretty sure ought to update the flags.
Pretty much any assembly language has useless constructs like that,
though, just because it makes the instruction set easier to implement
(and sometimes, compilers easier to write).
For example, in RISC architectures, register 0 is generally fixed to read
0.  When you would normally do stuff like:
mov  r1,r2
you can also do
mov  r0,r2
or even
mov  r0, r0
(using syntax there the matching intel syntax
  Now, if your point of view held, the condition code
should show a
 nonzero negative (signed) value.  In fact, they show a zero positive
 value (i.e. the results of the XOR AX,AX).  In fact, moves, be they
 register to memory, register to register or memory to register or
 memory to memory do not affect condition code bits.  Else why have a
 nutty instruction like JCXZ? You coiuld just MOV CX,CX and jumpt on
 the zero result... 
Sure there's a reason.  JCXZ is one instruction, and (probably) uses up
less code space than the other.  You could "AND CX,CX" and do a JZ
afterwards to do the same thing.
    Consider on Windows XP that you can still run the
following code:
        mov     cl,9
        mov     dx,offset HWMes
        call    5
        mov     cl,0
        call    5 
Huh?  Do you mean this?
MOV  AH, 9
MOV  DX, HWMes
INT  21h
MOV  AH, 0
INT  21h 
 
 Nope, I mean what I said--try it.   
 
I don't have a Windows system to try it on.  I could probably find
something running DOS (or OS/2) to try it on, assuming DEBUG is
installed on the machine...  I vaguely remember the PCB "jump to DOS"
vector, but never used it when I wrote code (for the same reason I never
used an FCB to touch files.. probably just too young :).
Pat
--
Purdue University ITAP/RCAC       --- 
http://www.rcac.purdue.edu/
The Computer Refuge               --- 
http://computer-refuge.org