123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148 |
- .TH NS_ASS VI
- .ad
- .SH NAME
- ns_as \- National Semiconductor 16032 assembler/linker
- .SH SYNOPSIS
- \&..../lib/ns/as [options] argument ...
- .SH DESCRIPTION
- The assembler for the National Semiconductor 16032 is based
- on the universal assembler \fIuni_ass\fP(VI).
- The mnemonics for the instructions are taken from the NS-16000
- Programmers Reference Manual.
- The syntax of the instruction operands is similar to the syntax used
- in that manual,
- although the meaning is sometimes quite different.
- The cross assembler issued by National Semiconductor
- associates a type (sb,..) with each symbol
- and automatically generates sb offset mode for symbols of type sb.
- This assembler does not record the types,
- each symbol simply produces an untyped value.
- .sp 1
- The possible operands are:
- .IP "general registers
- These are called r0, r1, r2, r3, r4, r5, r6 and r7.
- The symbol REG is used to indicate use of any of these 8 registers
- in other operands.
- .IP "floating point registers
- These are called f0, f1, f2, f3, f4, f5, f6 and f7.
- .IP "dedicated registers
- All types of dedicated registers can be used with the appropriate instructions.
- Examples: sb, fp, intbase, ptb1.
- .IP expr(REG)
- register relative
- .IP expr(fp)
- frame pointer relative
- .IP expr(sb)
- static base relative
- .IP expr(sp)
- stack pointer relative
- .IP expr(pc)
- program counter relative,
- the expression indicates a location in memory from which the current value
- of '.' is subtracted by the assembler.
- E.g. "movw label(pc),r0; label: .word ..." moves the contents of the word
- at \fIlabel\fP to r0.
- .IP expr(expr(fb))
- .IP expr(expr(sb))
- .IP expr(expr(sp))
- memory relative
- .IP @expr
- absolute
- .IP external(expr)+expr
- The external mode is provided, although this assembler
- does not build a module table.
- .IP tos
- top of stack.
- .PD 0
- .sp 1
- .PP
- Usage of the scaled index operands is allowed.
- .br
- The convention used to indicate offset length by appending :B, :W or :D
- to offsets is not implemented.
- The assembler tries to find out the minimal size needed for any constant
- in an operand of the instruction placed in the text segment.
- Offsets in instructions outside \fI.text\fP are always four bytes.
- .PP
- All special operands, e.g. register list, configuration list, have
- the same format as in the Programmers Reference Manual.
- .PP
- Whenever possible the assembler automatically uses the short(quick) opcodes for
- jsr(jsb), jump(br), add(addq), cmp(cmpq) and mov(movq).
- .SH BUGS
- The data types floating and packed-decimal are not supported.
- .br
- Initialization of floating-point numbers is not possible.
- .br
- The mnemonics of the slave processor instructions are poorly documented,
- the format of the NS-16032S-6 data sheet is used.
- .br
- The documentation gave contradictory information on the format
- of a few instructions.
- .IP -
- Three different schemes are presented for the encoding
- of the last operand of the block instructions.
- .IP -
- Two different values are specified for
- the encoding of the msr register in smr and lmr instructions.
- .IP -
- Two different possibilities are given for the encoding of
- the instructions movsu and movus.
- .SH EXAMPLE
- .nf
- .ta 12n 20n 28n 36n
- 00000000 0E0B02 setcfg [ m ]
- label:
- 00000003 EC3E lprb psr,r7
- 00000005 2D37 sprw intbase,r6
- 00000007 EA7C br label
- 00000009 02803B bsr rout1
- 0000000C 228044 cxp rout1
- 0000000F 1204 ret 4
- 00000011 4204 rett 4
- 00000013 328044 rxp rout1
- 00000016 1E0300 rdval r0
- 00000019 163028 scsr r5
- 0000001C 3F32 shid r6
- 0000001E 7F0B bispsrd r1
- 00000020 7C17 caseb r2
- 00000022 7FA806 cxpd @6
- 00000025 021F jsr @rout1
- 00000027 BEB529 absf f5,f6
- 0000002A EE0538 movusw r7,r0
- 0000002D 3E40A101 movbl 1,f5
- 00000031 CE440003 cmpmb r0,r1,4
- 00000035 CE4F0800 extsd r1,r1,0,1
- 00000039 62A0 save [ r5, r7 ]
- 0000003B 1E0B00 lmr bpr0,r0
- 0000003E 0E8C04 skpst w
- 00000041 CC0042 acbb 1,r0,label
- 00000044 B2 rout1: wait
- 00000045 7F950C0B adjspd 11(12(sb))
- 00000049 7CA50D adjspb 13
- 0000004C 7DB50102 adjspw external(1)+2
- 00000050 7FBD adjspd tos
- 00000052 7CED860807 adjspb 7(8(fp))[r6:w]
- .fi
- .SH "SEE ALSO"
- uni_ass(VI)
- .br
- NS 16000 Programmers Reference Manual. Publ. no. 420306565-001PB
- .br
- NS16032S-6, NS16032S-4 High Performance Microprocessors, november 1982
- .br
- publ. no. 420306619-002A.
- .PD 0
- .SH AUTHOR
- Ed Keizer, Vrije Universiteit
|