Temporary labels are often very useful in macros. You can create a macro definition that specifies temporary labels within it, but these temporary labels might be duplicated elsewhere in the temporary label block, possibly causing errors. However, the assembler can create temporary labels in the macro expansion that will not conflict with other temporary labels. These labels are called created temporary labels. Created temporary labels range from 30000$ to 65535$. Each time the assembler creates a new temporary label, it increments the numeric part of the label name by 1. Consequently, no user- defined temporary labels should be in the range of 30000$ to 65535$. A created temporary label is specified by a question mark (?) in front of the formal argument name. When the macro is expanded, the assembler creates a new temporary label if the corresponding actual argument is blank. If the corresponding actual argument is specified, the assembler substitutes the actual argument for the formal argument. The following example is a macro definition specifying a created temporary label: .MACRO POSITIVE ARG1,?L1 BGE ARG1,L1 NEGQ ARG1,ARG1 L1: .ENDM POSITIVE The following three calls and expansions of the macro defined previously show both created temporary labels and a user-defined temporary label: POSITIVE R0 BGE R0,30000$ NEGQ R0,R0 30000$: POSITIVE R5 BGE R5,30001$ NEGQ R5,R5 30001$: POSITIVE R7,10$ BGE R7,10$ NEGQ R7,R7 10$: