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