Home | History | Annotate | Download | only in doc
      1 @c Copyright (C) 1991-2014 Free Software Foundation, Inc.
      2 @c This is part of the GAS manual.
      3 @c For copying conditions, see the file as.texinfo.
      4 @ifset GENERIC
      5 @page
      6 @node Z8000-Dependent
      7 @chapter Z8000 Dependent Features
      8 @end ifset
      9 @ifclear GENERIC
     10 @node Machine Dependencies
     11 @chapter Z8000 Dependent Features
     12 @end ifclear
     13 
     14 @cindex Z8000 support
     15 The Z8000 @value{AS} supports both members of the Z8000 family: the
     16 unsegmented Z8002, with 16 bit addresses, and the segmented Z8001 with
     17 24 bit addresses.
     18 
     19 When the assembler is in unsegmented mode (specified with the
     20 @code{unsegm} directive), an address takes up one word (16 bit)
     21 sized register.  When the assembler is in segmented mode (specified with
     22 the @code{segm} directive), a 24-bit address takes up a long (32 bit)
     23 register.  @xref{Z8000 Directives,,Assembler Directives for the Z8000},
     24 for a list of other Z8000 specific assembler directives.
     25 
     26 @menu
     27 * Z8000 Options::               Command-line options for the Z8000
     28 * Z8000 Syntax::                Assembler syntax for the Z8000
     29 * Z8000 Directives::            Special directives for the Z8000
     30 * Z8000 Opcodes::               Opcodes
     31 @end menu
     32 
     33 @node Z8000 Options
     34 @section Options
     35 
     36 @cindex Z8000 options
     37 @cindex options, Z8000
     38 @table @option
     39 @cindex @code{-z8001} command line option, Z8000
     40 @item -z8001
     41 Generate segmented code by default.
     42 
     43 @cindex @code{-z8002} command line option, Z8000
     44 @item -z8002
     45 Generate unsegmented code by default.
     46 @end table
     47 
     48 @node Z8000 Syntax
     49 @section Syntax
     50 @menu
     51 * Z8000-Chars::                Special Characters
     52 * Z8000-Regs::                 Register Names
     53 * Z8000-Addressing::           Addressing Modes
     54 @end menu
     55 
     56 @node Z8000-Chars
     57 @subsection Special Characters
     58 
     59 @cindex line comment character, Z8000
     60 @cindex Z8000 line comment character
     61 @samp{!} is the line comment character.
     62 
     63 If a @samp{#} appears as the first character of a line then the whole
     64 line is treated as a comment, but in this case the line could also be
     65 a logical line number directive (@pxref{Comments}) or a preprocessor
     66 control command (@pxref{Preprocessing}).
     67 
     68 @cindex line separator, Z8000
     69 @cindex statement separator, Z8000
     70 @cindex Z8000 line separator
     71 You can use @samp{;} instead of a newline to separate statements.
     72 
     73 @node Z8000-Regs
     74 @subsection Register Names
     75 
     76 @cindex Z8000 registers
     77 @cindex registers, Z8000
     78 The Z8000 has sixteen 16 bit registers, numbered 0 to 15.  You can refer
     79 to different sized groups of registers by register number, with the
     80 prefix @samp{r} for 16 bit registers, @samp{rr} for 32 bit registers and
     81 @samp{rq} for 64 bit registers.  You can also refer to the contents of
     82 the first eight (of the sixteen 16 bit registers) by bytes.  They are
     83 named @samp{rl@var{n}} and @samp{rh@var{n}}.
     84 
     85 @smallexample
     86 @exdent @emph{byte registers}
     87 rl0 rh0 rl1 rh1 rl2 rh2 rl3 rh3
     88 rl4 rh4 rl5 rh5 rl6 rh6 rl7 rh7
     89 
     90 @exdent @emph{word registers}
     91 r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 r15
     92 
     93 @exdent @emph{long word registers}
     94 rr0 rr2 rr4 rr6 rr8 rr10 rr12 rr14
     95 
     96 @exdent @emph{quad word registers}
     97 rq0 rq4 rq8 rq12
     98 @end smallexample
     99 
    100 @node Z8000-Addressing
    101 @subsection Addressing Modes
    102 
    103 @cindex addressing modes, Z8000
    104 @cindex Z800 addressing modes
    105 @value{AS} understands the following addressing modes for the Z8000:
    106 
    107 @table @code
    108 @item rl@var{n}
    109 @itemx rh@var{n}
    110 @itemx r@var{n}
    111 @itemx rr@var{n}
    112 @itemx rq@var{n}
    113 Register direct:  8bit, 16bit, 32bit, and 64bit registers.
    114 
    115 @item @@r@var{n}
    116 @itemx @@rr@var{n}
    117 Indirect register:  @@rr@var{n} in segmented mode, @@r@var{n} in unsegmented
    118 mode.
    119 
    120 @item @var{addr}
    121 Direct: the 16 bit or 24 bit address (depending on whether the assembler
    122 is in segmented or unsegmented mode) of the operand is in the instruction.
    123 
    124 @item address(r@var{n})
    125 Indexed: the 16 or 24 bit address is added to the 16 bit register to produce
    126 the final address in memory of the operand.
    127 
    128 @item r@var{n}(#@var{imm})
    129 @itemx rr@var{n}(#@var{imm})
    130 Base Address: the 16 or 24 bit register is added to the 16 bit sign
    131 extended immediate displacement to produce the final address in memory
    132 of the operand.
    133 
    134 @item r@var{n}(r@var{m})
    135 @itemx rr@var{n}(r@var{m})
    136 Base Index: the 16 or 24 bit register r@var{n} or rr@var{n} is added to
    137 the sign extended 16 bit index register r@var{m} to produce the final
    138 address in memory of the operand.
    139 
    140 @item #@var{xx}
    141 Immediate data @var{xx}.
    142 @end table
    143 
    144 @node Z8000 Directives
    145 @section Assembler Directives for the Z8000
    146 
    147 @cindex Z8000 directives
    148 @cindex directives, Z8000
    149 The Z8000 port of @value{AS} includes additional assembler directives,
    150 for compatibility with other Z8000 assemblers.  These do not begin with
    151 @samp{.} (unlike the ordinary @value{AS} directives).
    152 
    153 @table @code
    154 @kindex segm
    155 @item segm
    156 @kindex .z8001
    157 @itemx .z8001
    158 Generate code for the segmented Z8001.
    159 
    160 @kindex unsegm
    161 @item unsegm
    162 @kindex .z8002
    163 @itemx .z8002
    164 Generate code for the unsegmented Z8002.
    165 
    166 @kindex name
    167 @item name
    168 Synonym for @code{.file}
    169 
    170 @kindex global
    171 @item global
    172 Synonym for @code{.global}
    173 
    174 @kindex wval
    175 @item wval
    176 Synonym for @code{.word}
    177 
    178 @kindex lval
    179 @item lval
    180 Synonym for @code{.long}
    181 
    182 @kindex bval
    183 @item bval
    184 Synonym for @code{.byte}
    185 
    186 @kindex sval
    187 @item sval
    188 Assemble a string.  @code{sval} expects one string literal, delimited by
    189 single quotes.  It assembles each byte of the string into consecutive
    190 addresses.  You can use the escape sequence @samp{%@var{xx}} (where
    191 @var{xx} represents a two-digit hexadecimal number) to represent the
    192 character whose @sc{ascii} value is @var{xx}.  Use this feature to
    193 describe single quote and other characters that may not appear in string
    194 literals as themselves.  For example, the C statement @w{@samp{char *a =
    195 "he said \"it's 50% off\"";}} is represented in Z8000 assembly language
    196 (shown with the assembler output in hex at the left) as
    197 
    198 @iftex
    199 @begingroup
    200 @let@nonarrowing=@comment
    201 @end iftex
    202 @smallexample
    203 68652073    sval    'he said %22it%27s 50%25 off%22%00'
    204 61696420
    205 22697427
    206 73203530
    207 25206F66
    208 662200
    209 @end smallexample
    210 @iftex
    211 @endgroup
    212 @end iftex
    213 
    214 @kindex rsect
    215 @item rsect
    216 synonym for @code{.section}
    217 
    218 @kindex block
    219 @item block
    220 synonym for @code{.space}
    221 
    222 @kindex even
    223 @item even
    224 special case of @code{.align}; aligns output to even byte boundary.
    225 @end table
    226 
    227 @node Z8000 Opcodes
    228 @section Opcodes
    229 
    230 @cindex Z8000 opcode summary
    231 @cindex opcode summary, Z8000
    232 @cindex mnemonics, Z8000
    233 @cindex instruction summary, Z8000
    234 For detailed information on the Z8000 machine instruction set, see
    235 @cite{Z8000 Technical Manual}.
    236 
    237 @ifset SMALL
    238 @c this table, due to the multi-col faking and hardcoded order, looks silly
    239 @c except in smallbook.  See comments below "@set SMALL" near top of this file.
    240 
    241 The following table summarizes the opcodes and their arguments:
    242 @iftex
    243 @begingroup
    244 @let@nonarrowing=@comment
    245 @end iftex
    246 @smallexample
    247 
    248             rs   @r{16 bit source register}
    249             rd   @r{16 bit destination register}
    250             rbs   @r{8 bit source register}
    251             rbd   @r{8 bit destination register}
    252             rrs   @r{32 bit source register}
    253             rrd   @r{32 bit destination register}
    254             rqs   @r{64 bit source register}
    255             rqd   @r{64 bit destination register}
    256             addr @r{16/24 bit address}
    257             imm  @r{immediate data}
    258 
    259 adc rd,rs               clrb addr               cpsir @@rd,@@rs,rr,cc
    260 adcb rbd,rbs            clrb addr(rd)           cpsirb @@rd,@@rs,rr,cc
    261 add rd,@@rs              clrb rbd                dab rbd
    262 add rd,addr             com @@rd                 dbjnz rbd,disp7
    263 add rd,addr(rs)         com addr                dec @@rd,imm4m1
    264 add rd,imm16            com addr(rd)            dec addr(rd),imm4m1
    265 add rd,rs               com rd                  dec addr,imm4m1
    266 addb rbd,@@rs            comb @@rd                dec rd,imm4m1
    267 addb rbd,addr           comb addr               decb @@rd,imm4m1
    268 addb rbd,addr(rs)       comb addr(rd)           decb addr(rd),imm4m1
    269 addb rbd,imm8           comb rbd                decb addr,imm4m1
    270 addb rbd,rbs            comflg flags            decb rbd,imm4m1
    271 addl rrd,@@rs            cp @@rd,imm16            di i2
    272 addl rrd,addr           cp addr(rd),imm16       div rrd,@@rs
    273 addl rrd,addr(rs)       cp addr,imm16           div rrd,addr
    274 addl rrd,imm32          cp rd,@@rs               div rrd,addr(rs)
    275 addl rrd,rrs            cp rd,addr              div rrd,imm16
    276 and rd,@@rs              cp rd,addr(rs)          div rrd,rs
    277 and rd,addr             cp rd,imm16             divl rqd,@@rs
    278 and rd,addr(rs)         cp rd,rs                divl rqd,addr
    279 and rd,imm16            cpb @@rd,imm8            divl rqd,addr(rs)
    280 and rd,rs               cpb addr(rd),imm8       divl rqd,imm32
    281 andb rbd,@@rs            cpb addr,imm8           divl rqd,rrs
    282 andb rbd,addr           cpb rbd,@@rs             djnz rd,disp7
    283 andb rbd,addr(rs)       cpb rbd,addr            ei i2
    284 andb rbd,imm8           cpb rbd,addr(rs)        ex rd,@@rs
    285 andb rbd,rbs            cpb rbd,imm8            ex rd,addr
    286 bit @@rd,imm4            cpb rbd,rbs             ex rd,addr(rs)
    287 bit addr(rd),imm4       cpd rd,@@rs,rr,cc        ex rd,rs
    288 bit addr,imm4           cpdb rbd,@@rs,rr,cc      exb rbd,@@rs
    289 bit rd,imm4             cpdr rd,@@rs,rr,cc       exb rbd,addr
    290 bit rd,rs               cpdrb rbd,@@rs,rr,cc     exb rbd,addr(rs)
    291 bitb @@rd,imm4           cpi rd,@@rs,rr,cc        exb rbd,rbs
    292 bitb addr(rd),imm4      cpib rbd,@@rs,rr,cc      ext0e imm8
    293 bitb addr,imm4          cpir rd,@@rs,rr,cc       ext0f imm8
    294 bitb rbd,imm4           cpirb rbd,@@rs,rr,cc     ext8e imm8
    295 bitb rbd,rs             cpl rrd,@@rs             ext8f imm8
    296 bpt                     cpl rrd,addr            exts rrd
    297 call @@rd                cpl rrd,addr(rs)        extsb rd
    298 call addr               cpl rrd,imm32           extsl rqd
    299 call addr(rd)           cpl rrd,rrs             halt
    300 calr disp12             cpsd @@rd,@@rs,rr,cc      in rd,@@rs
    301 clr @@rd                 cpsdb @@rd,@@rs,rr,cc     in rd,imm16
    302 clr addr                cpsdr @@rd,@@rs,rr,cc     inb rbd,@@rs
    303 clr addr(rd)            cpsdrb @@rd,@@rs,rr,cc    inb rbd,imm16
    304 clr rd                  cpsi @@rd,@@rs,rr,cc      inc @@rd,imm4m1
    305 clrb @@rd                cpsib @@rd,@@rs,rr,cc     inc addr(rd),imm4m1
    306 inc addr,imm4m1         ldb rbd,rs(rx)          mult rrd,addr(rs)
    307 inc rd,imm4m1           ldb rd(imm16),rbs       mult rrd,imm16
    308 incb @@rd,imm4m1         ldb rd(rx),rbs          mult rrd,rs
    309 incb addr(rd),imm4m1    ldctl ctrl,rs           multl rqd,@@rs
    310 incb addr,imm4m1        ldctl rd,ctrl           multl rqd,addr
    311 incb rbd,imm4m1         ldd @@rs,@@rd,rr          multl rqd,addr(rs)
    312 ind @@rd,@@rs,ra          lddb @@rs,@@rd,rr         multl rqd,imm32
    313 indb @@rd,@@rs,rba        lddr @@rs,@@rd,rr         multl rqd,rrs
    314 inib @@rd,@@rs,ra         lddrb @@rs,@@rd,rr        neg @@rd
    315 inibr @@rd,@@rs,ra        ldi @@rd,@@rs,rr          neg addr
    316 iret                    ldib @@rd,@@rs,rr         neg addr(rd)
    317 jp cc,@@rd               ldir @@rd,@@rs,rr         neg rd
    318 jp cc,addr              ldirb @@rd,@@rs,rr        negb @@rd
    319 jp cc,addr(rd)          ldk rd,imm4             negb addr
    320 jr cc,disp8             ldl @@rd,rrs             negb addr(rd)
    321 ld @@rd,imm16            ldl addr(rd),rrs        negb rbd
    322 ld @@rd,rs               ldl addr,rrs            nop
    323 ld addr(rd),imm16       ldl rd(imm16),rrs       or rd,@@rs
    324 ld addr(rd),rs          ldl rd(rx),rrs          or rd,addr
    325 ld addr,imm16           ldl rrd,@@rs             or rd,addr(rs)
    326 ld addr,rs              ldl rrd,addr            or rd,imm16
    327 ld rd(imm16),rs         ldl rrd,addr(rs)        or rd,rs
    328 ld rd(rx),rs            ldl rrd,imm32           orb rbd,@@rs
    329 ld rd,@@rs               ldl rrd,rrs             orb rbd,addr
    330 ld rd,addr              ldl rrd,rs(imm16)       orb rbd,addr(rs)
    331 ld rd,addr(rs)          ldl rrd,rs(rx)          orb rbd,imm8
    332 ld rd,imm16             ldm @@rd,rs,n            orb rbd,rbs
    333 ld rd,rs                ldm addr(rd),rs,n       out @@rd,rs
    334 ld rd,rs(imm16)         ldm addr,rs,n           out imm16,rs
    335 ld rd,rs(rx)            ldm rd,@@rs,n            outb @@rd,rbs
    336 lda rd,addr             ldm rd,addr(rs),n       outb imm16,rbs
    337 lda rd,addr(rs)         ldm rd,addr,n           outd @@rd,@@rs,ra
    338 lda rd,rs(imm16)        ldps @@rs                outdb @@rd,@@rs,rba
    339 lda rd,rs(rx)           ldps addr               outib @@rd,@@rs,ra
    340 ldar rd,disp16          ldps addr(rs)           outibr @@rd,@@rs,ra
    341 ldb @@rd,imm8            ldr disp16,rs           pop @@rd,@@rs
    342 ldb @@rd,rbs             ldr rd,disp16           pop addr(rd),@@rs
    343 ldb addr(rd),imm8       ldrb disp16,rbs         pop addr,@@rs
    344 ldb addr(rd),rbs        ldrb rbd,disp16         pop rd,@@rs
    345 ldb addr,imm8           ldrl disp16,rrs         popl @@rd,@@rs
    346 ldb addr,rbs            ldrl rrd,disp16         popl addr(rd),@@rs
    347 ldb rbd,@@rs             mbit                    popl addr,@@rs
    348 ldb rbd,addr            mreq rd                 popl rrd,@@rs
    349 ldb rbd,addr(rs)        mres                    push @@rd,@@rs
    350 ldb rbd,imm8            mset                    push @@rd,addr
    351 ldb rbd,rbs             mult rrd,@@rs            push @@rd,addr(rs)
    352 ldb rbd,rs(imm16)       mult rrd,addr           push @@rd,imm16
    353 push @@rd,rs             set addr,imm4           subl rrd,imm32
    354 pushl @@rd,@@rs           set rd,imm4             subl rrd,rrs
    355 pushl @@rd,addr          set rd,rs               tcc cc,rd
    356 pushl @@rd,addr(rs)      setb @@rd,imm4           tccb cc,rbd
    357 pushl @@rd,rrs           setb addr(rd),imm4      test @@rd
    358 res @@rd,imm4            setb addr,imm4          test addr
    359 res addr(rd),imm4       setb rbd,imm4           test addr(rd)
    360 res addr,imm4           setb rbd,rs             test rd
    361 res rd,imm4             setflg imm4             testb @@rd
    362 res rd,rs               sinb rbd,imm16          testb addr
    363 resb @@rd,imm4           sinb rd,imm16           testb addr(rd)
    364 resb addr(rd),imm4      sind @@rd,@@rs,ra         testb rbd
    365 resb addr,imm4          sindb @@rd,@@rs,rba       testl @@rd
    366 resb rbd,imm4           sinib @@rd,@@rs,ra        testl addr
    367 resb rbd,rs             sinibr @@rd,@@rs,ra       testl addr(rd)
    368 resflg imm4             sla rd,imm8             testl rrd
    369 ret cc                  slab rbd,imm8           trdb @@rd,@@rs,rba
    370 rl rd,imm1or2           slal rrd,imm8           trdrb @@rd,@@rs,rba
    371 rlb rbd,imm1or2         sll rd,imm8             trib @@rd,@@rs,rbr
    372 rlc rd,imm1or2          sllb rbd,imm8           trirb @@rd,@@rs,rbr
    373 rlcb rbd,imm1or2        slll rrd,imm8           trtdrb @@ra,@@rb,rbr
    374 rldb rbb,rba            sout imm16,rs           trtib @@ra,@@rb,rr
    375 rr rd,imm1or2           soutb imm16,rbs         trtirb @@ra,@@rb,rbr
    376 rrb rbd,imm1or2         soutd @@rd,@@rs,ra        trtrb @@ra,@@rb,rbr
    377 rrc rd,imm1or2          soutdb @@rd,@@rs,rba      tset @@rd
    378 rrcb rbd,imm1or2        soutib @@rd,@@rs,ra       tset addr
    379 rrdb rbb,rba            soutibr @@rd,@@rs,ra      tset addr(rd)
    380 rsvd36                  sra rd,imm8             tset rd
    381 rsvd38                  srab rbd,imm8           tsetb @@rd
    382 rsvd78                  sral rrd,imm8           tsetb addr
    383 rsvd7e                  srl rd,imm8             tsetb addr(rd)
    384 rsvd9d                  srlb rbd,imm8           tsetb rbd
    385 rsvd9f                  srll rrd,imm8           xor rd,@@rs
    386 rsvdb9                  sub rd,@@rs              xor rd,addr
    387 rsvdbf                  sub rd,addr             xor rd,addr(rs)
    388 sbc rd,rs               sub rd,addr(rs)         xor rd,imm16
    389 sbcb rbd,rbs            sub rd,imm16            xor rd,rs
    390 sc imm8                 sub rd,rs               xorb rbd,@@rs
    391 sda rd,rs               subb rbd,@@rs            xorb rbd,addr
    392 sdab rbd,rs             subb rbd,addr           xorb rbd,addr(rs)
    393 sdal rrd,rs             subb rbd,addr(rs)       xorb rbd,imm8
    394 sdl rd,rs               subb rbd,imm8           xorb rbd,rbs
    395 sdlb rbd,rs             subb rbd,rbs            xorb rbd,rbs
    396 sdll rrd,rs             subl rrd,@@rs
    397 set @@rd,imm4            subl rrd,addr
    398 set addr(rd),imm4       subl rrd,addr(rs)
    399 @end smallexample
    400 @iftex
    401 @endgroup
    402 @end iftex
    403 @end ifset
    404 
    405