Thank you for your reply jj2007
Information about those extended directives, can be obtained from TASM manual. I will copy them here:
The SETFIELD instruction
SETFIELD generates code that sets a value in a record field. Its syntax follows:
SETFIELD field_name destination_r/m , source_reg field_name is the name of a record member field, destination _r/m for SETFIELD is a register or memory address of type BYTE or WORD (or DWORD for the 80386). source_reg must be a register of the same size or smaller. If the source is smaller than the destination, the source register must be the least significant part of another register that is the same size as the destination. This full size register is called the operating register. Use this register to shift the value in the source register so that it's aligned with the destination. For example.
F00 RECORD R0:1,R1 :4,R2 : 3 , R3 : 1
SETFIELD Rl AX,BL
SETFIELD Rl AX,BH
; operating register is BX
; illegal!
SETFIELD shifts the source register efficiently to align it with the the entire contents of the operating register are destroyed by the SETFIELD field in the destination, and ORs the result into the destination operation, register. Otherwise, SETFIELD modifies only the operating register and the processor flags.
To perform its function, SETFIELD generates an efficient but extended series of the following instructions: XOR, XCHG, ROL, ROR, OR, and MOVZX.
If you're using SETFIELD when your source and target registers are the same, the instruction does not OR the source value to itself. Instead, SETFIELD ensures that the fields of the target register not being set will be zero.
SETFIELD does not attempt to clear the target field before ORing the new value. If this is necessary, you must explicitly clear the field using the MASKFLAG instruction.
GETFIELD retrieves data from a record field. It functions as the logical reverse of the SETFIELD instruction. Its syntax follows:
GETFIELD field_name destination_reg , source_r/m
fieldjiame and destination _t -eg function as they do for SETFIELD. You can use source_r/m as you would for sourcejreg (for SETFIELD). For example,
F00 RECORD R0:l,Rl:4,R2:3,R3:l
GETFIELD Rl BL,AX /operating register is BX GETFIELD Rl BH,AX /illegal!
"^ Note that GETFIELD destroys the entire contents of the operating register.
GETFIELD retrieves the value of a field found in the source register or memory address, and sets the pertinent portion of the destination register to that value. This instruction affects no other registers than the operating register and the processor flags.
To accomplish its function, GETFIELD generates an efficient but extended series of the following instructions: MOV, XCHG, ROL, and ROR.
If you're using the GETFIELD instruction when your source and target registers are the same, the instruction will not generate the nonfunctional MOV target , source instruction.
Additional fast immediate multiply instruction Turbo Assembler provides a special immediate multiply operation for efficient array indexing. FASTIMUL addresses a typical problem that occurs when you create an array of structures. There is no immediate multiply operation available for the 8086 processor. Even for the more advanced processors, multiplication using shifts and adds is significantly faster in some circumstances than using the standard immediate IMUL instruction. Based on the currently specified processor, Turbo Assembler's FASTIMUL instruction chooses between the most efficient sequence of shifts and adds available, and the current processor's immediate IMUL operation (if any). FASTIMUL has the following syntax:
FASTIMUL dest_reg, source_r/m, value
This instruction is much like the trinary IMUL operation available on the 80186, 80286, and 80386 processors. The destjreg destination register is a WORD register (or it can be DWORD on the 80386). source_r/m is a register or memory address that must match the size of the destination, value is a fixed, signed constant multiplicand.
FASTIMUL uses a combination of IMUL, MOV, NEG, SHL, ADD, and SUB instructions to perform its function. This function destroys the source register or memory address, and leaves the processor flags in an indeterminate state.