Assembler Proficiency Self-test


As part of our curriculum of assembler courses we have developed two assembler proficiency tests. We use these tests for our customers to assess the initial and/or ending level of assembler proficiency of our students.

One of these tests is now being made available on the web as an Assembler Proficiency Self-test. The other test is available upon request.

This self-test enables you to assess your level of assembler proficiency. You have the option to:

For scoring results, we use a set of standard answers. This set has been tested and verified in the field and has proven to measure candidates' assembler proficiency quite accurately.

For questions on our curriculum or on this self-test, its scoring, or about other testing material, please contact Abe Kornelis.
Alternatively, you might want to check The Trainer's Friend's Curriculum or contact Steve Comstock.

Instructions and assignments for the self-test.

This test assumes a z/OS environment. For z/VM, z/VSE, z/TPF and/or z/Linux adapted tests can be made upon request.

This test consists of 60 questions (theory) and 3 programming assignments. For each of these parts you have a specific amount of time available as follows:

After completing any assignment within time, the remaining time can be used for any of the other assignments.

Maximum scores:

Assignment 1: Theory.

You may use your books and notes. Please answer the questions using your own wording; literally transcripted texts will be treated as incorrect answers.

Please insert your answers following each question. For scoring, please submit your answers by e-mail.

  1. What is the difference between a DSECT and a CSECT?
  2. For what purpose does one use the LTORG instruction?
  3. What is the range of a base register?
  4. What are modal instructions? What kind of instructions are these?
  5. What relationship exists between AMODE and RMODE?
  6. For what purpose does one use a LOCTR?
  7. How many digits can be contained in a packed decimal field? Why?
  8. What requirement(s) does a program need to satisfy in order to qualify as reusable?
  9. What requirement(s) does a program need to satisfy in order to qualify as reenterable?
  10. What is the difference between a Y-con and an S-con?
  11. What is the function of the PSW? Name the 4 most important subfields.
  12. What is a DCB, what is an ACB, and what is the difference?
  13. What is a CDE? What is it used for?
  14. How does one round a packed decimal number?
  15. How does a re-entrant program find a place to store its variables?
  16. How does one create a packed decimal number from a "readable" one?
  17. In what ways can one change a packed decimal number into readable text?
  18. When formatting numeric output, how does one specify on the appropriate instruction that leading zeros are to be suppressed? How do you specify which character is to replace leading zeroes?
  19. Special place holders can be used in an edit pattern. Give the meaning associated with each specific value.
  20. What is the difference between ED and EDMK and when does this effect vanish (read: not occur)?
  21. What is the difference between an index register and a base register?
  22. Describe exactly the effect of MR 4,7
  23. Describe exactly the effect of DR 6,9
  24. For what use are the first, second, and third operands (respectively) of the EQU instruction intended?
  25. What 32-bit instructions do we have for controlling loops?
  26. What do we use ORG for?
  27. How does one exchange the contents of two fields A and B in virtual strage without using a third field? Same question for two 64-bit registers.
  28. How does one shift the contents of a register over a variable number of bit positions?
  29. What does the EX instruction do? What is a common application?
  30. How does a program find the contents of the parameter specified on the invoking EXEC JCL card? (Assume MVS / zOS)
  31. What is the meaning of MACRF=GL on a DCB macro invocation?
  32. What is the meaning of RECFM=VBS and RECFM=FBS respectively?
  33. What is the difference between EODAD and SYNAD?
  34. What is a V-con and what is the difference between a V-con on the one hand and an A-con with an EXTRN on the other hand?
  35. What is an address space? What is a Task?
  36. From your TCB you can follow your PRB chain. For what reason would one want to do that?
  37. What does the SNAP macro do? For what purpose does one use SNAP?
  38. What is an RDW? What is a BDW? What is the difference?
  39. What does one use a DCBE for?
  40. What is the difference between static and dynamic linkage? Please specify the major advantage of each method.
  41. What are LPA and JPA? What is the difference?
  42. Which macro do you use to undo the effects of the LOAD macro?
  43. What is the difference between LINK and CALL?
  44. What is a subpool? What is the purpose of Cell Pool Services?
  45. What does AGFR Do?
  46. What does CY do?
  47. What is the difference between LLGT and LLILL?
  48. What do SLAG and RLL do?
  49. What is the difference between HFP, BFP, and DFP?
  50. What is the difference between ALRK and ALSIH?
  51. What is the difference between LAAG and LOCG?
  52. What is the dead zone? Why is it called the dead zone?
  53. For what purpose do we use IEABRC? How does IEABRC work?
  54. Which types of variables do we use within macros?
  55. Describe how one concatenates SETC variables and how one specifies substrings. Give an example of each.
  56. Describe how one designates an element in an array of SETC variables. Give an example. What is the maximum number of dimensions that HLASM supports for SETx variables?
  57. Describe how one designates a created set symbol. Give an example.
  58. What is the difference between between a label and a sequence symbol?
  59. Which instruction does one use to implement a loop during conditional assembly?
  60. What is the difference between DC A(FIELD) and DC AL4(FIELD)?

Assignment 2: Check Parameter.

Please write a program that accepts a JCL-parameter. This parameter is to contain a valid number between 0 and 4095 inclusive. The program should process the parameter according to the following criteria:

Assignment 3: Tax-deductible Item.

For calling and testing your solution, we have provided a test-driver. You can use the driver as is, or you can modify it according to your need.

Please write a complete sub-program named ASSGN3 that is to calculate a tax-deductible item as follows:

Please mind:
all amounts are stored as packed decimals with 9 digits before the decimal point/comma and two decimal places after the decimal point/comma. Likewise all percentages are stored as packed decimals with two digits before and one after the decimal point/comma. Thresholds are to be rounded either down or up according to the tax payer's interest. Final result to be rounded to cents, also serving the tax payer's interest.

The program is to produce a report line, which will be printed by the invoking program. The program is to end with one of the following return codes:

Requirements for the report line:

On invocation the program receives in R1 a pointer to the following parameter list:

PARM1    DC A(PARMAREA)   * Pointer to parameter area
PARM2    DC A(PRTLINE)    * Pointer to buffer for print line

Lay-out of parameter area:

NOMINAL  DC PL6           * Nominal amount for deductible item
RESULT   DC PL6           * Calculated deductible amount
GROSS    DC PL6           * Gross income
MINPERC  DC PL2           * Percentage lower threshold
MINAMT   DC PL6           * Minimum amount for lower threshold
MAXPERC  DC PL2           * Percentage upper threshold
MAXAMT   DC PL6           * Maximum amount for upper threshold
TABSIZE  DC H             * Nr of entries in the table
TABLEN   DC H             * Length of each table entry
TABPTR   DC AL4           * Pointer to the table

The table entries have the following lay-out:

LIMIT    DC PL6           * Upper limit for this percentage
PERC     DC PL2           * Applicable percentage
         DC CL0           * Filler to next entry

The print line has the following lay-out:

PRTNOMNL DC CL20          * Nominal amount
PRTRESLT DC CL20          * Deductible amount
PRTREM   DC CL40          * Remarks field

Assignment 4: Build Macro.

For calling and testing your solution, we have provided a test-driver. You can use the driver as is, or you can modify it according to your need.

Please write a macro DEFREGS which is to define names for registers. This macro is to accept a maximum of four parameters:

  1. Positional parm: starting number for series of registers
  2. Positional parm: ending number for series of registers
  3. Positional parm: counting method - dec or hex, default dec
  4. Keyword parm: prefix, default is R

The parameters should be processed according to the following criteria:


You have completed the assembler proficiency self-test. You had six hours for this test. Did you complete all assignments within time?

If you want to, we can score your results. To have them scored please contact Abe Kornelis.
Please note: scoring your results takes time and is not free of charge.


This site is a member of WebRing.
You are invited to browse the list of mainframe-loving sites.
    Tyrannosaurus Rex Dinos are not dead. They are alive and well and living in data centers all around you. They speak in tongues and work strange magics with computers. Beware the dino! And just in case you're waiting for the final demise of these dino's: remember that dinos ruled the world for 155-million years!
Dinos and other anachronisms
[ Join Now | Ring Hub | Random | << Prev | Next >> ]

To the Introduction.
To Assignment 1: Theory.
To Assignment 2: Check Parameter.
To Assignment 3: Tax-deductible Item.
To Assignment 4: Build Macro.
To the Completion.

To the English Homepage.
To the general Homepage.

Below you find the logo of our sponsor and logos of the web-standards that this page adheres to.