Sampl_instruction_descriptions



THIS IS A LIST OF SOME OF THE INSTRUCTIONS FROM THE SAMPLSEL PROGRAM.

SET COMMANDS ARE DOS COMMANDS.  THEY EQUATE SOME LABEL TO A VALUE.

THAT VALUE CAN BE USED AS A FILE INDICATOR.

OR THAT VALUE CAN BE WHATEVER YOU'D LIKE.

BAT COMMANDS ARE ALSO DOS COMMANDS.

BAT COMMANDS INVOKE ACTIONS, LIKE ASSEMBLE, OR EXECUTE A PROGRAM.

 

         SET PA="LA" 

         SET  G=C:\USERS\LIN\DOCUMENTS\Z390CODE\SAMPLSEL

         SET       IN=%G%.PRN

         BAT\ASMLG %G%.MLC TIME(1) PARM(%PA%)

          

WHEN YOU'RE ASSEMBLING A PROGRAM, THERE ARE EXECUTABLE INSTRUCTIONS.

THERE ARE MACRO INSTRUCTIONS, THAT GENERATE SEVERAL EXECUTALBE INSTS

AND THERE ARE INSTRUCTIONS TO THE ASSEMBLER.  EG 

         AGO   .START    AGO TELLS THE ASSEMBLER TO FIND THE LABEL  

.START   ANOP            AND GO THERE.  ANOP CAN HOST A LABEL 

 

*                         COMMA IS A COMMENT

              INSTRUCTIONS TO THE ASSEMBLER.

 

SAMPLSEL START 0          START INDICATES THE BEGINNING OF A PGM

         END   SAMPLSEL   AND END INDICATES THE EMD

         USING *,13       USING TELLS THE ASSEMBLER WHAT REGISTER TO USE

         USING IHADCB,2

         LTORG            =C'ABC' IS A LITERAL.  THEY'LL BE PUT AT THE

                          END OF THE PROGRAM, OR WHEREVER THERE'S A LTORG

@@PAD#2  EQU   ???        ASSIGNS A VALUE TO A LABEL

 

         ORG   LABEL      TELL THE ASSEMBLER WHERE TO PUT THE NEXT INST

         PUSH  PRINT          PUSH AND POP MEANS CHANGE SOMETHING

         PRINT NOGEN          IN THIS CASE, DON'T PRINT GENERATED CODE

         POP   PRINT          RESTORE PRINTING TO WHAT IT WAS BEFORE

 

                 MACROS

 

         YREGS  ,          GENERATES THE R0, R1, .. R14, R15 LABELS

                           THAT YOU CAN USE TO MEAN REGISTERS.

 

         OPEN  ((2),OUTPUT)       OPEN A FILE FOR INPUT OR OUTPUT

         OPEN  (SYSPRINT,OUTPUT)

         CLOSE (IN,,OUT,,SYSPRINT) CLOSE ONE OR MORE FILES

READ     GET   IN                  READ A RECORD

         PUT   SYSPRINT,LINE       WRITE A RECORD

 

         AP    #WRITE,=P'1'        ADD A PACKED DECIMAL #

         B     READ                BRANCH TO A LABEL

         BAL   R9,OPENOUT          BRANCH AND LINK. GO TO A LABEL,

                                   AND PUT THE RETURN ADDRESS IN R9

         BCT   R3,ZLOOP            BRANCH ON COUNT NOT 0.  PUT THE #

                                   OF TIMES YOU WANT TO DO A LOOP.

         BCTR  R3,R2               BCT SUBTRACTS 1 AND BRANCHES IF

                                   THAT REGISTER IS NOT 0

         BE    WRITE             AFTER A COMPARE, BRANCH ON EQUAL

         BL    LOOP              "  BRANCH LOW

         BM    NOPARM            "  BRANCH MINUS (SAME AS LOW)

         BNE   TRYNEXT           "  BRANCH NOT EQUAL

         BR    14             BRANCH REGISTER - GO TO THE ADDR 

                              IN THE REGISTER.

CLCPARM  CLC   PARM(0),0(R3)     COMPARE LOGICAL CHARACTER        

                                 COMPARE 2 CHARACTER FIELDS.

         CR    R3,R4          COMPARE THE CONTENTS OF 2 REGISTERS

         CVD   R0,DW             CONVERT TO DECIMAL  CONVERT THE BINARY

                                 NUMBER IN A REGISTER TO PACKED DECIMAL

         DC    C'PARM= '      DC DEFINE A CONSTANT.  (C)CHARACTER,

ED9      DC    X'40202020'       (X) HEX  F(FULL WORD BINARY)

                                 H(HALF WORD BINARY)  

                                 D(DOUBLE WORD, 8 BYTES) 

         DS    17F               DS RESERVES MEMORY BUT DOESN'T

                                 INITIALIZE IT.

         ED    LINE(L'ED9),0(R4) ED (EDIT A PACKED DECIMAL #)

          

         IN THIS DISCUSSION,  OR  TURNS BITS ON,

         AND TURNS BITS OFF,  XO  EXCLUSIVE OR CAN REVERSE BITS

 

         O     4,FIELD        TURNS BITS IN REG-4 ON IF THEY'RE ON

                              IN 'FIELD'

         N     3,FIELD        TURNS BITS IN REG-3 OFF IF THEY ARE OFF 

                              IN 'FIELD' 

         X     2,FIELD        FOR EACH POSITION, IF BOTH BITS ARE OFF 

                              OR BOTH BITS ARE ON, THE BIT IN REG-2

                              IS TURNED OFF.  IF ONE, BUT NOT THE OTHER,

                              IS ON, THEN THE BIT IN REG-2 IS TURNED ON.

         OR  NR  XR           DO THE SAME FOR 2 REGISTERS

         OC  NC  XC           DO THE SAME FOR FIELDS IN MEMORY

         OI  NI  XI MSG,C'@'  MOVE @ TO MSG

 

         EX    R6,MVCPARM       EXEDUTE THE INSTRUCTION AT LOCATION

                                MVCPARM,  "ORING" THE LOW BYTE IN

                                REG-6 WITH THE 2ND BYTE IN THE 

                                INSTRUCTION AT LABEL MVCPARM.

                                IT'S NOT A REPLACE, IT'S AN OR.

         IC    15,RC          INSERT 1 BYTE INTO REG-15

         L     13,4(13)         LOAD 4 BYTES INTO REG-13

         LH    R0,DCBLRECL    LOAD HALFWORD (2 BYTES) INTO REG-0

         LM    14,12,20(13)   LOAD MULTIPLE REGISTERS 

         LR    13,15            LOAD WHAT'S IN REG-15 INTO REG-13 

         LA    R2,IN       LOAD ADDRESS LOADS A NUMBER, WHICH CAN BE

         LA    R3,12       AN ADDRESS, BUT DOESN'T HAVE TO BE.

                           LOAD ADDRESS DOES NOT GET ANYTHING FROM MEM.

 

         MVC   LINE(L'MSG),MSG      MVC - MOVE CHARACTER

                                    FROM B TO A,  FROM MSG TO LINE

         MVC   LINE(5),PARM       MOVE 5 BYTES FROM PARM TO LINE

                

         MVI   MSG+30,C','    MVI - MOVE IMMEDIATE  , TO MSG+30

                

         S     R8,FULLONE     SUBTRACE WHAT'S AT FULLONE FROM R8

         SH    R6,=H'1'       SUBTRACT A HALFWORD FROM R6

         SR    R4,R6          SUBTRACT  R6 FROM R4

         ST    13,4(15)       STORE REG-13

         STM   14,12,12(13)   STORE LOTS OF REGISTERS

         UNPK  OPENMSG+48(5),DW+5(3)  UNPACK A DECIMAL FIELD TO 

                                      A CHARACTER FIELD.

 

         TR    OPENMSG+28(2),HEX  TRANSLATE 2 BYTES, USING THE 256 BYTE

                                  TABLE AT LABEL HEX.