Waarom assembler?
Het gebruik van assembler als programmeertaal is niet populair
   meer. Over het
   algemeen geeft men de voorkeur aan derde of vierde generatie talen.
Meestal - voor "gewone" applicaties - is dit volkomen
 terecht. Er zijn echter
 wel degelijk situaties, waarin het wijs is om de argumenten voor en
 tegen eens
 goed op een rij te zetten.
Niet alleen berusten de argumenten tegen het gebruik van assembler
 grotendeels
 op vooroordelen, ook zijn de argumenten voor het gebruik van
 assembler relatief
 onbekend. Wie de vooroordelen tegen assembler wel
 kent, maar
 de voordelen ervan niet, kan moeilijk een
 objectieve
 beslissing nemen ten aanzien van de taalkeuze.
Wel blijft natuurlijk altijd gelden wat voor elke
 programmeertaal
 geldt: zonder goed opgeleide mensen kom je nergens. Zonder
 documentatie blijf
 je nergens.
Hieronder volgt eerst een overzicht van de belangrijkste
 voordelen
 van assembler. Vervolgens een poging om de
 vooroordelen
 te nuanceren. We eindigen met een korte
 samenvatting.
Het werken met assembler biedt u een aantal mogelijkheden, die
 3GL- en
 4GL-programmeurs niet (altijd) tot hun beschikking hebben.
 - Fouten ondervangen.
  Hoe vaak gebeurt het dat een applicatie struikelt over een onnozel
  probleempje? Een S0C7-abend doordat er spaties stonden waar nullen
 verwacht
  werden? Een hulpdataset die net iets te klein gealloceerd is? Met
  behulp van
  een relatief eenvoudige assembler-routine zijn dit soort problemen
  af te
  vangen en op te lossen. Uw applicatie struikelt niet, maar loopt
  gewoon door.
  Het geconstateerde probleem wordt gemeld in de joblog of in een
  aparte error
  log, zodat de verantwoordelijke beheerder de benodigde acties kan
  ondernemen. 
 - Gebruik van geheugen boven de 16MB-lijn.
  Er zijn nog steeds bedrijven die hun compiler (moeten) instellen op
  Amode=24.
  Door het toevoegen van kleine assembler-modules kunt u uw
  programma's wel
  boven de 16MB-lijn laten draaien, waardoor op cruciale punten de
  druk op het
  geheugen onder de 16MB-lijn wordt verlicht. 
 - Dynamisch geheugenbeheer.
  Programma's die gegevens bijhouden in tabellen, lijsten, of bomen
  weten vaak
  van te voren niet hoe groot die tabellen etc. zullen moeten worden.
  In
  assembler kan geheugen dynamisch worden aangevraagd en weer
  vrijgegeven,
  waardoor tabellen etc. gemakkelijk zijn uit te breiden en/of in te
  krimpen tot
  het benodigde formaat. 
 - Optimalisatie.
  De moderne compilers maken zeker efficiënte code aan. Zij
  kunnen echter
  niet bepalen welk optimalisatie-criterium voor u in een bepaald
  programma van
  cruciaal belang is. Door de kennis die de programmeur heeft van de
  structuur
  van de applicatie kan hij dit wel. Hierdoor kan bijvoorbeeld
  geanticipeerd
  worden op page-steal, waardoor het aantal page faults gereduceerd
  kan worden.
  Resultaat: uw programma loopt sneller, en het systeem krijgt meer
  lucht. 
 - Het gebruik van faciliteiten die het operating system biedt.
  Veel van dit
  soort services zijn niet beschikbaar in
  'hogere' programmeertalen, en wanneer ze dat wel zijn, dan is vaak
  de overhead
  van het aanroepen vauit die taal zo groot, dat het het performance
  voordeel
  al gauw te niet doet.
  U kunt hierbij onder meer denken aan:
  
   - Data spaces.
    Programma's die behoefte hebben aan grote hoeveelheden
    werk-geheugen kunnen
    hiervan gebruik maken. U hoeft hierdoor minder gauw hulpdatasets
    te alloceren
    (scheelt I/O), en u bespaart virtual storage in uw eigen address
    space,
    waardoor u minder gauw een out-of-storage-abend zult krijgen. 
   - Virtual lookaside facility.
    VLF biedt u de gelegenheid om benoemde gegevens in virtual storage
    te bewaren,
    buiten uw eigen address space. Voor benoembare gegevens die
    veelvuldig worden
    geraadpleegd (bv PDS-members uit bepaalde datasets) kan dit
    behoorlijk wat
    I/O-vertraging besparen. 
   - Gelijktijdig benaderen van meerdere datasets.
    Wanneer een applicatie records uit twee of meer datasets nodig
    heeft, kunnen
    deze gelijktijdig worden gelezen en/of geschreven. Het is zelfs
    mogelijk
    meerdere records uit een enkele dataset gelijktijdig te benaderen.
    Deze
    gelijktijdigheid kan heel wat I/O-wachttijd schelen, vooral als de
    betreffende
    datasets niet op hetzelfde volume staan. 
   - Subtaken.
    Door van een taak een of meer subtaken af te splitsen kan de
    verwerkingstijd
    enorm bekort worden. B.v. door het schrijven en lezen van
    tussenbestanden
    overbodig te maken. Of door het aanmaken van de journaalpost aan
    een subtaak
    over te laten, waardoor de verkoop-transactie zelf sneller
    afgehandeld kan
    worden. 
   - Reenterability.
    Door veel-gebruikte programma-segmenten reenterable te maken
    kunnen ze in
    common storage geplaatst worden (liefst boven de 16MB-lijn
    natuurlijk).
    Hierdoor kan het betreffende programma efficiënter worden
    uitgevoerd: de
    kans op een page-fault in zo'n code-segment is relatief klein.
   
  
  
Over het werken met assembler bestaan een aantal vooroordelen.
 De belangrijkste daarvan zijn wel:
 - Gestructureerd programmeren kan niet in assembler.
  Onjuist, in feite biedt assembler op dit terrein zelfs meer
  faciliteiten dan
  de meeste 3GLs. 
 - Onderhoud aan assembler-programmatuur kost veel meer tijd dan
  bij een
  3GL.
  In de tijd dat 3GLs werden geïntroduceerd, was dit wellicht
  waar. Nu nog
  maar zeer ten dele. 
 - Assembler is een omslachtige taal en moeilijk te leren.
  Assembler is inderdaad iets minder doorzichtig voor de leek dan een
  taal als
  Cobol. Een taal als C of C++ daarentegen is weer veel moeilijker te
  leren. 
 - Ad 1.
 
 - Gestructureerd programmeren kan niet in assembler.
  Het aanbrengen van structuur in programma's is in de eerste plaats
  een kwestie
  van stijl en vakmanschap. Als de gebruikte taal goede faciliteiten
  biedt is dat
  mooi meegenomen.
  
   - Op het gebied van segmentatie biedt assembler meer
    mogelijkheden dan 3GLs:
    niet alleen kun je in assembler subroutines en functies maken, ook
    is het
    mogelijk om programma's op te delen in CSECTS, die natuurlijk weer
    in
    subroutines en/of functies kunnen worden opgedeeld.
    Bovendien kan voor het calling mechanisme gekozen worden tussen
    een aantal
    alternatieven, waaronder standaard MVS-linkage via register 14, de
    linkage
    stack, of een ander calling mechanisme, al dan niet via een
    jump-table.
    Voor het doorgeven van argumenten ten slotte kan gekozen worden
    tussen
    pass-by-value en pass-by-reference, of een mengsel van die twee.
    
   - Op het gebied van loop-control biedt assembler met 3GLs
    vergelijkbare
    mogelijkheden: naast de branch-on-count zij er de branch-on-index
    instructies.
    Met behulp van macro's kunnen deze mogelijkheden nog worden
    uitgebreid met
    krachtiger instructies.
 
   - Net als in de meeste 3GLs biedt assembler de mogelijkheid om
    standaard-code vanuit een copy-member in uw programma's op te
    nemen.
 
   - De macro-faciliteit ten slotte biedt diverse mogelijkheden voor
    het
    aanbrengen van structuur en het standaardiseren van regelmatig
    weerkerende
    programma-structuren. Door het gebruik van conditional assembly
    kan altijd
    optimale code worden aangemaakt. De meeste 3GLs beschikken niet
    over
    vergelijkbare functionaliteit.
      
  
  
 - Ad 2.
 
 - Onderhoud aan assembler-programmatuur kost veel meer tijd dan bij
  een 3GL.
  Toen 3GLs geïntroduceerd werden, was er een grote basis van
  assembler-programma's. Doordat gestructureerd programmeren toen nog
  een nieuwe
  ontwikkeling was lieten deze programma's vaak te wensen over aan
  structuur. In
  assembler kunt u - net als in andere talen - zo veel of zo weinig
  structuur
  aanbrengen als u zelf wilt. Met alle consequenties voor de
  onderhoudbaarheid.
  In assembler heeft u wel meer mogelijkheden dan in de meeste 3GLs om
  er een
  rommeltje van te maken. Maar dank zij de macro-taal heeft u in
  assembler ook
  weer aanzienlijk meer mogelijkheden voor het aanbrengen van
  structuur dan in
  enige andere taal.
   
  Verder geldt natuurlijk de kwestie van vakmanschap.
  De 3GL-programmeur die
  assembler "er bij doet" kan zich niet meten met de vakman.
  Dat vertaalt zich
  niet alleen in de benodigde tijd, maar ook in de kwaliteit van de
  geproduceerde
  code. Probleem is dan natuurlijk wel, hoe u aan ervaren vakmensen
  komt. Maar
  dat geldt - zeker op dit moment - voor elke taal.
   
  Als we voor de benodigde mankracht een eerlijke vergelijking willen
  maken
  tussen assembler en 3GLs dan moeten we dus niet alleen vakman naast
  vakman
  zetten, maar ook de ouderdom van de programmatuur (lees: mate van
  structuur)
  in ogenschouw nemen, alsmede de kwaliteit van de beschikbare
  documentatie.
   
  Onze ervaring is dat u in de nieuwbouw dan zo'n 10 tot 20 procent
  extra
  mankracht moet rekenen voor assembler. Bij onderhoud is het verschil
  te zeer
  afhankelijk van de mate waarin de programmatuur gedocumenteerd en
  gestructureerd is om enig cijfer te kunnen geven.
   
  Een voorbeeld: een van onze klanten draait naast een door ons
  ontwikkeld
  assembler-module een Cobol-variant met dezelfde functionaliteit. Bij
  de laatste
  paar modificaties was de assembler-programmeur in éé
  n dag klaar;
  de Cobol-programmeur had er drie dagen voor nodig. Hoewel dit een
  bijzonder
  voorval zou kunnen zijn, toont het wel aan dat onderhoud aan
  assembler
  programmatuur niet per definitie meer tijd vergt dan onderhoud aan
  3GL-programmatuur.
   
 
 - Ad 3.
 
 - Assembler is een omslachtige taal en moeilijk te leren.
  Als u van "leken" afhankelijk bent, dan moet u zeker niet
  voor
  assembler kiezen. Zoals met elke andere taal creëert u dan uw
  eigen
  moeilijkheden.
  Maar er zijn natuurlijk ook vakmensen beschikbaar. Die beheersen
  niet alleen
  de kunst van het assembleren, die hebben ook grondige kennis van de
  macro-faciliteiten van de assembler, waarmee snel, efficiënt en
  netjes
  coderen binnen handbereik komt. 
De argumenten voor en tegen kunnen als volgt worden samengevat:
 - Werken met assembler kost iets meer tijd, maar niet zo veel als
  men pleegt
  te denken.
 
 - Assembler biedt meer mogelijkheden tot structureren, maar bij
  gebrek aan
  vakmanschap zullen er ook sneller onderhoudsproblemen kunnen
  ontstaan.
 
 - In assembler heeft u meer mogelijkheden voor het oplossen of
  voorkomen van
  performance-problemen.
 
 - Het kost iets meer moeite om aan vakmensen te komen of ze op te
  leiden.
 
Alles bij elkaar luidt ons standaard-advies: gebruik geen assembler
 als het
 niet nodig is. Maar als er wel aanleiding toe is, loop er dan niet
 voor weg;
 assembler is niet eng. En als u dan voor assembler kiest, bouw dan
 alleen die
 modules in assembler, die daar baat bij hebben. Het grootste deel van
 uw
 project kunt u prima in uw vertrouwde 3GL of 4GL bouwen.
Ten slotte is het voor sommige zaken domweg niet mogelijk een
 andere taal te
 gebruiken dan assembler. Dit geldt met name voor veel exits.
 Niet alleen het operating system, maar ook een groot aantal
 standaard produkten
 zijn voorzien van de mogelijkheid om exits te installeren, teneinde
 e.e.a. op
 uw eigen behoeften/specificaties af te stemmen. Voor de meeste exits
 geldt, dat
 coderen in assembler domweg onvermijdelijk is. Met de hierboven
 gegeven
 argumenten hoeft dat dus geen onoverkomelijk probleem (meer) te zijn.
 
 
  
   Deze site is aangesloten bij WebRing. 
   Bekijkt u gerust de
   
    lijst van mainframe-gerelateerde sites.
   | 
  
    
   | 
  
   Dino's zijn niet dood. Ze zijn gezond en wel en leven in
   computer-centra overal
   om ons heen. Zij spreken in tongen en doen wonderbare magie met
   computers.
   Pas op voor de dino! En voor het geval u zit te wachten op het
   definitieve
   einde van deze dino's: onthoud dat dino's de wereld 155 miljoen
   jaren hebben
   geregeerd!
   | 
 
 
  
   Dino's en andere anachronismen 
   [ 
      Aanmelden
   | 
       Ring Overzicht
   | Willekeurig
   |
   
     
      << Vorige
   
   |
   
    
     Volgende >>
   
   ] 
    
   | 
 
 Naar de voordelen van assembler.
 Naar de vooroordelen tegen assembler.
 Naar de samenvatting.
 Naar de nederlandse homepage.
 Naar de algemene homepage.
 Hieronder vindt u het logo van onze
 sponsor
 en logos van web-standaarden waaraan deze web-pagina voldoet.