r> Can you explain in some more detail about how ASSUME can be used r> to catch errors? Sure. Here's code (with a bug) which uses explicit overrides every time as you've advocated: -+--- bug1.asm begins BIOS_DATA segment at 40h serial dw 4 dup (?) parallel dw 3 dup (?) BIOS_DATA ends DATA segment byte USE16 public 'CODE' Count dw 0 DATA ends CODE segment byte USE16 public 'CODE' assume cs:CODE, ds:DATA SerialCount proc near push bx push cx push ds mov ax,seg BIOS_DATA mov ds,ax mov cx,4 mov bx,offset serial xor ax,ax more: cmp ax,ds:[bx] adc ds:[Count],ax inc bx inc bx loop more mov ax,ds:[Count] pop ds pop cx pop bx ret SerialCount endp CODE ends end -+--- bug1.asm ends The error, of course, is that ds is used to refer to Count even though ds points to some other segment! The effect in this case is that the code can actually alter the BIOS data area and return an incorrect result. Unfortunately, this will assemble and link with no warnings and no errors. Here's what happens if you use ASSUME correctly and omit the explicit segment overrides: -+--- bug2.asm begins BIOS_DATA segment at 40h serial dw 4 dup (?) parallel dw 3 dup (?) BIOS_DATA ends DATA segment byte USE16 public 'CODE' Count dw 0 DATA ends CODE segment byte USE16 public 'CODE' assume cs:CODE, ds:DATA SerialCount proc near push bx push cx push ds mov ax,seg BIOS_DATA mov ds,ax assume ds:BIOS_DATA mov cx,4 mov bx,offset serial xor ax,ax more: cmp ax,[bx] adc [Count],ax inc bx inc bx loop more mov ax,[Count] pop ds pop cx pop bx ret SerialCount endp CODE ends end -+--- bug2.asm ends The assembler will (correctly) report that Count cannot be addressed via the currently ASSUMEd segment registers and point to the lines which attempt to address Count thereby catching bugs before they happen.