You're confusing literal (constant) values with symbolic values.
A in ASM is predefined as the value 7
B = 0
C = 1
D = 2
E = 3
H = 4
L = 5
M = 6
SP = 6
PSW = 6
because they're operands in an instruction. If you need a character literal, just code it directly as previously mentioned.
ASM is very simple-minded. You can use numbers (or your own EQU symbols) instead of the predefined registers. For example,
Code:
0100 ORG 100H
0100 F5 PUSH 6
0101 C5 PUSH 0
0102 F5 PUSH 7
0103 END
The first instruction assembles to a "PUSH PSW", the second, to "PUSH B" and the third to "PUSH PSW" again (in the 8080 PUSH instruction, the low-order bit of the register value is masked out).
You can code symbolic literals, but be careful. For example,
GREET EQU 'HI'
and then you code:
DW GREET
you'll have "i" in the first location and "H" in the second, which is probably not what you wanted.
Page 6 in the CP/M ASM manual talks all about constants. Obviously, all 8-bit operations take a single-character 8-bit operand; but 2-character operands can be used for the LXI instructions. So
would result in loading B with 048H and C with 049H.
Note that a DB pseudo operation can define a whole string of characters--and can include several operands.
Code:
DB 'A stitch in time saves nine.',0
results in the string of characters (A stitch in time saves nine.) followed by a zero byte stored in memory.
If you have to represent a single quote as a character string, just use two--ASM will take tht to mean that you literally mean a single quote. So
is perfectly legitimate.