/*************************************************************************/
TSM_RDME.TXT
TURBO ASSEMBLER 4.0
This file contains information on:
1) Assembling and linking with TASM 4.0
2) The PUSHSTATE and POPSTATE directives
3) Text equate substitution
1. Assembling and linking with TASM 4.0
=======================================
The TASM 4.0 package includes three different assemblers:
TASM.EXE 16-bit real-mode assembler
TASMX.EXE 16-bit protected-mode assembler
TASM32.EXE 32-bit protected-mode assembler
All three assemblers are capable of producing both 16- and 32-bit
object files, depending on the directives contained in your assembler
source files. If you produce a 16-bit object file, then you must use
the 16-bit linker (TLINK.EXE) to link your application. If you produce
a 32-bit object file, then you must use the 32-bit linker (TLINK32.EXE)
to link your application.
TASM.EXE is a real-mode assembler, meaning that it is capable of using
only the lower 640K of memory addressable by DOS. If you're assembling
larger applications, use either TASMX.EXE or TASM32.EXE. Both of these
assemblers use the DPMI server to take advantage of extended memory.
The biggest difference between the three assemblers is the type of
debug information they produce when you assemble your source files with
the /zi command-line option. Both TASM.EXE and TASMX.EXE produce
only 16-bit debug information. TASM32.EXE produces only 32-bit debug
information. If you plan to use Turbo Debugger to debug your assembler
application, then you must assemble 16-bit files with either TASM.EXE
or TASMX.EXE. To produce 32-bit debug information, then you must assemble
your files with TASM32.EXE.
2. PUSHSTATE and POPSTATE directives
====================================
The PUSHSTATE directive saves the current operating state on an
internal stack that is 16 levels deep. PUSHSTATE is particularly
useful if you have code inside a macro that functions independently
of the current operating state, but does not affect the current
operating mode.
The state information that Turbo Assembler saves consists of:
o current emulation version (for example T310)
o mode selection (for example IDEAL, MASM, QUIRKS, MASM51)
o EMUL or NOEMUL switches
o current processor or coprocessor selection
o MULTERRS or NOMULTERRS switches
o SMART or NOSMART switches
o the current radix
o JUMPS or NOJUMPS switches
o LOCALS or NOLOCALS switches
o the current local symbol prefix
Use the POPSTATE directive to return to the last saved state
from the stack.
; PUSHSTATE and POPSTATE example
.386
ideal
model small
dataseg
pass_string db 'passed',13,10,36
fail_string db 'failed',13,10,36
codeseg
jumps
; Show changing processor selection, number radix, and JUMPS mode
xor eax,eax ; Zero out eax. Can use EAX in 386 mode
pushstate ; Preserve state of processor, radix and JUMPS
nojumps
radix 2 ; Set to binary radix
p286
mov ax,1 ; Only AX available now. EAX would give errors.
cmp ax,1
jne next1 ; No extra NOPS after this
; Assemble with /la and check in .lst file.
mov ax,100 ; Now 100 means binary 100 or 4 decimal.
next1:
popstate ; Restores JUMPS and 386 mode and default radix.
cmp eax,4 ; EAX available again. Back in decimal mode.
je pass1 ; Extra NOPS to handle JUMPS. Check in .lst file
mov dx,OFFSET fail_string ; Load the fail string
jmp fini
pass1:
mov dx,OFFSET pass_string ; Load the pass string.
fini:
mov ax,@data ; Print the string out
mov ds,ax
mov ah,9h
int 21h
mov ah, 4ch ; Return to DOS
int 21h
end
3. Text Equate Substitution
===========================
TASM 4.0 has changed the way text equates are substituted since the TASM 3.0
version. This makes some TASM 3.0 code produce errors when assembled with
TASM 4.0. To remedy this problem, do one of the following:
1) Use the /UT300 command line directive to select TASM 3.0 style
processing.
2) Explicitly use the % text macro substitution operator at the
start of lines that cause errors with TASM 4.0.
/**************************** END OF FILE ********************************/