.NET 8 install required for the included executable.
The most recent version of the Reference Manual is also hosted at https://tollyh.github.io/AssEmbly
Additions:
- Displacement: Pointers can now be used to access relative memory addresses without needing to modify the value of the register itself. Displacement of pointers is evaluated at runtime and is written using square brackets like so:
*rg0[rg1 * 8 + 123]
. Labels and addresses can also be displaced, but only by constant values, as this displacement is done at assemble-time. TheEXTD_MPA
instruction has been added to calculate the address of a pointer without accessing memory at that address. - Pointer read sizes: Pointers can now be used to read 32-bit, 16-bit, and 8-bit numbers from memory inline using the explicit read size specifiers
D*
,W*
, andB*
. This removes the need to first callMVD
,MVW
, orMVB
, which would potentially also use up an extra register. - File system extension set: There are now instructions for performing more general file system operations, such as: directory listing, directory creation/deletion, file moving and copying, and file time getting/setting.
- Terminal extension set: There are now instructions for interacting with the terminal window. This includes operations such as: clearing the screen, setting foreground and background colours, setting/getting the position of the cursor and screen size, and playing a beep sound. There are also two new instructions and a new status flag for toggling on and off the "auto echo" behaviour of the
RCC
instruction. - A new
EXTD_SLP
instruction has been added which causes the processor to sleep for a specified number of milliseconds when executed. - The exit code of the AssEmbly process can now be specified with the new
EXTD_HLT
instruction. - New instructions have been added for querying the version and supported features of the AssEmbly processor at runtime.
%ANALYZER
directive ranges now work as expected for all assembler messages, including those depending on finalizers.- The
help
operation has been improved, with each operation now having its own help page that lists the options specific to that operation. The base help page is now much more concise. - Command line argument parsing has been overhauled to be much more efficient and consistent. New, single-character arguments denoted with a single dash have been added. Unrecognised arguments will now produce a warning.
- Operations (
assemble
,execute
, etc.) are now case-insensitive. - Hexadecimal and binary literals can now be made negative with a
-
prefix. - The assembler will now automatically define macros (
#FILE_PATH
,#FILE_NAME
, and#FOLDER_PATH
) that allow you to access the path of the file currently being assembled. This can be disabled if necessary with the--disable-file-macros
argument. - A
--full-base-opcodes
argument has been added to the assembler to force instructions in the Base Instruction Set to be assembled into their full, 3-byte form. - New assembler constants have been added which signify whether each extension set is available. There are also constants for checking whether full base opcodes are forced and whether automatically defined file path macros are enabled.
- The assembler is now aware of the path to the base file, and it will now be displayed in errors and warnings instead of a generic
base file
message. The path to the base file will now also be populated into ADI files. - The disassembler can now detect floating point and negative operands. You can disable this with the
--no-floats
and--no-signed
arguments. - A new suggestion has been added to suggest that
%NUM
is used instead of chaining 8 consecutive%DAT
directives. - Another new suggestion has been added to suggest using the inline assignment capabilities of the
CAL
andRET
instructions instead of settingrfp
/rrv
withMVQ
directly before them.
Fixes:
- Fixed an issue with float to integer conversion that caused incorrect values to be returned on some ARM platforms.
- The assembler will no longer suggest that the
:ENTRY
label is unused. - Single disassembled instructions (such as those displayed in the debugger) will no longer be missing a
0x
prefix on address literals. - Redirecting the standard input stream of the processor will no longer cause the
RCC
instruction to crash. - Warnings that depend on knowing what the previous instruction was will no longer be suppressed by state directives that insert no data.
Removals:
- Warning 0003: "Jump/Call target address points to end of file, not executable code." has been removed as it is superfluous when Warning 0002: "Jump/Call target address does not point to executable code." exists. The code Warning: 0003 will now remain unused.
Example program changes:
- All example programs have been updated to utilise features added in this update.
- A new directory listing example program has been added.
Internal changes:
- The
Processor
class now contains methods for reading and writing null-terminated UTF-8 strings in memory. - A new
CommandLineArgs
class has been added to facilitate the improvements in argument parsing added in this update. - Regular expressions now all use the
GeneratedRegex
attribute to improve performance. - The project now supports conditional compilation using C# preprocessor constants. All operations and AAP features are now entirely optional and can be omitted from the compilation.
- String resource files have been split into separate files depending on the operation they are used by. Resource files for operations that are not being compiled will be omitted.
- A new script has been added to automatically test different permutations of project compilation options.
- Methods have been added to
Program.Shared.cs
for printing errors and warnings. ReadOnlySpan
s are now created explicitly instead of using the implicit cast fromSpan
s created by the.AsSpan()
method. This contributes to a slight performance improvement.