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