M80.Txt
ZXNet echo conference «code.zx»
From Michael Kondratyev → To Kirill Frolov 4 April 1999
2.3. SYNTAX OF ASSEMBLY SENTENCES
AN ASSEMBLY PROGRAM CONSISTS OF A SEQUENCE
OFFERS. EACH SENTENCE HAS THE FOLLOWING STRUCTURE:
LABEL: (OPERATOR) (OPERANDS) ;NOTE
IT IS NOT NECESSARY THAT THE SENTENCE BEGINS WITH
MARKS.
2.3.1. MARK
A LABEL IS A SYMBOLIC NAME FOLLOWED BY
COLONS. IF THE MARK IS PRESENT, IT SHOULD BE FIRST
ELEMENT OF A SENTENCE. THE VALUE OF THE MARK IS THE CURRENT VALUE
ADDRESS COUNTER. IF THERE ARE TWO COLONS AFTER THE MARK, THEN
THE LABEL IS DECLARED INTERNAL (PUBLIC) AND IT CAN BE ACCESSED
CONTACT FROM ANOTHER PROGRAM.
2.3.2. OPERATOR
THE NEXT ELEMENT AFTER THE MARK OR THE FIRST ELEMENT IF THERE IS NO MARK
THE OPERATOR IS COMING. THE OPERATOR CAN BE:
1) MNEMOCODE OF MICROPROCESSOR KR580VM80A;
2) MACRO CALL;
3) PSEUDO TEAM;
4) EXPRESSION.
IF THE OPERATOR FIELD CONTAINS AN EXPRESSION, THEN THE ASSEMBLER
TREATS IT AS A PSEUDO-COMMAND DB.
2.3.3. OPERANDS AND NOTES
THE NEXT ELEMENT OF A SENTENCE ARE THE OPERANDS. B
DEPENDING ON THE OPERATOR THE OPERAND FIELD CAN BE ONE OR TWO
OR SEVERAL OPERANDS.
INSTRUCTION CODES CAN BE USED AS OPERANDS
MICROPROCESSOR KR580VM80A. IT SHOULD BE borne in mind that
ONLY THE FIRST BYTE OF THE COMMAND WILL BE A VALID OPERAND.
EXAMPLE.
MVI A,JMP
ADI CPI
MVI B,RNZCPI INX H
ACI LXI B
MVI C,MOV A,B
IF MORE THAN ONE BYTE IS INCLUDED IN THE OPERAND (CPI 5,
LXI B,LAM,JMP A5), THEN AN ERROR MESSAGE WILL BE PROVIDED.
NOTES ARE THE LAST ELEMENT OF THE SENTENCE.
NOTES ALWAYS START WITH ; AND ENDS WITH CR
(VK).
2.4. PSEUDO COMMANDS
2.4.1. PSEUDO MOVEMENT COMMANDS
A DISTINCTIVE FEATURE OF THE M80 MACROASSEMBLER IS
THEIR CREATION OF MOVEABLE MODULES. MODULE MODULE
IT FACILITATES DEBUGGING AND TESTING, ALLOWS YOU TO COMPOSITION
A PROGRAM CONSISTS OF SEVERAL MODULES, WRITTEN IN DIFFERENT LANGUAGES.
IN ADDITION, THE PROGRAM CAN BE DIVIDED INTO SEGMENTS AND INDICATED
WHICH SEGMENTS SHOULD BE PLACED ONLY IN RAM (SEGMENTS
DATA), AND WHICH CAN BE STORE IN ROM (SEGMENTS CONTAINING
PROGRAM). THESE SEGMENTS ARE CREATED USING DSEG PSEUDO COMMANDS
And CSEG. THE ASEG PSEUDO COMMAND IS USED IN CREATION
NON-MOVING (ABSOLUTE) CODES. PSEUDO COMMON COMMON CREATES
COMMON DATA AREAS FOR EVERYONE NAMED IN THE PROGRAM
COMMON BLOCK.
FOR EACH PROGRAM SEGMENT ASEG, CSEG OR DSEG
YOUR ADDRESS COUNTER STARTS, WHICH STOPS COUNTING
WHEN THE SEGMENT TYPE CHANGES AND RESUMES THE COUNTDOWN WHEN AGAIN
THERE IS A CORRESPONDING SEGMENT. ADDRESS COUNTER VALUE
ANY SEGMENT CAN BE CHANGED USING THE ORG PSEUDO COMMAND
(P.2.4.12).BY DEFAULT, THE CSEG PSEDOCOMMAND IS ALWAYS IN EFFECT.
2.4.1.1. ASEG
PSEUDO COMMAND FORMAT:
ASEG
ASEG SET THE ADDRESS COUNTER VALUE TO ABSOLUTE
SEGMENT IN MEMORY. THE COUNTER VALUE WILL BE CONTINUED
PREVIOUS ASEG (DEFAULT 0), IF AFTER ASEG IS NOT WORTHY
ORG.
2.4.1.2. COMMON
PSEUDO COMMAND FORMAT:
COMMON /"BLOCK NAME"/
COMMON SET THE ADDRESS COUNTER TO THE ADDRESS OF THE SELECTED
COMMON MEMORY BLOCK. FOR COMPATIBILITY WITH THE COMMON B OPERATOR
IN FORTRAN, THIS ADDRESS ALWAYS POINTS TO THE BEGINNING OF THE AREA. IF
"BLOCK NAME" IS OMITTED OR CONSISTS OF SPACES, THEN THE COMMON BLOCK
CONSIDERED EMPTY.
2.4.1.3. CSEG
PSEUDO COMMAND FORMAT:
CSEG
CSEG SET THE ADDRESS COUNTER VALUE TO OFFSET
RELATIVE TO THE BEGINNING OF THE MEMORY SEGMENT CONTAINING COMMAND CODES.
THE ADDRESS VALUE WILL BE THE VALUE OF THE PREVIOUS CSEG
(DEFAULT 0) UNLESS THERE IS A PSEUDO COMMAND AFTER CSEG
ORG. FOR ASSEMBLY CSEG IS THE DEFAULT PSEUDO-COMMAND.
2.4.1.4. DSEG
PSEUDO COMMAND FORMAT:
DSEG
DSEG SET THE ADDRESS SEGMENT COUNTER VALUE ON
RELATIVE ADDRESS OF THE MEMORY SEGMENT CONTAINING DATA.
THE ADDRESS VALUE WILL CORRESPOND TO THE ADDRESS OF THE LAST DSEG
(DEFAULT 0) IF THERE WAS NO ORG PSEUDO-COMMAND.
2.4.2. DB - DEFINE BYTE
PSEUDO COMMAND FORMAT:DB "EXPRESSION","EXPRESSION",... OR
DB "ROW" ["ROW"...]
ARGUMENTS FOR DB CAN BE EXPRESSIONS OR STRINGS. D.B.
REMEMBERS THE VALUE OF EXPRESSIONS OR SYMBOLS IN LINES IN
CONSECUTIVE MEMORY ADDRESSES, STARTING FROM THE ADDRESS SPECIFIED IN
ADDRESS COUNTER. THE VALUE OF THE EXPRESSION MUST FIT IN ONE
BYE. IF THE HIGH BYTE OF THE RESULT IS 0 OR 255, THEN THE MESSAGE IS
NO ERROR IS PROVIDED. OTHERWISE, ERROR A IS PROVIDED.
EXPRESSIONS CANNOT CONTAIN LINES CONTAINING
MORE THAN 2 CHARACTERS. HIGH BIT OF EACH BYTE ALLOCATED FOR
THE CORRESPONDING SYMBOL IS EQUAL TO ZERO.
EXAMPLES:
0000' 41 42 DB 'AB'
0002' 42 DB 'AB' AND 0FFH
0003' 41 42 43 DB 'ABC'
2.4.3. DC - DEFINE SYMBOL
PSEUDO COMMAND FORMAT:
DC "ROW"
DC REMEMBERS THE CHARACTERS SPECIFIED IN THE “LINE” CONSEQUENTIALLY,
STARTING FROM THE ADDRESS INDICATED IN THE ADDRESS COUNTER. UNLIKE DB
IN THE BYTE CONTAINING THE LAST CHARACTER OF THE STRING, IN THE HIGH BIT
COSTS 1. IF THE LINE IS EMPTY, THEN AN ERROR MESSAGE IS PROVIDED.
2.4.4. DS - DEFINE AREA
PSEUDO COMMAND FORMAT:
DS "EXPRESSION"
DS RESERVES MEMORY AREA. MEANING OF EXPRESSION
SHOWS HOW MANY BYTES SHOULD BE RESERVED. EVERYTHING
THE NAMES PRESENT IN AN EXPRESSION MUST BE DEFINITED TO
TIME OF COMPUTATION OF THE EXPRESSION DURING THE FIRST PASSMACROASSEMBLER. OTHERWISE, THERE WILL APPEAR ON THE FIRST PASS
FLAG V, AND ON THE SECOND PASS - FLAG U. IF ON THE SECOND PASS
THE U FLAG DOES NOT APPEAR, SO THERE MAY BE AN ERROR IN THE MODULE,
T.K. DS IS PROCESSED ON THE FIRST PASS.
2.4.5. DW - DEFINE WORD
PSEUDO COMMAND FORMAT:
DW "EXPRESSION", "EXPRESSION",...
DW CONSISTENTLY WRITES THE VALUES OF EXPRESSIONS INTO CELLS
MEMORY STARTING FROM THE ADDRESS CONTAINED IN THE ADDRESS COUNTER.
THE VALUES OF EXPRESSIONS ARE DB BYTE VALUES.
2.4.6. END
PSEUDO COMMAND FORMAT:
END "EXPRESSION"
THE END OPERATOR INDICATES THE END OF THE PROGRAM. IF
IF THE "EXPRESSION" IS PRESENT, IT POINTS TO THE START ADDRESS
PROGRAMS. IF THE "EXPRESSION" IS MISSING, THEN TO THE LINKER L80
THE START ADDRESS IS NOT TRANSFERRED.
*) NOTE.
IF THE ASSEMBLY PROGRAM IS THE MAIN PROGRAM
PROGRAM WHEN LINKING, THEN MUST BE INDICATED IN IT
STARTING ADDRESS. OTHERWISE LINKER L80
THERE IS AN ERROR MESSAGE "NO STARTING ADDRESS".
IF THE ASSEMBLY PROGRAM IS A SUBPROGRAM
IN RELATION TO A PROGRAM WRITTEN, FOR EXAMPLE, ON
FORTRAN, THEN THE START ADDRESS MAY NOT BE SET, BECAUSE OH
WILL BE SET IN THE MAIN PROGRAM.
2.4.7. ENTRY/PUBLIC
PSEUDO COMMAND FORMAT:
ENTRY "NAME","NAME",... OR
PUBLIC "NAME","NAME",...ENTRY OR PUBLIC DECLARE ALL NAMES PRESENT IN
LIST AS INTERNAL, ACCESSIBLE FROM EXTERNALLY. AFTER THIS TO THIS
NAMES CAN BE ACCESSED FROM OTHER PROGRAMS. ALL NAMES IN THE LIST
ENTRY/PUBLIC MUST BE DEFINED, OTHERWISE THERE WILL BE A MESSAGE ABOUT
ERROR U. NAMES DECLARED ENTRY OR PUBLIC ARE ENTERED IN
LIST OF GLOBAL NAMES AND ARE USED BY THE L80 LINKER WHEN
SATISFYING EXTERNAL LINKS.
2.4.8. EQU
PSEUDO COMMAND FORMAT:
"NAME" EQU "EXPRESSION"
USING THE EQU COMMAND, THE SYMBOLIC NAME IS ASSIGNED WITH A VALUE
EXPRESSIONS. IF "EXPRESSION" HAS EXTRN, THEN A MESSAGE IS ISSUED
ABOUT THE ERROR.
2.4.9. EXT/EXTRN
PSEUDO COMMAND FORMAT:
EXT "NAME",,"NAME",... OR
EXTRN "NAME","NAME",...
EXT OR EXTRN DECLARE THE SPECIFIED NAMES AS EXTERNAL (EXTRN),
I.E. DEFINED IN ANOTHER PROGRAM. IF THE NAME IS SPECIFIED IN
THE LIST DEFINED IN THIS PROGRAM WILL BE ISSUED
ERROR MESSAGE M. IF ENDS WITH TWO NUMBER PLACES
(##), THEN IT IS ALSO DECLARED AS EXTERNAL.
2.4.10. INCLUDE
PSEUDO COMMAND FORMAT:
INCLUDE "FILE NAME"
THREE PSEUDO COMMANDS INCLUDE, $INCLUDE AND MACLIB EQUIVALENTS.
THE INCLUDE PSEUDO COMMAND ALLOWS YOU TO INCLUDE THE SOURCE INTO THE TEXT
PROGRAMS PROGRAMS RECORDED IN OTHER FILES. "FILE NAME" -
THIS IS THE NAME OF THE FILE CONTAINING THE PROGRAM INCLUDED. FILE TYPE
MUST BE .MAC.THE FILE PRESENT IN THE INCLUDE PSEUDO COMMAND IS OPENED
AND IS TRANSMITTED TO THE CURRENT PROGRAM IMMEDIATELY AFTER THE PSEUDO COMMAND
INCLUDE.
WHEN DISPLAYING A LISTING IN EACH LINE CONTAINING AN ELEMENT
THE INCLUDED FILE, IMMEDIATELY AFTER THE COMMAND CODE THERE IS A "+" SIGN.
NESTING OF PSEUDO INCLUDE COMMANDS IS NOT ALLOWED. IF FILE,
SPECIFIED IN INCLUDE DOES NOT EXIST, THEN A MESSAGE WILL BE ISSUED
ABOUT ERROR "V" AND THIS PSEUDO COMMAND IS IGNORED.
2.4.11. NAME
PSEUDO COMMAND FORMAT:
NAME ('PROGRAM NAME')
NAME SET THE PROGRAM NAME. SIGNIFICANTS IN "NAME" ARE
ONLY THE FIRST SIX SIGNS. THE NAME CAN ALSO BE SET USING
PSEUDO COMMANDS TITLE. IF THE PROGRAM IS MISSING NAME AND TITLE,
THEN THE NAME OF THE SOURCE FILE IS TAKEN AS THE NAME.
2.4.12. ORG - SET ADDRESS COUNTER
PSEUDO COMMAND FORMAT:
ORG "EXPRESSION"
THE ADDRESS COUNTER IS ASSIGNED WITH AN EXPRESSION. ALL NAMES IN
THE EXPRESSIONS MUST BE DETERMINED ON THE FIRST PASS.
2.4.13. PAGE
PSEUDO COMMAND FORMAT:
PAGE "EXPRESSION"
THE PAGE PSEDO COMMAND INSTRUCTS THE ASSEMBLY TO START A NEW
LISTING DISPLAY PAGE. IF THE PSEUDO-COMMAND IS PRESENT
"EXPRESSION", IT SET THE NUMBER OF LINES ON THE PAGE. THIS IS THE NUMBER
MUST BE IN THE RANGE FROM 1 TO 255. THIS IS THE DEFAULT NUMBER
EQUALS 50.
2.4.14. SET
PSEUDO COMMAND FORMAT:
"NAME" SET "EXPRESSION"SET DOES THE SAME ACTION AS EQU, BUT THE NAME IS IN
THE SET PSEUDO COMMAND MAY BE DEFINED PREVIOUSLY. THEN AFTER
WHEN EXECUTION SET NAME WILL BE OVERDEFINED.
2.4.15. TITLE
PSEUDO COMMAND FORMAT:
TITLE "TEXT"
TITLE SPECIFIES THE PROGRAM TITLE THAT CAN BE PRINTED
ON THE FIRST LINE OF EACH PAGE. THE TEXT OF THE PROGRAM MAY BE
ONLY ONE PSEUDO COMMAND TITLE OTHERWISE THERE WILL BE AN ERROR MESSAGE
Q. IF THE PSEUDO-COMMAND NAME IS NOT SPECIFIED, THEN THE FIRST SIX CHARACTERS
THE HEADER WILL SET THE MODULE NAME. IF THE PROGRAM HAS NO NAME OR
TITLE, THEN THE MODULE NAME WILL BE SET FROM THE NAME OF THE SOURCE FILE.
2.4.16. SUBTTL
PSEUDO COMMAND FORMAT:
SUBTTL "TEXT"
THIS PSEUDO COMMAND DISPLAYS HEADER AFTER HEADLINE,
OUTLINED BY THE PSEUDO-COMMAND TITLE. THE LENGTH OF THE "TEXT" MUST NOT
EXCEED 60 CHARACTERS. THE PROGRAM CAN HAVE ANY QUANTITY
SUBTTL.
2.4.17. .COMMENT
PSEUDO COMMAND FORMAT:
.COMMENT "SEPARATOR""TEXT""SEPARATOR"
THE FIRST CHARACTER COMING AFTER .COMMENT AND OTHER THAN A SPACE IS
CONSIDERED A SEPARATOR. TEXT AFTER THE SEPARATOR IS COUNTED
NOTES AND MAY CONSIDER AN ARBITRARY NUMBER OF LINES.
NOTES END WHEN THE SECOND SEPARATOR IS MEETED -
THE SAME SYMBOL THAT WAS USED AS THE FIRST
SEPARATOR.
2.4.18. .PRINTX
PSEUDO COMMAND FORMAT:.PRINTX "SEPARATOR""TEXT""SEPARATOR"
FIRST CHARACTER AFTER .PRINTX, OTHER THAN SPACE,
CONSIDERED A SEPARATOR. THE TEXT AFTER THE SEPARATOR IS
THE BROADCAST TIME IS DISPLAYED ON THE TERMINAL UNTIL
THERE WILL BE A SECOND SEPARATOR - THE SAME SYMBOL.
*) NOTE.
.PRINTX OUTPUTS A LISTING ON EACH PASS OF THE ASSEMBLY,
THEREFORE, IF LISTING IS NECESSARY ONLY FOR ONE SPECIFIC
PASS, THEN SHOULD USE IF1 PSEUDO COMMANDS OR
IF2.
2.4.19. .RADIX
PSEUDO COMMAND FORMAT:
.RADIX "EXPRESSION"
BY DEFAULT, THE NUMERICAL SYSTEM FOR ALL CONSTANTS IS DECIMAL.
THE .RADIX PSEUDO COMMAND ALLOWS YOU TO CHANGE THE SYSTEM BASE
DEFAULT NUMBERS (FROM 2 TO 16). "EXPRESSION" IN .RADIX
ALWAYS IN THE DECIMAL NUMBER SYSTEM, REGARDLESS OF THE BASE
NUMERAL SYSTEM IN ACTIVITY AT THIS MOMENT.
2.4.20. .REQUEST
PSEUDO COMMAND FORMAT:
.REQUEST "FILE NAME","FILE NAME",...
THIS PSEUDO COMMAND SENDS THE REQUEST TO THE L80 HA LINKER
SEARCHING FOR UNSATISFIED EXTERNAL NAMES IN FILES SPECIFIED IN
LIST. FILE NAMES IN THE LIST MUST NOT CONTAIN FILE TYPES AND
LINKS TO DISCS. L80 SEARCHES FOR A FILE WITH A SPECIFIED NAME AND WITH
TYPE - REL ON DISK BY DEFAULT.
From Michael Kondratyev → To Kirill Frolov 4 April 1999
Hi Kirill!
Sat Apr 03 1999 23:08 you wrote to All:
KF> Give the documents from the subject! :~-(
KF> It’s not just difficult to drag from CP/M, but very difficult :-(
=========== Cut and save ===========
PC SOFTWARE
MACROASSEMBLER M80
PROGRAMMER'S GUIDE
CONTENTS
1. M80 MACRO ASSEMBLER
---------------------
1.1. PURPOSE AND CONDITIONS FOR USE OF MACROASSEMBLER.... 3
2. ELEMENTS AND BASIC CONSTRUCTIONS OF LANGUAGE.................................. 3
2.1. BASIC ELEMENTS OF LANGUAGE.................................... 3
2.1.1. SYMBOLS................................................... 3
2.1.2. NUMBERS, CONSTANTS AND STRINGS.................................... 3
2.1.3. SYMBOLIC NAMES.................................... 4
2.2. EXPRESSIONS............................................. 4
2.2.1. ARITHMETIC AND LOGICAL OPERATIONS................................. 4
2.2.2. ABSOLUTE AND MOVEMENT NAMES.................................... 5
2.2.3. EXTERNAL LINKS.................................................... 5
2.3. SYNTAX OF ASSEMBLY SENTENCES................................. 6
2.3.1. MARK............................................. 6
2.3.2. OPERATOR............................................... 6
2.3.3. OPERANDS AND NOTES.................................... 6
2.4. PSEUDO COMMANDS.................................................... 72.4.1. PSEUDO MOVEMENT COMMANDS..................................... 7
2.4.1.1. ASEG................................................... 7
2.4.1.2. COMMON......................................... 7
2.4.1.3. CSEG................................................... 7
2.4.1.4. DSEG......................................................... 8
2.4.2. DB - DEFINE BYTE.................................... 8
2.4.3. DC - DEFINE SYMBOL.................................... 8
2.4.4. DS - DEFINE AREA.................................... 8
2.4.5. DW - DEFINE A WORD.................................... 9
2.4.6. END............................................9
2.4.7. ENTRY/PUBLIC...................................9
2.4.8. EQU...................................9
2.4.9. EXT/EXTRN...................................10
2.4.10. INCLUDE.............................................10
2.4.11. NAME........................................10
2.4.12. ORG - SET ADDRESS COUNTER............................10
2.4.13. PAGE........................................11
2.4.14. SET........................................11
2.4.15. TITLE.........................................11
2.4.16. SUBTTL........................................11
2.4.17. .COMMENT........................................11
2.4.18. .PRINTX...................................122.4.19. .RADIX.............................................12
2.4.20. .REQUEST.............................................12
2.4.21 CONDITIONAL PSEUDO COMMANDS....................................13
2.4.21.1. ELSE.....................................13
2.4.21.2. ENDIF........................................13
2.4.22. PSEUDO COMMANDS CONTROL LISTING OUTPUT.........14
2.4.23. MOVEMENT BEFORE LOADING....................................14
2.5. MACRO COMMANDS AND BLOCKS....................................15
2.5.1. TERMINOLOGY...................................................15
2.5.2. REPT-ENDM BLOCK...................................15
2.5.3. IRP-ENDM BLOCK...................................15
2.5.4. IRPC-ENDM BLOCK...................................16
2.5.5. MACRO........................................16
2.5.6. EXITM........................................17
2.5.7. LOCAL........................................17
2.5.8. SPECIAL MACRO OPERATORS AND FORMS.................................18
3. OPERATING MANUAL FOR M80 COMPILER........20
3.1. CONTACTING THE COMPILER. INPUT AND OUTPUT DATA.20
3.2. COMPILATION KEYS...................................21
3.3. LISTING FORMAT............................................21
3.4. ERROR MESSAGES...................................................22
1. MACRO ASSEMBLY - M80
-----------------------1.1. PURPOSE AND CONDITIONS FOR USE OF MACROASSEMBLER
MACROASSEMBLER IS A SYMBOLIC MACHINE COMPILER
ORIENTED LANGUAGE (ASSEMBLER LANGUAGE). OH CONVERTS
ORIGINAL PROGRAM WRITTEN IN MACROASSEMBLER LANGUAGE, IN
MOVEABLE MODULE. FURTHER USING THE L80 LINKER
THE MODULE CAN BE COMPOSED (ALONE OR WITH OTHER MODULES) IN
PROGRAM READY FOR EXECUTION.
USING MACRO REMEDIES ALLOWS YOU TO MOST OFTEN
OTHER PARTS OF THE PROGRAM SHOULD BE FORMULATED IN THE FORM OF MACRO COMMANDS.
USING MACROASSEMBLER MAKES IT MUCH EASIER
WRITING PROGRAMS AND ALLOWS YOU TO USE THE MOST EFFECTIVELY
ALL COMPUTER RESOURCES.
THE MACROASSEMBLER IS LOCATED ON THE DISK AS A FILE NAMED
M80.COM
2. ELEMENTS AND BASIC CONSTRUCTIONS OF LANGUAGE
2.1. BASIC ELEMENTS OF LANGUAGE
2.1.1. SYMBOLS
ALL COMPLEX ELEMENTS OF THE M80 LANGUAGE ARE FORMED FROM SYMBOLS.
THE following CAN BE USED AS SYMBOLS:
-LETTERS OF THE LATIN ALPHABET FROM A TO Z;
-NUMBERS FROM 0 TO 9;
-SPECIAL SYMBOLS + - , : ; ( ) ' # $ SPACE ;
2.1.2. NUMBERS, CONSTANTS AND STRINGS
NUMBERS ARE SIGNless 16-BIT VARIABLES. THE NUMBER IS ALWAYS
CALCULATED IN THE DEFAULT NUMERAL SYSTEM IF IT IS NOT SPECIFIED
IN SPECIAL FORM:
NNNNNNNN B - BINARY (WHERE N IS 0 OR 1)
NNNN O OR NNNN Q - OCTAL ( WHERE N - 0...7 )NNNN H OR NNNN X - HEXADECAL ( WHERE N - 0...9,
A,B,C,D,E,F ),IF FIRST CHARACTER
NOT A NUMBER, THEN MUST BE 0 IN FRONT OF IT
0NNNN H OR 0NNNN X
BY DEFAULT ALL NUMBERS ARE COUNTING IN THE DECIMAL SYSTEM
COUNTINGS. THIS MODE CAN BE CHANGED. WITH THE HELP OF THE .RADIX TEAM
YOU CAN CHOOSE ANY BASE OF THE NUMERAL SYSTEM FROM 2 TO 16.
OVERFLOW WHEN CALCULATING A NUMBER IS IGNORED BY SIGNIFICANTS
ARE THE LOWER 16 BITS.
A CHARACTER CONSTANT IS A STRING CONTAINING ONE OR TWO
SYMBOL IN APOSTROPHES.
BY THE VALUE OF A CHARACTER CONSTANT CONTAINING ONE CHARACTER,
IS THE NUMERICAL VALUE OF THE CORRESPONDING CODE,
ADOPTED IN THE CP/M OPERATING SYSTEM (OS). FOR EXAMPLE, VALUE
CONSTANTS "A" WILL BE 41H.
BY THE VALUE OF A CHARACTER CONSTANT CONTAINING TWO CHARACTERS,
THERE WILL BE A TWO-BYTE NUMBER, AND THE HIGH BYTE WILL BE A VALUE
THE FIRST CHARACTER, AND IN THE LOW BYTE IS THE VALUE OF THE SECOND CHARACTER.
FOR EXAMPLE, THE VALUE OF THE CONSTANT "AB" WILL BE 41H*256+42H.
A STRING IS A SET OF CHARACTERS ENCLOSED IN QUOTES OR
APOSTROPHES. QUOTE QUOTES CAN ALSO BE A STRING ELEMENT, BUT
THEY SHOULD DOUBLE. FOR EXAMPLE, OFFER
DB "I" "GOING" "WALK"
REMEMBER THE LINE
I'M "GOING" FOR A WALK
IF THERE ARE NO CHARACTERS BETWEEN THE QUOTES, THEN THIS STRING WILL BE
BLANK LINE.
2.1.3. SYMBOL NAMESSYMBOLIC NAMES CAN CONTAIN ANY NUMBER
SYMBOLS, BUT THE FIRST 6 CHARACTERS ARE MEANINGFUL. IN NAMES
THE FOLLOWING SYMBOLS ARE ACCEPTABLE:
LETTERS FROM A TO Z, NUMBERS FROM 0 TO 9, $, . , ? , @
A SYMBOLIC NAME CANNOT START WITH A NUMBER.
WHEN PROCESSING NAMES, LETTERS FROM LOWER CASE ARE TRANSMITTED TO
UPPER CASE LETTERS.
2.2. EXPRESSIONS
2.2.1. ARITHMETIC AND LOGICAL OPERATIONS
THE FOLLOWING OPERATIONS ARE ALLOWED IN EXPRESSIONS, GIVEN IN
IN DESCENDING ORDER OF THEIR IMPLEMENTATION PRIORITY.
NUL
LOW,HIGH
*,/,MOD,SHR,SHL
UHARY MINUS
+,-
EQ,NE,LT,LE,GT,GE
NOT
AND
OR,XOR
TO CHANGE THE ORDER OF OPERATIONS YOU MUST
USE BRACKETS. WHEN EVALUATING EXPRESSIONS FIRST
OPERATIONS WITH HIGHER PRIORITY ARE PERFORMED. EVERYTHING
SUBEXPRESSIONS CONTAINING OPERATIONS WITH HIGHER PRIORITY
CALCULATED FIRST.
ALL OPERATIONS EXCEPT +,-,*,/, MUST BE SEPARATED FROM
OPERANDS WITH AT LEAST ONE SPACE. ALLOCATION OPERATIONS
BYTES (HIGH,LOW) ARE SEPARATED BY THE HIGH OR LOW 8 BITS FROM
ABSOLUTE 16-BIT QUALITY. IF AS OPERAND
A MOVEABLE VALUE IS USED, THEN HIGH AND LOW
THEY ARE INTERPRETED AS OPERATIONS WORKING WITH ADDRESS ZERO.
2.2.2. ABSOLUTE AND MOVEABLE NAMES
ALL SYMBOLIC NAMES USED AS OPERANDSIN EXPRESSIONS, THERE ARE EITHER ABSOLUTE NAMES OR MOVEMENTAL NAMES
NAMES. MOVEMENT NAMES ARE DIVIDED INTO PROGRAM NAMES
MOVE NAMES, MOVE DATA AND COMMON NAMES
(Clause 2.4.1.).
ALL SYMBOLIC NAMES ASSEMBLED FOR PSEUDO COMMANDS
ASEG,CSEG (DEFAULT) OR DSEG, REFER TO ABSOLUTE,
MOVEABLE PROGRAM OR MOVEABLE DATA
ACCORDINGLY. THE NUMBER OF COMMON NAMES IN THE PROGRAM DEPENDS ON
NUMBER OF COMMON BLOCKS NAMED IN THE PROGRAM USING
COMMON PSEUDO COMMANDS. TWO SYMBOLIC COMMON NAMES ARE CONSIDERED
DIFFERENT IF THEY ARE PRESENT IN DIFFERENT COMMON BLOCKS.
FOR ANY OPERATION EXCEPT ADDITION AND SUBTRACTION, BOTH
OPERANDS MUST BE ABSOLUTE.
FOR ADDITION THE FOLLOWING RULES APPLY:
1) AT LEAST ONE OF THE OPERANDS MUST BE ABSOLUTE;
2) ABSOLUTE + MOVEABLE = MOVEABLE
FOR SUBTRACTION THE RULES APPLY:
1) MOVEABLE - ABSOLUTE = MOVEABLE
2) MOVEABLE - MOVEABLE = ABSOLUTE
AND 2) BOTH NAMES MUST BE MOVEABLE NAMES
ONE TYPE.
FOR EACH INTERMEDIATE STEP IN COMPUTING THE EXPRESSION
THE ABOVE RULES MUST BE FOLLOWED, OTHERWISE WILL BE ISSUED
ERROR MESSAGE. FOR EXAMPLE, IF FOO, BAZ AND ZAZ ARE THREE
SYMBOLIC MOVEABLE NAMES, THEN EXPRESSION:
FOO + BAZ - ZAZ
WILL GENERATE AN ERROR MESSAGE BECAUSE THE FIRST STEP WILL BEFOLD TWO MOVEABLE NAMES. THIS IS POSSIBLE
AVOID USING BRACKETS:
FOO + (BAZ - ZAZ)
2.2.3. EXTERNAL LINKS
A SYMBOLIC NAME MAY BE EXTERNAL (EXTRN) OR NOT
(See P. 2.2.9.). THE EXTERNAL NAME IS ASSEMBLED INTO 2 BYTES. WHEN
THE USE OF EXTERNAL NAMES IN EXPRESSIONS MUST BE FOLLOWED
THE FOLLOWING RULES:
1) EXTRN ARE ALLOWED ONLY FOR ADDING AND SUBTRACTING;
2) IF AN EXTRN TYPE NAME IS USED IN AN EXPRESSION,
THEN THE RESULT WILL ALWAYS BE EXTRN;
3) WHEN ADDING ANY OPERAND (BUT NOT BOTH AT THE SAME TIME)
MAY BE EXTRN;
4) WHEN SUBTRACTING, ONLY THE FIRST OPERAND CAN BE EXTRN.
=========== Cut and save ===========
From Michael Kondratyev → To Kirill Frolov 4 April 1999
2.4.21. CONDITIONAL PSEUDO COMMANDS
LIST OF CONDITIONAL PSEUDO COMMANDS
IF/IFT "EXPRESSION" TRUE IF "EXPRESSION" IS NOT EQUAL TO 0
IFE/IFF "EXPRESSION" TRUE IF "EXPRESSION" EQUAL 0
IF1 TRUE ON FIRST PASS
IF2 TRUE ON SECOND PASS
IFDEP "SYMBOL" TRUE IF "SYMBOL" IS DEFINED OR
ANNOUNCEMENT EXTERNAL
IFDEF "SYMBOL" TRUE IF "SYMBOL" IS NOT DEFINED AND
NOT ANNOUNCEED EXTERNAL
IFB "ARGUMENT" TRUE IF "ARGUMENT" IS BLANK.
THE ARGUMENT MUST BE IN ANGLE BRACKETS
IFNB "ARGUMENT" TRUE IF "ARGUMENT" IS NOT BLANK.
USED TO CHECK SOME
PARAMETERS THE ARGUMENT MUST BE IN
ANGLE BRACKETS.
IFIDN "ARGUMENT1", TRUE IF STRING "ARGUMENT1" IDEN -
"ARGUMENT2" IS THE SAME LINE "ARGUMENT2". ARGUMENTS
MUST BE IN ANGLE BRACKETS.
IFDIF "ARGUMENT1", TRUE IF STRING "ARGUMENT1" IS DIFFERENT
"ARGUMENT2" COMES FROM THE LINE "ARGUMENT2".
ALL CONDITIONAL PSEUDO COMMANDS HAVE THE FORMAT:
IF XXX [ARGUMENT]
.
.
.
[ELSE
.
.
]
ENDIF
IT IS ALLOWED TO INVEST CONDITIONAL PSEUDO-COMMANDS, I.E.
A PSEUDO TEAM WITHIN A PSEUDO TEAM. TO AVOID MISTAKES EVERYTHING
THE ARGUMENTS OF CONDITIONAL PSEUDO-COMMANDS MUST BE KNOWN AT THE FIRST TIME
PASSAGE. FOR IF, IFT, IFF AND IFE, THE EXPRESSIONS MUST CONTAINONLY CERTAIN SYMBOLS AND ALL EXPRESSIONS MUST BE
ABSOLUTE.
2.4.21.1. ELSE
EACH CONDITIONAL PSEUDO-COMMAND MAY ALSO PRESENT
PSEUDO-COMMAND ELSE, WHICH ALLOWS GENERATION
CODES IF THE CONDITION TO BE CHECKED IS FALSE. FOR EVERY IF
ONLY ONE ELSE IS ALLOWED AND EACH ELSE MATCHES
TO THE LAST OPEN IF.
2.4.21.2. ENDIF
EACH PSEUDO IF COMMAND MUST HAVE A CORRESPONDING IF
AN ENDIF PSEUDO-COMMAND THAT ENDS THE CONDITION.
2.4.22. PSEUDO COMMANDS CONTROL LISTING OUTPUT
THE OUTPUT OF A LISTING TO A FILE CAN BE CONTROLLED USING TWO
PSEUDOCOMMAND:
.LIST AND .XLIST
IF THE LISTING IS NOT DISPLAYED, THEN THESE PSEUDO COMMANDS
IGNORED.
THE DEFAULT IS THE .LIST PSEUDO COMMAND, INITIATING
LISTING OUTPUT. IF THE PSEUDO COMMAND .XLIST IS ENCOUNTERED, THEN OUTPUT
LISTING STOPS UNTIL THE .LIST PSEUDO-COMMAND IS ENCOUNTERED.
OUTPUT OF CONDITIONAL BLOCKS WITH THE VALUE OF FALSE IS USED
BY THREE PSEUDO COMMANDS:
.SFCOND SUPPRESS THE OUTPUT OF CONDITIONAL BLOCKS HAVING
VALUE "FALSE";
.LFCOND RESTORE OUTPUT OF CONDITIONAL BLOCKS WITH
VALUE "FALSE";
.TFCOND CONTROL THE OUTPUT OF CONDITIONAL BLOCKS WITH
VALUE "FALSE", DEPENDING ON THE /X KEY.
CROSS TABLE OUTPUT IS CONTROLLED BY PSEUDO COMMANDS
.CREF AND .XCREF. IF CROSS MEANS ARE NOT USED, THEN THESEPSEUDO COMMANDS ARE IGNORED. DEFAULT CONDITION - .CREF. IF
THE .XCREF PSEUDO-COMMAND IS OPPOSED, THEN OUTPUTING CROSS-REFERENCES
CONTINUES UNTIL THE PSEUDO TEAM MEETS AGAIN
.CREF.
OUTPUT OF MACRO/REPT/IRP/IRPC EXTENSIONS IS CONTROLLED BY THREE
BY PSEUDO COMMANDS:
.LALL DISPLAYS FULL MACROTEXT FOR ALL EXTENSIONS;
.SALL OUTPUT ONLY GENERATED OBJECT CODES;
.XALL OUTPUT GENERATED OBJECT CODES AND
THE CORRESPONDING TEXT (DEFAULT CONDITION).
2.4.23. MOVEMENT BEFORE LOADING
USING TWO PSEUDO COMMANDS: .PHAZE AND .DEPHAZE SOME
PARTS OF PROGRAMS CAN BE LOCATED IN ONE AREA AND BE EXECUTED
ONLY IN ANOTHER, SPECIFIED AREA.
THE PSEUDO-COMMAND .PHAZE INDICATES THE BEGINNING OF SUCH A SECTION, AND
PSEUDO-COMMAND .DEPHAZE - END OF SITE.
EXAMPLE.
0000'.PHAZE
0100 CD 0106 F00: CALL BAZ
0103 C3 0007 JMP Z00
0106 C9 BAZ: RET
0007' C3 0005 Z00: JMP 5
ALL MARKS INSIDE THE .PHAZE BLOCK RECEIVE ABSOLUTE VALUES
DEPENDING ON THE VALUE OF THE .PHAZE ADDRESS COUNTER. CODES, HOWEVER,
LOADED INTO THE CURRENT MEMORY AREA (I.E. FROM 0000' IN THIS
EXAMPLE). THEY CAN LATER BE FORWARDED TO ADDRESS 100H AND EXECUTED.
2.5. MACRO COMMANDS AND BLOCKS
MACRO ASSEMBLER MACRO TOOLS INCLUDE THREEREPEAT MACRO COMMANDS (REPT, IRP, IRPC) AND OPERATION
MACRO DEFINITIONS (MACRO). EVERY MACRO COMMAND MUST
END WITH PSEUDO-COMMAND ENDM.
2.5.1. TERMINOLOGY
TO DESCRIBE MACRO COMMANDS THE FOLLOWING TERMS ARE USED:
1) "FOR.PAR." - FORMAL PARAMETER
ALL FORMAL PARAMETERS ARE ALLOWED SYMBOLIC
THE NAMES THAT APPEAR IN THE BODY OF THE MACRO EXPANSION;
2) "LIST FORM PAR." - LIST OF FORMAL PARAMETERS,
SEPARATED BY COMMA;
3) "LIST OF ARG." - LIST OF ARGUMENTS, SEPARATED BY COMMA.
THE LIST OF ARGUMENTS IS ALWAYS ENCLOSED IN ANGLE BRACKETS. IF
THERE IS NO CHARACTER IN ANGLE BRACKETS OR NO CHARACTER BETWEEN TWO COMMA
CHARACTER, THIS IS THE ZERO ARGUMENT IN THE LIST. WHEN INVESTED
ANGLE BRACKETS (BRACKETS IN BRACKETS) EACH INNER LEVEL
PARENTHESES ARE REMOVED WHEN USING THE APPROPRIATE
ARGUMENT. THE QUOTED STRING IS A VALID ARGUMENT;
4) "LIST OF PAIRS." - LIST OF PARAMETERS SEPARATED BY COMMA.
2.5.2. REPT-ENDM BLOCK
MACRO FORMAT:
REPT "EXPRESSION"
.
.
ENDM
THE VALUE OF THE "EXPRESSION" AND THE GROUP OF SENTENCES IS COMPUTED,
BETWEEN REPT AND ENDM, THE RECEIVED NUMBER IS REPEATED
ONCE. "EXPRESSION" CANNOT CONTAIN EXTERNAL AND UNDEFINED TERMS
NAMES.
EXAMPLE.
X SET 0
REPT 10 ;GENERATES DB 1 - DB 10
X SET X+1
DB X
ENDM2.5.3. IRP-ENDM BLOCK
MACRO FORMAT:
IRP "FOR.PAR.",
.
.
.
ENDM
THE NUMBER OF ARGUMENTS IN THE LIST DETERMINES HOW MANY TIMES THERE WILL BE
THE GROUP OF SENTENCES CONCLUDED BETWEEN IRP AND ENDM WAS REPEATED. WHEN
EACH REPEATMENT INSTEAD OF ALL INVESTMENTS OF A FORMAL PARAMETER
THE NEXT VALUE FROM THE LIST OF ARGUMENTS IS SUBSTITUTED. IF
THE LIST OF ARGUMENTS IS EMPTY (<>), THEN THE GROUP OF SENTENCES
PROCESSED ONCE AND THE FORMAL PARAMETER IS REMOVED FROM ALL
ENTRIES.
EXAMPLE.
IRP X, <1,2,3,4,5,6,7,8,9,10>
DB X
ENDM
THE RESULT WILL BE SIMILAR TO THE PREVIOUS EXAMPLE.
2.5.4. IRPC-ENDM BLOCK
MACRO FORMAT:
IRPC "FOR.PAR.",STRING (OR "STRING")
.
.
.
ENDM
THE NUMBER OF CHARACTERS IN A LINE INDICATES HOW MANY TIMES THERE WILL BE
GROUP OF OFFERS BETWEEN IRPC AND ENDM REPEATED. IN THIS CASE
ANGLE BRACKETS ARE NOT REQUIRED. AT EACH REPEAT INSTEAD
THE NEXT SIGN FROM WILL BE SUBSTITUTED FOR THE FORMAL PARAMETER
LINES.
EXAMPLE.
IRPC X, 0123456789
DB X+1
ENDM
THE RESULT IS SIMILAR TO THE TWO PREVIOUS EXAMPLES.
2.5.5. MACRO
MACRO FORMAT:
"NAME" MACRO "FORMAT PAR LIST."
.
.
.
ENDM
WITH THE HELP OF MACRO, THE USER CAN CREATE THEIR OWN
MACRO COMMANDS AND PLACE THEM IN DIFFERENT PARTS OF THE PROGRAM."NAME" IS A SYMBOLIC NAME BY WHICH SUBSEQUENTLY
THE GIVEN MACRO COMMAND WILL BE CALLED.
"LIST FORM PAR." - THIS IS A LIST OF PARAMETERS THAT WILL BE
CHANGE (REPLACE WITH ACTUAL PARAMETERS) EACH
CALLING A MACRO COMMAND. OFFERS BETWEEN MACRO AND ENDM ARE
BODY OF THE MACRO COMMAND.
THE FORM OF REFERENCE TO THE MACRO COMMAND IS FOLLOWING:
"NAME" "PARAMETER LIST."
WHERE "NAME" IS THE NAME ASSIGNED TO MACRO IN THE MACRO DEFINITION;
"LIST OF PAIRS." - THIS IS A LIST OF ACTUAL PARAMETERS THAT
WHEN CALLED, MACRO COMMANDS WILL REPLACE THE CORRESPONDING FORMAL
PARAMETERS.
IF THE NUMBER OF ACTUAL PARAMETERS EXCEEDS THE QUANTITY
FORMAL PARAMETERS, THEN EXTRA ACTUAL PARAMETERS
IGNORED. IF THE NUMBER OF PARAMETERS IS LESS THAN THE NUMBER OF FORMAL
PARAMETERS, THEN INSTEAD OF THE MISSING ACTUAL PARAMETERS WILL BE
ZEROS ARE SUBMITTED.
EXAMPLE.
F00 MACRO X
Y SET 0
REPT X
Y SET Y+1
DB Y
ENDM
ENDM
WHEN CALLING F00 10, THIS MACRO COMMAND WILL GENERATE THE SAME
SENTENCES AS IN THE PREVIOUS EXAMPLES.
2.5.6. EXIT
THE EXITM PSEUDO COMMAND IS USED TO TERMINATE
REPT/IRP/IRPC OR MACRO CALL. WHEN executing EXITM
THE MACRO EXPANSION IS IMMEDIATELY DISPLAYED AND EVERYTHING REMAINING
EXPANSION OR REPEATMENT IS NOT GENERATED. IF BLOCK,
CONTAINING EXITM IS ENTERED INTO ANOTHER BLOCK, THEN EXTERNAL LEVELCONTINUES TO EXPAND.
2.5.7. LOCAL
TEAM FORMAT:
LOCAL "FOR PAR LIST."
THIS PSEUDO COMMAND IS ONLY ALLOWED INSIDE A MACRO DEFINITION
MACRO. WHEN EXECUTING LOCAL, THE ASSEMBLY CREATES A UNIQUE
SYMBOLIC NAME FOR EACH FORMAL PARAMETER FROM THE LIST AND
THEN SUBSTITUTES THIS SYMBOLIC NAME AT EACH ENTRY
OF THIS FORMAL PARAMETER INTO MACRO EXPANSION. USUALLY THESE
UNIQUE SYMBOLIC NAMES ARE USED TO SPECIFY LABELS
INSIDE MACRO. THIS ELIMINATES THE POSSIBILITY OF APPEARING MULTIPLE TIMES
OF CERTAIN MARKS WHEN CALLING THIS DATA MULTIPLE CALLS
MACRO COMMANDS. SYMBOLIC NAMES CREATED WITH THE HELP
LOCAL, ARE IN THE RANGE FROM ..0001 TO ..FFFF. THEREFORE
THE USER SHOULD AVOID TYPE NAMES IN THEIR PROGRAMS
..NNNN. IF THE MACRO COMMANDS HAS LOCAL, THEN LOCAL MUST BE IN
THE FIRST APPLICATION OF THE MACRO-DEFINITION.
From Michael Kondratyev → To Kirill Frolov 4 April 1999
2.5.8. SPECIAL MACRO OPERATORS AND FORMS
& AMPERSAND IS USED FOR CONCATENATION OF TEXT OR
SYMBOLIC NAMES. FORMAL PARAMETER,
REPRESENTING A STRING IN APOSTROPHES WILL NOT BE
REPLACED IN THE EXPANSION IF IT WILL NOT BE IN FRONT
AMPERSAND. TO FORM A SYMBOLIC NAME FROM
TEXT AND FORMAL PARAMETER BETWEEN THEM IS NECESSARY
PUT &;
EXAMPLE.
ERG MACRO X
ERROR&X: PUSH BX
MVI BX,'&X'
JMP ERROR
ENDM
IN THIS EXAMPLE, CALLING ERG A WILL CREATE THE FOLLOWING
SEQUENCE OF SENTENCES:
ERROR&A: PUSH B
MVI B,'A'
JMP ERROR
*) NOTE.
TWO SYMBOLIC NAMES ARE CONSIDERED THE SAME IF
ONE NAME IS DIFFERENT FROM ANOTHER ONLY BY THE PRESENCE OF AN AMPERSAND. SO
THE SYMBOLIC NAME ERRORA IS EQUIVALENT TO THE NAME ERROR&A.
;; IF THE MACRO COMMENTS ARE BEFORE TWO COMMENTS
SEMOLONs, THESE COMMENTS DO NOT APPEAR IN
MACRO EXTENSIONS EVEN IF THERE IS A .LALL SPECIFICATION;
$ REFERENCE TO THE CURRENT ADDRESS COUNTER VALUE;
! THE SYMBOL AFTER THE EXCLAMATION POINT
ENTERED LITERALLY;
NUL IS AN OPERATOR THAT RETURN TRUE IF
HIS ARGUMENT IS ZERO. REST OF LINE AFTER NUL
CONSIDERED AS AN ARGUMENT FOR NUL. CONDITION IF NULTHE ARGUMENT WILL BE "FALSE" IF WHEN EXPANDING THE FIRST
THE ARGUMENT CHARACTER WILL BE DIFFERENT FROM THE SEMOLON
OR "CR" (VK). THIS OPERATOR IS RECOMMENDED
USE TO CHECK THE PRESENCE OF ZERO PARAMETERS
IN CONDITIONAL PSEUDO COMMANDS IFB AND IFNB;
% THIS OPERATOR CAN ONLY BE USED IN AN ARGUMENT
MACRO COMMANDS. % CONVERTS FOLLOWING IT
EXPRESSION (USUALLY SYMBOLIC NAME) IN NUMBER IN
CURRENT NUMERAL SYSTEM. DURING MACRO EXPANSION
THE OBTAINED NUMBER IS SUBMITTED INTO THE FORMAL PARAMETER.
USING % ALLOWS YOU TO CALL A MACRO COMMAND WITH
BY NUMBER (USUALLY A MACRO CALL IS A CALL WITH TEXT FROM
ARGUMENTOV). THE EXPRESSION FOLLOWING % MUST
MEET THE SAME REQUIREMENTS AS IN
PSEUDOCOMMAND DS.
EXAMPLE.
NORMALLY LB, WHICH IS AN ARGUMENT FOR MACLAB, MUST
IT WAS SUBMITTED BY MACRO'S ARGUMENT. % CONVERTS LB TO NUMBER AND
INSTEAD OF Y, A NUMBER IS SUBMITTED. WITHOUT % BROADCAST RESULT
THERE WOULD BE 'ERROR LB'.
MACLAB MACRO Y
ERR&Y: DB 'ERROR&Y