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