home *** CD-ROM | disk | FTP | other *** search
/ The Fred Fish Collection 1.5 / ffcollection-1-5-1992-11.iso / ff_disks / 600-699 / ff600.lzh / NCode / NCode.docs / Manual.Dutch < prev    next >
Text File  |  1992-02-01  |  21KB  |  639 lines

  1.  
  2. NCode: THE CONDITIONAL MACRO ASSEMBLER (Copyright Edgar Visser).
  3.  
  4.  
  5. 1.1    Starten van de assembler.
  6.  
  7. De aanroep van uit de CLI is als volgt:
  8.  
  9.   NCode <source file>
  10.         [-A<argument file>]   (parameters uit file lezen)
  11.         [-L<listing file>]    (default is scherm)
  12.         [-O<object file>]
  13.         [-P<pagina lengte>]   (-P0 schakelt softpages uit)
  14.         [-C<cpu code>]        (-C0/68000,1/68010,2/68020,3/68030)
  15.  
  16. Standaard parameters worden vanuit het bestand "NCode.arg"
  17. gelezen. Dit argument bestand kan naar behoeven worden aangepast
  18. met behulp van een eenvoudige tekstverwerker. Tevens is het
  19. mogelijk om meerdere argument bestanden te lezen en te nesten.
  20. Dit biedt uitkomst voor het vastleggen van standaard
  21. instellingen; bijvoorbeeld betreffende de gebruikte CPU.
  22.  
  23. De listing gaat, tenzij anders gespecificeerd, naar het
  24. beeldscherm. Is de listing geheel of gedeeltelijk uitgeschakeld,
  25. dan worden alleen geconstateerde fouten van het uitgeschakelde
  26. deel uitgevoerd.
  27.  
  28. De assembler maakt geen object file, tenzij daar expliciet om
  29. gevraagd wordt. Indien het te assembleren bestand geheel zonder
  30. fouten is geassembleerd maakt de assembler (mits -O optie) een
  31. object bestand aan. Indien mogelijk wordt er uitvoerbare code
  32. geproduceerd; deze code behoeft dus niet meer te worden gelinkt.
  33. Bevatte de sourcecode daarentegen externe referenties of
  34. definities dan wordt er een object bestand aangemaakt dat nog
  35. verder door een linker moet worden behandeld.
  36.  
  37. Door middel van de "-P<pagina lengte>" parameter is het mogelijk
  38. om zonder de sourcecode te wijzigen (m.b.v. het PLEN-directief)
  39. de paginalengte op te geven. De vooringestelde paginalengte is 60
  40. regels. Gaat de listing naar het beeldscherm dan worden er GEEN
  41. soft-pages uitgevoerd, tenzij uitdrukkelijk verzocht in de source
  42. code (het PAGE-directief). De aanmaak van softpages is te
  43. onderdrukken door "-P0" als argument mee te geven. Het "-P"-
  44. argument is bijzonder handig, indien geplaatst in het "NCode.arg"
  45. bestand. Dit voorkomt dat deze steeds weer opnieuw moet worden
  46. meegegeven. Bovendien blijft de pagina lengte hiermee toch
  47. variabel, omdat de argumenten van de command-line de argumenten
  48. uit het argument file mogen overschrijven.
  49.  
  50. NCode is in staat om code te produceren voor de MC68000, MC68010,
  51. MC68020 en MC68030. Met behulp van het "-C<cpu code>" argument 
  52. kan de assembler verteld worden voor welke CPU code moet worden
  53. gemaakt. Omdat dit niet iets is wat regelmatig zal wijzigen is
  54. het verstandig om dit argument in "NCode.arg" vast te leggen.
  55. Wordt er geen "-C" argument gelezen dan wordt uitgegaan van een
  56. MC68000 CPU. Dit directief zorgt ervoor dat niet toegestane
  57. instruktie, instruktie varianten en operanden niet geaccepteerd
  58. worden en als fout uitgevoerd worden.
  59.  
  60.  
  61. 1.2    Source code syntax.
  62.  
  63. Een regel source code kan uit vier velden bestaan:
  64.  
  65. Label veld          b.v.  START:
  66. Operator veld       b.v.  MOVE.L
  67. Operand veld        b.v.  10(a6),d0
  68. Kommentaar veld     b.v.  ;teller=max
  69.  
  70. De velden moeten onderling gescheiden zijn door een of meer tabs
  71. of spaties. Tevens kunnen bepaalde of zelfs alle velden
  72. weggelaten worden.
  73.  
  74.  
  75. 1.2.1 Labels.
  76.  
  77. Een label moet altijd op de eerste positie van een nieuwe regel
  78. beginnen om door de assembler als label gezien te worden. Het
  79. label wordt afgesloten door een tab, spatie, dubbele punt,
  80. puntkomma of sterretje. De mogelijkheid om een label af te
  81. sluiten met een dubbele punt is opgenomen voor compatibiliteit
  82. met andere assemblers en is niet verplicht. Een label begint met
  83. een underscore, punt of letter gevolgd door nul of meer
  84. underscore's, punten, letters en cijfers. Er wordt door de
  85. assembler onderscheid gemaakt tussen hoofd- en kleine letters van
  86. het label. Alleen de eerste 31 tekens zijn significant, waarvan
  87. er hoogstens 16 worden afgedrukt in de symbol-tabel-dump.
  88.  
  89.  
  90. 1.2.2 Kommentaar.
  91.  
  92. Kommentaar wordt door de assembler overgeslagen. Kommentaar volgt
  93. na een puntkomma op een willekeurige plaats op de regel, of na
  94. een sterretje aan het begin van de regel (de hele regel is dan
  95. kommentaar). Staat er kommentaar na een directief of instruktie,
  96. die geen operand verwacht, dan is een puntkomma overbodig.
  97. Hetzelfde geldt voor eventuele tekst na het operand veld.
  98.  
  99.  
  100. 1.2.3 Operator.
  101.  
  102. Een operator kan zowel een instruktie als een assembler directief
  103. zijn. De syntax van de instrukties is volledig naar Motorola
  104. standaard en mag zowel in hoofd- als in kleine letters worden
  105. opgegeven.
  106.  
  107. Aan een instruktie of pseudopcode, die op meer dan een data
  108. grootte van toepassing kan zijn, mag een zogenaamde size-
  109. specifier meegeven worden. Na de instruktie of pseudop moet dan
  110. een punt volgen waarna de size (een letter) komt. Toegestane
  111. size's zijn:
  112.  
  113.  - B Byte data (8 bits)
  114.  - W Word data (16 bits)
  115.  - L Long Word data (32 bits) of Long Branch
  116.  - S Short Branch
  117.  
  118. De size mag in hoofd- en kleine letters worden opgegeven.
  119.  
  120.  
  121. 1.2.4 Operand.
  122.  
  123. Het operand veld (indien van toepassing) kan een of meer
  124. operanden voor de instruktie of pseudop bevatten. Deze worden
  125. onderling gescheiden door komma's. Het einde van het operand veld
  126. wordt aangeven door een tab, spatie, kommentaar symbool of
  127. newline.
  128.  
  129.  
  130. 1.3    Expressies.
  131.  
  132. Een expressie mag uit labels, konstanten, operatoren en haakjes
  133. bestaan en bevindt zich altijd in het operand veld.
  134.  
  135.  
  136. 1.3.1 Operatoren.
  137.  
  138. De toegestane operatoren van hoge naar lage prioriteit zijn:
  139.  
  140. 1. Unaire min, Logische NOT (- en ~)
  141. 2. Leftshift, Rightshift (<< en >>)
  142. 3. Logische AND, OR en XOR (&, ! of |,  ^)
  143. 4. Vermenigvuldigen, Delen (* en /)
  144. 5. Optellen, Aftrekken (+ en -)
  145.  
  146. Alle operatoren zijn toegestaan voor absolute operanden. Voor
  147. optellen geldt dat ook relatief+absoluut en andersom toegestaan
  148. is (resultaat is relatief). Voor aftrekken geldt dat relatief-
  149. relatief toegestaan is, mits beide relatieven afhankelijk van
  150. dezelfde sectie zijn, waarbij het resultaat absoluut is. Ook is
  151. relatief-absoluut toegestaan, wat een relatief resultaat levert.
  152.  
  153.  
  154. 1.3.2 Konstanten.
  155.  
  156. Konstanten mogen als deel van een expressie voorkomen en geven
  157. altijd absolute waarden. Mogelijke vormen van konstanten.
  158.  
  159.  - Decimaal
  160.    een rijtje cijfers
  161.    b.v. 2452
  162.  
  163.  - Hexadecimaal
  164.    $ gevolgd door een rijtje van hexadecimale cijfers
  165.    b.v. $67AC
  166.  
  167.  - Octaal
  168.    @ gevolgd door een rijtje van octale cijfers
  169.    b.v. @36
  170.  
  171.  - Binair
  172.    % gevolgd door een rijtje nullen en enen
  173.    b.v. %0101000001
  174.  
  175.  - ASCII string
  176.    maximaal vier  ASCII tekens (een longword) ingesloten door
  177.    enkele of dubbele quootjes
  178.    b.v. "WTG"
  179.  
  180. ASCII strings bestaande uit minder dan vier tekens worden links
  181. aangevuld met nullen. Quootjes binnen de string zijn mogelijk
  182. door twee quootjes achter elkaar te schrijven. Een voorbeeld is
  183. 'ed''s', dit kan trouwens ook bereikt worden met "ed's".
  184.  
  185.  
  186. 1.4    Adresserings wijzen.
  187.  
  188. De syntax van de adresserings wijzen is na Motorola standaard als
  189. weergegeven in onderstaande tabel. In deze tabel staat "Dn" voor
  190. een data register (D0-D7), "An" staat voor een adres register
  191. (A0-A7 of SP), "Xn" staat voor een index register (data of adres
  192. register) optioneel gevolgd door een ".W" of ".L" size-specifier
  193. en (alleen MC68020/30) een "*Scale" scale (waarde 1,2,4 of 8).
  194.  
  195.   Syntax            Omschrijving
  196.  
  197.   Dn                data register direct
  198.   An                address register direct
  199.   (An)              address register indirect
  200.   (An)+             address register indirect postincrement
  201.   -(An)             address register indirect predecrement
  202.   d16(An)           address register indirect displacement
  203.   d8(An,Xn)         address register indirect index
  204. * (bd,An,Xn)        address register indirect base displacement
  205. * ([bd,An],Xn,od)   memory indirect postindexed
  206. * ([bd,An,Xn],od)   memory indirect preindexed
  207.   xxx.W of (xxx).W  absoluut short
  208.   xxx.L of (xxx).L  absoluut long
  209.   d16(PC)           program counter indirect displacement
  210.   d8(PC,Xn)         program counter indirect index
  211. * (bd,PC,Xn)        program counter indirect base displacement
  212. * ([bd,PC],Xn,od)   PC memory indirect postindexed
  213. * ([bd,PC,Xn],od)   PC memory indirect preindexed
  214.   #<data>           immediate
  215.  
  216. USP,CCR,VBR, etc.   speciale adresserings wijzen
  217.  
  218. De met een sterretje in de kantlijn gemarkeerde adresserings
  219. wijzen zijn alleen toegestaan voor de MC68020 en MC68030. Van al
  220. deze gemarkeerde adresserings wijzen kan elk deel van de operand
  221. weggelaten (suppressed) worden, dit deel wordt dan niet
  222. meegenomen in de berekening van het effektieve adres van de
  223. operand. Bij de PC-modi is het mogelijk om een expliciet
  224. suppressed PC aan te geven om te voorkomen dat de assembler het
  225. voor een suppressed adres register ziet. Dit wordt gedaan door
  226. "ZPC" te plaatsen waar de PC moet worden suppressed. Voorbeelden
  227. zijn: ([A5],lab), ([A2,D4.W*4]), (basdp,ZPC,A3*8) of zelfs ([]).
  228.  
  229.  
  230. 1.5    Instruktie varianten.
  231.  
  232. Verschillende instrukties (bijvoorbeeld ADD en MOVE) hebben een
  233. afwijkende syntax voor het adresseren van verschillende typen
  234. operanden, zo is er bijvoorbeeld MOVEA voor address register
  235. destination. NCode is in staat om de juiste instruktie varianten 
  236. te kiezen bij de operanden. Dit maakt het mogelijk om
  237. bijvoorbeeld CMP (Ax)+,(Ay)+ te schrijven in plaats van CMPM
  238. (Ax)+,(Ay)+.
  239.  
  240. Tevens kan NCode branch instrukties die geen size-specifier
  241. hebben en terugspringen optimaliseren indien de afstand tot het
  242. inspring punt dit toestaat.
  243.  
  244.  
  245. 1.6    Assembler directieven.
  246.  
  247. Assembler directieven zijn instrukties voor de assembler die
  248. aangeven hoe de code moet worden vertaald, wat en of er ge-list
  249. wordt, macro's mogelijk maken, ed. Hieronder volgen de
  250. ondersteunde pseudopcodes met hun werking.
  251.  
  252.  
  253. 1.6.1 Pseudopcodes.
  254.  
  255.  - SECTION
  256.  
  257. syntax: [<label>] SECTION <naam>[,CODE|DATA|BSS][,CHIP|FAST]
  258.  
  259. Deze pseudop meldt aan de assembler dat er een nieuwe sectie
  260. begint (<naam> is nieuw) of het vervolg van een afgebroken
  261. sectie (<naam> is naam van een eerder gestarte sectie).
  262.  
  263.   CODE  geeft aan dat sectie uitvoerbare code bevat (default).
  264.   DATA  geeft aan dat sectie geinitialiseerde data bevat.
  265.   BSS   geeft aan dat sectie alleen niet geinitialiseerde data
  266.         bevat. Het Operating System vraagt automatisch geheugen
  267.         aan voor deze sectie.
  268.  
  269.   CHIP  geeft aan dat het gevraagde type geheugen (CODE, DATA,
  270.         BSS) in het geheugen dat door de grafische- en I/O -
  271.         chips gebruikt wordt, moet komen.
  272.   FAST  geeft aan dat de sectie in het geheugen gedeelte
  273.         ontoegankelijk voor de custom chips moet komen.
  274.  
  275. Wordt geen CHIP of FAST opgegeven dan wordt de keuze van de
  276. geheugen toewijzing aan het Operating System overgelaten.
  277. De assembler geeft het eventueel aanwezige label het sectie
  278. nummer van de nieuwe sectie en als waarde de waarde van de
  279. PC.
  280.  
  281. De assembler kan maximaal 255 verschillende secties aan,
  282. waarbij de assembler begint met een niet benoemde CODE
  283. sectie.
  284.  
  285.  - END
  286.  
  287. syntax: [<label>] END
  288.  
  289. Na dit directief wordt alle source overgeslagen. Een
  290. eventueel label krijgt de waarde van de program counter
  291. voordat het END directief wordt uitgevoerd.
  292.  
  293.  - EQU
  294.  
  295. syntax: <label> EQU <exp>
  296.  
  297. De waarde van de expressie (absoluut of relatief) wordt aan
  298. <label> gegeven. Voorwaartse of externe referenties zijn
  299. niet toegestaan.
  300.  
  301.  - SET
  302.  
  303. syntax: <label> SET <exp>
  304.  
  305. De waarde van de expressie (absoluut of relatief) wordt aan
  306. <label> gegeven. SET is identiek aan EQU, behalve dat
  307. <label> met SET opnieuw gedefinieerd mag worden.
  308.  
  309.  - EQUR
  310.  
  311. syntax: <label> EQUR <register>
  312.  
  313. Deze pseudop maakt het mogelijk een data of adres register
  314. bij naam aan te spreken. Na het "EQUR" kan aan een register
  315. gerefereerd worden door invulling van het label.
  316.  
  317. <register> is "Dn", "An", "SP" (is A7) of een ander EQUR-
  318. label. Voorwaartse referenties zijn niet toegestaan.
  319.  
  320.  - REG
  321.  
  322. syntax: <label> REG <register list>
  323.  
  324. Het REG directief kent een waarde aan het label toe die de
  325. assembler kan vertalen in een 'register list mask ' zoals
  326. gebruikt wordt in de MOVEM instruktie.
  327.  
  328. <register list> is van de vorm R1[-R2][/R3[-R4]]... waarbij
  329. Rx een data of adres register is (mogelijk EQUR-label) of
  330. een reeds bestaande 'register list mask'.
  331.  
  332.  - DC
  333.  
  334. syntax: [<label>] DC[.<size>] <list>
  335.  
  336. Plaats een of meer constanten in de object code. Het aantal
  337. operanden is in principe onbeperkt zolang ze maar gescheiden
  338. worden door komma's. De <size> geeft aan of het hier byte,
  339. words of longwords betreft. Indien geen size opgegeven wordt
  340. dan wordt ".W" als size genomen. Bij byte size is het
  341. mogelijk om een string in het geheugen te plaatsen door deze
  342. string tussen enkele of dubbele quootjes te schrijven. Bij
  343. .W en .L size wordt ervoor gezorgd dat de data op een even
  344. adres begint.
  345.  
  346.  - DS
  347.  
  348. syntax: [<label>] DS[.<size>] <absexp>
  349.  
  350. Reserveert geheugen. De hoeveelheid geheugen die de
  351. assembler reserveert is afhankelijk van de <size> (default
  352. .W) en de waarde van de absolute expressie in het operand
  353. veld. De assembler reserveert <absexp> bytes, words of
  354. longwords afhankelijk van de <size>. Word en Longword size's
  355. beginnen altijd op een even adres. Dus "DS.W 0" heeft tot
  356. gevolg dat de program counter op een even adres komt te
  357. staan (zie ook het EVEN en CNOP directief).
  358.  
  359.  - RS
  360.  
  361. syntax: [<label>] RS[.<size>] <absexp>
  362.  
  363. Als het DS-directief, maar dan zonder geheugen te
  364. reserveren. Deze pseudop kan gebruikt worden om een lijst
  365. met offsets te definieren. Een eventueel aanwezig label
  366. krijgt de waarde van de offset tot het begin van de lijst
  367. met de offsets. Hoeveel de offset ten opzichte van de vorige
  368. offset toeneemt is afhankelijk van de <size> (default .W) en
  369. de waarde van de absolute expressie in het operand veld.
  370. Vergelijk ook het DS-directief.
  371.  
  372.  - RSSET
  373.  
  374. syntax: [<label>] RSSET <absexp>
  375.  
  376. Geeft het begin aan van een lijst met offsets gedefinieerd
  377. door het RS-directief. De eerste offset, gedefinieerd met
  378. het RS-directief, krijgt de waarde als gegeven in de
  379. operand.
  380.  
  381.  - RSRESET
  382.  
  383. syntax: [<label>] RSRESET
  384.  
  385. Geeft het begin aan van een lijst met offsets gedefinieerd
  386. door het RS-directief. De eerste offset heeft de absolute
  387. waarde 0.
  388.  
  389.  - LIST
  390.  
  391. syntax: LIST
  392.  
  393. Dit directief meldt de assembler dat de regels naar het
  394. listing file geschreven moeten worden. Het directief komt
  395. zelf niet in de listing voor.
  396.  
  397.  - NOLIST
  398.  
  399. syntax: NOLIST
  400.  
  401. Schakelt de uitvoer van regels naar het listing file uit.
  402. Alleen regels met geconstateerde fouten worden naar het
  403. listing file gestuurd. Het directief komt zelf niet in de
  404. listing voor.
  405.  
  406.  - MLIST
  407.  
  408. syntax: MLIST
  409.  
  410. Bepaalt dat de expansie van macro's ge-list moet worden. De
  411. regelnummers, in de listing, lopen niet door bij een macro
  412. expansie. Het directief komt zelf niet in de listing voor.
  413.  
  414.  - NOMLIST
  415.  
  416. syntax: NOMLIST
  417.  
  418. Macro expansies worden niet ge-list, tenzij er fouten in de
  419. expansie ontdekt werden. Het directief komt zelf niet in de
  420. listing voor.
  421.  
  422.  - CLIST
  423.  
  424. syntax: CLIST
  425.  
  426. Geeft aan dat wanneer er niet voldaan wordt aan een gestelde
  427. conditie van conditionele assembly de niet vertaalde regels
  428. code toch moeten worden ge-list. Het directief komt zelf
  429. niet in de listing voor.
  430.  
  431.  - NOCLIST
  432.  
  433. syntax: NOCLIST
  434.  
  435. Zorgt ervoor dat source code die niet vertaald wordt door
  436. het niet voldoen aan een 'conditional assembly statement'
  437. ook niet worden ge-list. Het directief komt zelf niet in de
  438. listing voor.
  439.  
  440.  - PAGE
  441.  
  442. syntax: PAGE
  443.  
  444. Na het "PAGE" directief wordt de listing op een nieuwe
  445. pagina vervolgd. Boven elke nieuwe pagina staat een pagina
  446. nummer, een copyright vermelding, een versie nummer en een
  447. door de gebruiker zelf op te geven kopregel. Het "PAGE"
  448. directief komt niet in de listing voor.
  449.  
  450.  - NOPAGE
  451.  
  452. syntax: NOPAGE
  453.  
  454. Schakelt het automatisch aanmaken van softpages met hun
  455. headers uit. Het directief wordt niet ge-list.
  456.  
  457.  - PLEN
  458.  
  459. syntax: PLEN <absexp>
  460.  
  461. Hiermee is de paginalengte, in regels, in te stellen. De
  462. paginalengte moet tussen de 20 en 200 regels liggen, en
  463. wordt bepaald door de waarde van de expressie in het operand
  464. veld. De vooringestelde paginalengte is 60 regels.
  465.  
  466.  - TTL
  467.  
  468. syntax: TTL <string>
  469.  
  470. Het "TTL" directief geeft aan welke string de assembler in
  471. de header op moet nemen. Deze string begint bij de eerste
  472. niet spatie of tab uit het operand veld en eindigt bij het
  473. einde van de regel. De string mag niet meer dan 60 tekens
  474. lang zijn. Het directief komt zelf niet in de listing voor.
  475.  
  476.  - FAIL
  477.  
  478. syntax: FAIL
  479.  
  480. Deze pseudop genereert een foutmelding voor de regel waarop
  481. deze staat. Dit is nuttig voor conditionele assembly met
  482. macro's waarbij bijvoorbeeld getest kan worden op het aantal
  483. actuele parameters.
  484.  
  485.  - EVEN
  486.  
  487. syntax: [<label>] EVEN
  488.  
  489. Zorgt ervoor dat de waarde van de program counter even
  490. wordt. Is de PC oneven, dan wordt er een byte met de waarde
  491. nul ingevoegd. Een eventueel aanwezig label krijgt de even
  492. waarde van de PC. 
  493.  
  494.  - CNOP
  495.  
  496. syntax: [<label>] CNOP <absexp>,<absexp>
  497.  
  498. De eerste expressie geeft de offset, terwijl de tweede
  499. expressie de basis voor de 'alignment' geeft. De code wordt
  500. 'aligned' naar de gegeven offset vanaf de eerste
  501. 'alignment'. Bijvoorbeeld CNOP 0,4 zorgt ervoor dat de code
  502. begint op een longword alignment.
  503.  
  504.  - MACRO
  505.  
  506. syntax: <label> MACRO
  507.  
  508. Het MACRO directief geeft het begin van een macro definitie
  509. aan. Deze definitie begint op de eerste regel na "MACRO" en
  510. loopt tot de regel met het "ENDM" directief. Het
  511. (verplichte) label is de naam van de macro. De macro kan dan
  512. worden geexpandeerd door het plaatsen van de macronaam in
  513. het operator veld eventueel gevolgd door een lijst met
  514. aktuele parameters.
  515.  
  516. De macro definitie mag systeemindexen en tien verschillende
  517. parameters bevatten. De formele parameters zijn van de vorm
  518. "\X", waarbij X (0-9) het nummer van de aktuele parameter
  519. is. Hierbij is \0 een bijzonder geval; deze parameter bevat
  520. de size-specifier van de macro-aanroep. Er zijn twee soorten
  521. aktuele parameters. Ten eerste de eenvoudige parameters.
  522. Deze worden afgesloten door een komma of blank (tab, spatie
  523. of newline) en kunnen deze afsluiters dus niet bevatten. De
  524. tweede soort parameters zijn de parameters tussen scherpe
  525. haken ('<' en '>'). Deze parameters kunnen wel tabs, komma's
  526. en spaties bevatten. Een systeem index is van de vorm "\@"
  527. en levert bij expansie een string van de vorm "_nnn" waar
  528. nnn aangeeft de hoeveelste expansie dit is van deze macro.
  529. Dit voorkomt dat er labels dubbel gedefinieerd worden bij
  530. meerdere expansies van een macro.
  531.  
  532. Macro-aanroepen mogen genest worden tot een diepte van 16
  533. aanroepen. Macro's mogen geen macro definities, maar wel
  534. macro aanroepen, bevatten. Indien expansies van macro's in
  535. de listing worden opgenomen lopen de regelnummers niet door.
  536.  
  537.  - NARG
  538.  
  539. syntax: NARG
  540.  
  541. Het symbool "NARG" is een speciaal symbool met als waarde
  542. het aantal actuele parameters dat meegegeven is aan de
  543. huidige macro. Buiten macro's heeft dit symbool de waarde 0.
  544.  
  545.  - ENDM
  546.  
  547. syntax: ENDM
  548.  
  549. Sluit een macro definitie, gestart met het "MACRO"
  550. directief, af.
  551.  
  552.  - MEXIT
  553.  
  554. syntax: MEXIT
  555.  
  556. Met behulp van het "MEXIT" directief kan de expansie van een
  557. macro afgebroken worden. Dit directief komt meestal voor bij
  558. 'conditional assembly'.
  559.  
  560.  - XDEF
  561.  
  562. syntax: XDEF <label>[,<label>]
  563.  
  564. Een of meer absolute of relatieve labels worden als
  565. 'entry-points' naar de huidige module gedefinieerd. Het
  566. refereren vanuit andere module's aan deze labels gebeurt met
  567. behulp van het "XREF" directief.
  568.  
  569.  - XREF
  570.  
  571. syntax: XREF <label>[,<label>...]
  572.  
  573. Maakt het mogelijk om aan labels te referen die in een
  574. andere module zijn gedefinieerd. De juiste waarde van de
  575. labels wordt dan later door de linker ingevuld.
  576.  
  577.  - INCDIR
  578.  
  579. syntax: INCDIR <pad>[,<pad>...]
  580.  
  581. Hiermee kunnen zoekpaden worden opgegeven die doorzocht
  582. kunnen worden bij een "INCLUDE" directief.
  583.  
  584.  - INCLUDE
  585.  
  586. syntax: INCLUDE <file naam>
  587.  
  588. Het "INCLUDE" directief maakt het mogelijk om externe
  589. bestanden op te nemen in de source code. Include bestanden
  590. mogen genest worden tot een diepte van 16 nivo's. Tenzij er
  591. bij de file naam een volledig pad is opgegeven wordt er
  592. eerst in de huidige directory gezocht naar het bestand.
  593. Wordt dit niet gevonden dan wordt er in de met "INCDIR"
  594. opgegeven zoekpaden gezocht naar het bestand.
  595.  
  596.  - IDNT
  597.  
  598. syntax: IDNT <string>
  599.  
  600. Aan een module kan een naam gegeven worden. Vindt de linker
  601. twee modulen met een en dezelfde naam dan wordt daar een
  602. sectie van gemaakt.
  603.  
  604.  
  605. 1.6.2 Conditional assembly.
  606.  
  607. Bij conditionele assembly kunnen stukken source code wel of niet
  608. geassembleerd worden, afhankelijk van een opgegeven conditie.
  609. Hierbij zijn de niet geassembleerde regels niet van direct belang
  610. voor het programma, daarom is de mogelijkheid opgenomen om zulke
  611. regels wel of niet te listen. De pseudopcode's die dit
  612. bewerkstelligen zijn: 'CLIST' en 'NOCLIST'.
  613.  
  614. Voor al de bovengenoemde 'listing control directives' geldt dat
  615. ze niet in de listing, tenzij een fout in size of operand,
  616. opgenomen worden.
  617.  
  618. De reeds genoemde 'conditional assembly directives' zijn steeds
  619. van de volgende vorm:
  620.       IFxx <operand>
  621.         <source-code>
  622.       ENDC
  623.  
  624. Waarbij IFxx een van de volgende vormen is:
  625. -IFEQ assembleer indien expressie in operand =0
  626. -IFNE assembleer indien expressie in operand <>0
  627. -IFGT assembleer indien expressie in operand >0
  628. -IFGE assembleer indien expressie in operand >=0
  629. -IFLT assembleer indien expressie in operand <0
  630. -IFLE assembleer indien expressie in operand <=0
  631. -IFC  assembleer indien de strings in de operanden gelijk zijn
  632. -IFNC assembleer indien de strings in de operanden ongelijk zijn
  633. -IFD  assembleer indien symbool in de operand gedefinieerd is
  634. -IFND assembleer indien symbool in de operand ongedefinieerd is
  635.  
  636. De IFxx condities mogen onbeperkt genest worden, waarbij de
  637. eerste 'ENDC' bij de laatste conditie hoort.
  638.  
  639.