The following instructions must all occur befor the first org or segment definition and they do the same as the similar named Differences from v3 to v4: Command line options Command Line Options Command Line Options: Command line optionscommand line option. You may put these pseudo ops at the start of your assembler source to eliminate the need to pass the Differences from v3 to v4: Command line options Command Line Options Command Line Options: Command line optionscommand line options every time you assemble it.
Related Differences from v3 to v4: Command line options Command Line Options Command Line Options: Command line optionscommand line option, Pseudo instructions 8080 Assembler: 8080 pseudo instructionspseudo instruction and predefined label
IXCB is used here as a mnenonic for the prefix IX or IY plus prefix 0xCB instructions like 'rr', 'bit', 'Pseudo instructions: defl, set and '=' Labels: SETset' and 'res'. These are allowed for those opcodes which use the '(hl)' register only. But people have found out what they do when you use one of the other, regular registers: They may additionally copy the result into the selected register or they may, Assembler directives: #if, #elif, #else, #endif Pseudo instructions: if, endifif you use register 'h' or 'l', access the upper or lower byte of the index register.
What a CPU does depends on it's hardware. Original Zilog Command Line Options: --z80 Pseudo instructions: .z80, .z180 and .8080 Targets: #target Z80Z80 CPUs should behave as for --Command Line Options: --ixcbxh, .ixcbxh, _ixcbxh_ --ixcbr2, .ixcbr2, _ixcbr2_ Commands for command line options: --ixcbxh, .ixcbxh, _ixcbxh_ --ixcbr2, .ixcbr2, _ixcbr2_ixcbr2. Others allow the access to the index register halves, some just behave as for '(hl)' for all other registers as well and some, like the Command Line Options: --z180 Pseudo instructions: .z80, .z180 and .8080Z180, even trap all illegal instruction.
Option --Command Line Options: --ixcbxh, .ixcbxh, _ixcbxh_ --ixcbr2, .ixcbr2, _ixcbr2_ Commands for command line options: --ixcbxh, .ixcbxh, _ixcbxh_ --ixcbr2, .ixcbr2, _ixcbr2_ixcbr2 enables the 'second register target' opcodes like
Pseudo instructions: defl, set and '=' Labels: SETset 0,(ix+0),b
and option --Command Line Options: --ixcbxh, .ixcbxh, _ixcbxh_ --ixcbr2, .ixcbr2, _ixcbr2_ Commands for command line options: --ixcbxh, .ixcbxh, _ixcbxh_ --ixcbr2, .ixcbr2, _ixcbr2_ixcbxh enables the 'index register halves' opcodes like
Pseudo instructions: defl, set and '=' Labels: SETset 0,xh
Obviously they are mutually exclusive.
Assembler directives: #if, #elif, #else, #endif Pseudo instructions: if, endifIf Differences from v3 to v4: Command line options Command Line Options Command Line Options: Command line optionscommand line option --Command Line Options: --ixcbxh, .ixcbxh, _ixcbxh_ --ixcbr2, .ixcbr2, _ixcbr2_ Commands for command line options: --ixcbxh, .ixcbxh, _ixcbxh_ --ixcbr2, .ixcbr2, _ixcbr2_ixcbr2 or pseudo opcode .Command Line Options: --ixcbxh, .ixcbxh, _ixcbxh_ --ixcbr2, .ixcbr2, _ixcbr2_ Commands for command line options: --ixcbxh, .ixcbxh, _ixcbxh_ --ixcbr2, .ixcbr2, _ixcbr2_ixcbr2 was used, then the Pseudo instructions: Label definition Numeric expressions: Labels 8080 Assembler: Labelslabel _ixcbr2_ is defined and can be tested with 'defined(_ixcbr2_)' in Expressions 8080 Assembler: Expressionsexpressions.
Assembler directives: #if, #elif, #else, #endif Pseudo instructions: if, endifIf Differences from v3 to v4: Command line options Command Line Options Command Line Options: Command line optionscommand line option --Command Line Options: --ixcbxh, .ixcbxh, _ixcbxh_ --ixcbr2, .ixcbr2, _ixcbr2_ Commands for command line options: --ixcbxh, .ixcbxh, _ixcbxh_ --ixcbr2, .ixcbr2, _ixcbr2_ixcbxh or pseudo opcode .Command Line Options: --ixcbxh, .ixcbxh, _ixcbxh_ --ixcbr2, .ixcbr2, _ixcbr2_ Commands for command line options: --ixcbxh, .ixcbxh, _ixcbxh_ --ixcbr2, .ixcbr2, _ixcbr2_ixcbxh was used, then the Pseudo instructions: Label definition Numeric expressions: Labels 8080 Assembler: Labelslabel _ixcbxh_ is defined and can be tested with 'defined(_ixcbxh_)' in Expressions 8080 Assembler: Expressionsexpressions.
Related Differences from v3 to v4: Command line options Command Line Options Command Line Options: Command line optionscommand line option, Pseudo instructions 8080 Assembler: 8080 pseudo instructionspseudo instruction and predefined label
Allow Pseudo instructions: Label definition Numeric expressions: Labels 8080 Assembler: Labelslabel names to start with a dot.
First dots were not allowed in Pseudo instructions: Label definition Numeric expressions: Labels 8080 Assembler: Labelslabel names. Then some assemblers prepended a dot to the Pseudo instructions 8080 Assembler: 8080 pseudo instructionspseudo instructions to easily distinguish them from normal instructions and Pseudo instructions: Label definition Numeric expressions: Labels 8080 Assembler: Labelslabel names, so they could start at any column of a source line. Having seen that, some people immediately developed the need to start their Pseudo instructions: Label definition Numeric expressions: Labels 8080 Assembler: Labelslabel names with a dot as well…
Normally, without this option, only Pseudo instructions 8080 Assembler: 8080 pseudo instructionspseudo instructions like '.Pseudo instructions: defs, ds, .ds, .block, .blkb and data 8080 pseudo instructions: DSds' or '.org' can start with a dot. Then they may be written in any column of a source line regardless of the '--reqcolon' setting.
With this setting the limitations described at '--reqcolons' also applies to Pseudo instructions 8080 Assembler: 8080 pseudo instructionspseudo instructions starting with a dot because the dot no longer makes them special and implicitely a non-label.
The following #insert: Examples: #assert: Example: incbin: Examples: #assert: Example:example is only valid source with --Command Line Options: --dotnames, .dotnames Commands for command line options: --dotnames, .dotnames Label definition: --dotnamesdotnames and --reqcolon:
.org 0 ; starts in column 0 => requires --reqcolon
.Pseudo instructions: defs, ds, .ds, .block, .blkb and data 8080 pseudo instructions: DSds 0x66 ; one of the original dot named Pseudo instructions 8080 Assembler: 8080 pseudo instructionspseudo instructions
jp .nmi_handler ; requires --Command Line Options: --dotnames, .dotnames Commands for command line options: --dotnames, .dotnames Label definition: --dotnamesdotname
Of course you could clean up your source as well…
Prior to version 4.3.4 a Pseudo instructions: Label definition Numeric expressions: Labels 8080 Assembler: Labelslabel _dotnames_ was also defined.
Related Differences from v3 to v4: Command line options Command Line Options Command Line Options: Command line optionscommand line option, Pseudo instructions 8080 Assembler: 8080 pseudo instructionspseudo instruction and predefined label
Select syntax variant where colons ':' are required after Types of labels: Program labels Types of labels: Program labelsprogram label definitions.
Normally colons are not required and the assembler decides whether a name is a label definition or something else by the position where it starts: Pseudo instructions: Label definition Numeric expressions: Labels 8080 Assembler: Labelslabel names must start in column 1 and instructions must be preceded by some space.
This #insert: Examples: #assert: Example: incbin: Examples: #assert: Example:example must not be compiled with --reqcolon or --Command Line Options: --dotnames, .dotnames Commands for command line options: --dotnames, .dotnames Label definition: --dotnamesdotnames:
.org 0 ; due to the dot this Pseudo instructions 8080 Assembler: 8080 pseudo instructionspseudo instruction is allowed in column 1
foo Pseudo instructions: equ Types of labels: Named values Labels: EQUequ 0xF00 ; label definition
bar: and a ; Types of labels: Program labels Types of labels: Program labelsprogram label def and a instruction
jp foo ; instruction
shelf Pseudo instructions: defb, db, .db and .byte 8080 pseudo instructions: DBdb 0 ; Types of labels: Program labels Types of labels: Program labelsprogram label def and a Pseudo instructions 8080 Assembler: 8080 pseudo instructionspseudo instruction
But some source files don't obey this widely accepted rule and put instructions in column 1 or – actually seen – start label definitions indented with some tabs.
As long as only Pseudo instructions 8080 Assembler: 8080 pseudo instructionspseudo instructions starting with a dot are put in column 1 and option --Command Line Options: --dotnames, .dotnames Commands for command line options: --dotnames, .dotnames Label definition: --dotnamesdotnames is not required, this is no problem. In all other cases you need this option --reqcolon and, of course, then colons are required after Types of labels: Program labels Types of labels: Program labelsprogram label definitions, but still not after other label definitions with 'Pseudo instructions: equ Types of labels: Named values Labels: EQUequ' and the like:
This #insert: Examples: #assert: Example: incbin: Examples: #assert: Example:example must be compiled with --reqcolon:
; funny indented:
org 0 ; 'org' would be recognized as a Pseudo instructions: Label definition Numeric expressions: Labels 8080 Assembler: Labelslabel without --reqcolon
foo Pseudo instructions: equ Types of labels: Named values Labels: EQUequ 0xF00 ; label definition
bar: and a ; Types of labels: Program labels Types of labels: Program labelsprogram label def and a instruction
jp foo ; instruction
shelf: ; Types of labels: Program labels Types of labels: Program labelsprogram label definition
.Pseudo instructions: defb, db, .db and .byte 8080 pseudo instructions: DBdb 0 ; a Pseudo instructions 8080 Assembler: 8080 pseudo instructionspseudo instruction
Prior to version 4.3.4 a Pseudo instructions: Label definition Numeric expressions: Labels 8080 Assembler: Labelslabel _reqcolon_ was also defined.
Related Differences from v3 to v4: Command line options Command Line Options Command Line Options: Command line optionscommand line option, Pseudo instructions 8080 Assembler: 8080 pseudo instructionspseudo instruction and predefined label
Tell the assembler that Pseudo instructions: Label definition Numeric expressions: Labels 8080 Assembler: Labelslabel names are case insensitive and that the source does not distinguish between uppercase and lowercase writing of Pseudo instructions: Label definition Numeric expressions: Labels 8080 Assembler: Labelslabel names.
Note: instruction and register names are always case insensitive.
This option is implied by '--asm8080'.
Normally Pseudo instructions: Label definition Numeric expressions: Labels 8080 Assembler: Labelslabel names are case sensitive or people just tend to just write them allways the same.
Prior to version 4.3.4 a Pseudo instructions: Label definition Numeric expressions: Labels 8080 Assembler: Labelslabel _casefold_ was also defined.
Related Differences from v3 to v4: Command line options Command Line Options Command Line Options: Command line optionscommand line option, Pseudo instructions 8080 Assembler: 8080 pseudo instructionspseudo instruction and predefined label
Evaluate Expressions 8080 Assembler: Expressionsexpressions strictly from left to right, disobeying any operator precedence.
Old assemblers sometimes didn't know about operator precedence and were designed this way for simplicity.
Use this option Assembler directives: #if, #elif, #else, #endif Pseudo instructions: if, endifif error messages about byte values or offsets out of range are reported by zasm and these Expressions 8080 Assembler: Expressionsexpressions make more sense when evaluated this way.
Normal operator precedence in zasm is:
unary ! ~ + – ▶︎ >> << ▶︎ & | ^ ▶︎ * / % ▶︎ + – ▶︎ > >= etc. ▶︎ && || ▶︎ ?:
Note that this is not the precedence as defined for C. B-). The hierarchy of operators in c is very bad.
Prior to version 4.3.4 a Pseudo instructions: Label definition Numeric expressions: Labels 8080 Assembler: Labelslabel _flatops_ was also defined.
|