Author
Topic: More high level directives in ASMC and DOS (Read 1131 times)

I already requested this in UASM, and they seem not to be very interested in 16 bit, so let me post that here too.

I am a former TASM user, than then moved to JWASM. I mainly develop DOS programs, and this is why I miss default DOS binaries, that were available under JWASM. Do you consider releaseing them too?

Also, since the time of TASM, I miss some high level/SMART directives that were available, for instance:- FASTIMUL dest_reg, source_r/m, valueThis instruction is much like the trinary IMUL operation available on the 80186, 80286, and 80386 processors. The dest_reg 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.

- SHL/SHR/RCL/RCR/ROL/ROR: When .8086 was used, it was unrolled such as SHR AX, 2, as SHR AX, 1 / SHR AX, 1.

- SETFLAG - a "smart-flag" instruction implementing OR

- TESTFLAG - a "smart-flag" instruction implementing TEST

- FLIPFLAG - a "smart-flag" instruction implementing XOR

- CLRFLAG - [bytepointer.com edit] I think this is a doc bug where the writers meant to specify MASKFLAG as CLRFLAG does not exist and likely never existed; there is no CLRFLAG identifier embedded within this version or any version of TASM; CLRFLAG is also not documented anywhere else but the one place it was ever mentioned: the keywords table for version 3.0.

- MASKFLAG (u) - a "smart-flag" instruction implementing AND; accidentally documented in the new keywords for version 3.0 table as CLRFLAG

- SETFIELD generates code that sets a value in a record field. Its syntax follows:

- GETFIELD retrieves data from a record field. It functions as the logical reverse of the SETFIELD instruction. Its syntax follows:

I already requested this in UASM, and they seem not to be very interested in 16 bit, so let me post that here too.

HJWasm/Uasm is mainly a 64-bit enhancement of Jwasm developed using the latest version of Microsoft Visual Studio. It focus mainly on newer hardware as AVX-512 and VEX implementation, so backward compatibility is not a high priority.

Asmc is built using command line tools, mainly the Open Watcom tool-chain as used to build Jwasm. It preserve backward compatibility with both older version of Masm and Jwasm. The default compatibility mode for ML is version 8 but it include SSE and AVX instructions as well.

Quote

I am a former TASM user, than then moved to JWASM. I mainly develop DOS programs, and this is why I miss default DOS binaries, that were available under JWASM. Do you consider releaseing them too?

Do to all changes in Jwasm the DOS (Jwasmr) version become obsolete at one point so you wont be able to build it even with the latest versions of Jwasm, so all 16-bit related source is removed from Asmc.

Quote

Also, since the time of TASM, I miss some high level/SMART directives that were available, for instance:- FASTIMUL dest_reg, source_r/m, valueThis instruction is much like the trinary IMUL operation available on the 80186, 80286, and 80386 processors. The dest_reg 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.

There is no development for 16-bit code other than maintaining the compatibility that already exist, so you have to use macros or TASM for this.

Quote

- SHL/SHR/RCL/RCR/ROL/ROR: When .8086 was used, it was unrolled such as SHR AX, 2, as SHR AX, 1 / SHR AX, 1.

Well, it's possible..

Quote

- SETFLAG - a "smart-flag" instruction implementing OR- TESTFLAG - a "smart-flag" instruction implementing TEST- FLIPFLAG - a "smart-flag" instruction implementing XOR- CLRFLAG - [bytepointer.com edit] I think this is a doc bug where the writers meant to specify MASKFLAG as CLRFLAG does not exist and likely never existed; there is no CLRFLAG identifier embedded within this version or any version of TASM; CLRFLAG is also not documented anywhere else but the one place it was ever mentioned: the keywords table for version 3.0.

- MASKFLAG (u) - a "smart-flag" instruction implementing AND; accidentally documented in the new keywords for version 3.0 table as CLRFLAG

- SETFIELD generates code that sets a value in a record field. Its syntax follows:

- GETFIELD retrieves data from a record field. It functions as the logical reverse of the SETFIELD instruction. Its syntax follows:

If you read the manual and look at sample code provided you will find many of these things implemented, but not in any form that break compatibility with existing code. Also keep in mind the difference between an assembler and a compiler: less nanny help