9 location counter symbol, Assembler pseudo-instructions, 1 include instruction (#include) – Epson S5U1C63000A User Manual

Page 74

Advertising
background image

CHAPTER 4: ASSEMBLER

60

EPSON

S5U1C63000A MANUAL

(S1C63 FAMILY ASSEMBLER PACKAGE)

Precautions

• Minus numbers -1 to -32768 are handled as 0xffff to 0x8000.

• The assembler handles expressions as 16-bit data. Pay attention to the data size when using it as 4-bit

immediate data, especially when it has a minus value.

Example:

ld %a,-2+1

... NG. It will be expanded as "ld a,0xffff".

ld %a,(-2+1)&0xf

... OK. It will be expanded as "ld a,0xf".

• Expressions are calculated with a sign (like a signed short in C language).

Pay attention to the calculation results of the >>, / and % operators using hexadecimal numbers.

Example:

.set NUM1 0xfffe/2

... -2/2 = -1 (0xffff)

The / and % operators can only be used within the range of +32767 to -32768.

.set NUM2 0xfffe>>1

... -2>>1 = -1 (0xffff)

Mask as (0xfffe>>1)&0x7fff.

• When using an expression in a #define statement, it will be expanded as is. Pay attention when a

number is defined using the #define pseudo-instruction.

Example:

#define NUM1 1+1

ld %a,NUM1*2

... This will be expanded as "ld %a, 1+1*2" (=3).

#define NUM2 (1+1)

ld %a,NUM2*2

... This will be expanded as "ld %a, (1+1)*2" (=4).

• Do not insert a space or a tab between an operator and a term.

4.5.9 Location Counter Symbol "$"

The address of each instruction code is set in the 16-bit location counter when a statement is assembled. It
can be referred using a symbol "$" as well as labels. "$" indicates the current location, thus it can be used
for relative branch operation. The operators can be used with this symbol similar to labels.

Example:

jr $

... Jumps to this address (means endless loop).

jr $+2

... Jumps to two words after this address.

jr $-10

... Jumps to 10 words before this address.

jr $+16+(16*(BLK>16))

... Operators and defined symbols can be used.

Precaution

When the address referred to relatively with "$" is in another section, it should be noted if the in-
tended section resides at the addressed place, because if the section is relocatable, the absolute
address is not fixed until the linking is completed.

4.5.10 Optimization Branch Instructions for Old Preprocessor

The old version of the S1C63 preprocessor has optimization branch instructions for optimizing the
extension code. Since this function is supported by the linker in the current version, they are expanded
without an extension code in the assembler. The relative distance to the label does not affect this expan-
sion.

Optimization Branch Instruction

Mnemonic after Expansion

xjr

LABEL

jr

LABEL

xjrc

LABEL

jrc

LABEL

xjrnc LABEL

jrnc

LABEL

xjrz

LABEL

jrz

LABEL

xjrnz LABEL

jrnz

LABEL

xcalr LABEL

calr

LABEL

Advertising