| back |  | Last regenerated: 2022-04-20 17:31:36 kio

# zasm - Z80 Assembler – Version 4.4

# Pseudo instructions

[<prev] [next>]

| ### Commands for command line options 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 options command 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 options command line options every time you assemble it. ##### --ixcbxh, .ixcbxh, _ixcbxh_ --ixcbr2, .ixcbr2, _ixcbr2_ Related Differences from v3 to v4: Command line options Command Line Options Command Line Options: Command line options command line option, Pseudo instructions 8080 Assembler: 8080 pseudo instructions pseudo 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: SET set' 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, endif if 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 Z80 Z80 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 .8080 Z180, 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, endif If Differences from v3 to v4: Command line options Command Line Options Command Line Options: Command line options command 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: Labels label _ixcbr2_ is defined and can be tested with 'defined(_ixcbr2_)' in Expressions 8080 Assembler: Expressions expressions. Assembler directives: #if, #elif, #else, #endif Pseudo instructions: if, endif If Differences from v3 to v4: Command line options Command Line Options Command Line Options: Command line options command 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: Labels label _ixcbxh_ is defined and can be tested with 'defined(_ixcbxh_)' in Expressions 8080 Assembler: Expressions expressions. ##### --dotnames, .dotnames Related Differences from v3 to v4: Command line options Command Line Options Command Line Options: Command line options command line option, Pseudo instructions 8080 Assembler: 8080 pseudo instructions pseudo instruction and predefined label Allow Pseudo instructions: Label definition Numeric expressions: Labels 8080 Assembler: Labels label names to start with a dot. First dots were not allowed in Pseudo instructions: Label definition Numeric expressions: Labels 8080 Assembler: Labels label names. Then some assemblers prepended a dot to the Pseudo instructions 8080 Assembler: 8080 pseudo instructions pseudo instructions to easily distinguish them from normal instructions and Pseudo instructions: Label definition Numeric expressions: Labels 8080 Assembler: Labels label 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: Labels label names with a dot as well… Normally, without this option, only Pseudo instructions 8080 Assembler: 8080 pseudo instructions pseudo instructions like '.Pseudo instructions: defs, ds, .ds, .block, .blkb and data 8080 pseudo instructions: DS ds' 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 instructions pseudo 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: --dotnames dotnames 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: Labels label _dotnames_ was also defined. ##### --reqcolon, .reqcolon Related Differences from v3 to v4: Command line options Command Line Options Command Line Options: Command line options command line option, Pseudo instructions 8080 Assembler: 8080 pseudo instructions pseudo instruction and predefined label Select syntax variant where colons ':' are required after Types of labels: Program labels Types of labels: Program labels program 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: Labels label 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: --dotnames dotnames:
    .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 instructions pseudo 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: --dotnames dotnames 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 labels program label definitions, but still not after other label definitions with 'Pseudo instructions: equ Types of labels: Named values Labels: EQU equ' 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: Labels label _reqcolon_ was also defined. ##### --casefold, .casefold Related Differences from v3 to v4: Command line options Command Line Options Command Line Options: Command line options command line option, Pseudo instructions 8080 Assembler: 8080 pseudo instructions pseudo instruction and predefined label Tell the assembler that Pseudo instructions: Label definition Numeric expressions: Labels 8080 Assembler: Labels label 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: Labels label 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: Labels label 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: Labels label _casefold_ was also defined. ##### --flatops, .flatops Related Differences from v3 to v4: Command line options Command Line Options Command Line Options: Command line options command line option, Pseudo instructions 8080 Assembler: 8080 pseudo instructions pseudo instruction and predefined label Evaluate Expressions 8080 Assembler: Expressions expressions 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, endif if error messages about byte values or offsets out of range are reported by zasm and these Expressions 8080 Assembler: Expressions expressions 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: Labels label _flatops_ was also defined. |

[<prev] [top] [next>]