c-z8k.texi 16 KB

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