隆 EM78156 / EM78P156 &
11
EM78P156语法介绍
WIM156的设计是针对单芯片的初学者﹐它提供了一个简单的使用环境﹐以及学习环境。WIM156软件设备中包括两个部分﹐第一个为组译器﹔第二个为软件仿真器。上述两个软件设备是相辅相成的﹐并不能分开。当使用者进入WIM156并叫出档案之后﹐WIM156就完成组译的动作﹐并且已经进入仿真的功能了。
1. 指令型态:
WIM156 可以执行 EM78156 & EM78P156 的 42 个指令,其宽度为 13 位。每一个指令码可切割成两部份,第一部分为标示指令形态的运算码( OPCODE ),第二部份则指出运算时所需之参数,亦即操作数( OPERAND )。而指令之形态大致可分为下列四种:
(1)控制型指令( control operation ): 如 INT...等等。
(2)缓存器导向型指令( register oriented ): 如 MOV A, Reg_B ; move Reg_B to A ADD Reg_B, A ; add Reg_B with A, and ; save in Reg_B ... 等等。
(3)位导向型指令( bit oriented ): 如 BC,JBS...等等。
(4)常数型指令( constant operation ):如 MOV A, @0x55 ; move 0x55 to A XOR @0xFF ;Xor A with 0xFF 一般而言,EM78 系列八位微控制器一个指令只需两个周期之外,其它的指令只需一个指令周期,除了对 PC (Program Counter)做 “写” 的指令,需二个指令周期,如 (MOV PC, A)。
2. 语法说明:
以下就本编译器之语法,作一详尽介绍。
(1)键入格式
隆 EM78156 / EM78P156 &
12
本编译器并不对字之大写或小写作区别,如 "MOV", "Mov", "mOV",和 "MoV" 在解译上是不做区别的。
(2)在常数之前请加小老鼠"@",其它如缓存器(r) 及位(b)之前则不加"@"。例如
MOV A, @0x55 ;add"@" before constant 0x55BC 0x7, 0x4;no"@" before both register ;7 and bit4
SUB 0x10,A ;no"@" before register 0x10
(3)数字格式 a、十六进制制之前先加 "0x",例如 0xA、 0x55、 0x11。PS 只处理二位。 b、十进制制之前不加辨识字符。
(4)";" 请置于备忘陈述或批注之前。 例如
;**********************************
;This is an example of how to write ;an EMC 8_bit program
;Date of programming: March 12, 1996 ;**********************************
(5)"ORG" 定义起始地址。 其语法为 "ORG ADDR"。 例如
ORG 0x000 ;address begins from 0x000 NOP NOP :
ORG 0x600 ;another address starts from 0x600 NOP NOP :
(6)"==" 定义一代号值。其语法为“SYMBOL == K”,例如
隆 EM78156 / EM78P156 &
13
TCC ==0x01 PC ==0x02
BUFFER == 0x20 COUNTER == 0x21
※ a、代号字符串长度不得大于11个字母。
b、定义代号不一定在程序一开始,只要在使用之前定义即可。
(7)缓存器导向型指令之语法可分为以下三类:
a、直接对缓存器做运算。其语法为"INST REG"。 例如 IOW 0x05 INC 0x10 DJZ 0x10 RRC 0x10
b、与 "A" 做运算,结果存入 "A" 中。其语法为 "INST A, REG"。例如 MOV A, 0x15 AND A, 0x15 SUB A, 0x15
c、与 "A" 做运算,结果存入缓存器中。其语法为 "INST REG, A"。例如 MOV 0x15, A AND 0x15, A SUB 0x15, A
(8)位导向型指令的语法为 "INST REG, BIT"。 例如 BC 0x05, 0x1 BS 0x05, 0x1 JBC 0x05, 0x1 JBS 0x05, 0x1
(9)标签之用法 a、卷标字符串长度不得大于11个字母。
b、卷标字符串之后要加一个冒号“:”。冒号之后要换行。
3. 编译结果
隆 EM78156 / EM78P156 &
14
WIM156 执行结束并不会产生任何档案,所以每一次的执行结果都会重新编译一次。
CLRA Clear the A register
CLRA
0000
1000
0000
0 --> A A 0 1 --> Z 零 1
說 A Z
例說
CLRA ; A Z
CLR Clear Register
CLR R 0
0000
11rr
rrrrr
0 --> R R 0 1 --> Z 零 1 說 R 零
例說
CLR 0x10 ; 0x10
隆 EM78156 / EM78P156 &
15
SUB Subtract
SUB A ,R
0001
00rr
rrrrr
R-A --> A
Z,C,DC 零 說 R A A
SUB R ,A
0001
01rr
rrrrr
R-A --> R
Z,C,DC 零 說 R A R
SUB A , k
1
1101
kkkk
kkkk
k-A --> A
Z,C,DC 零 說 立 k A A
隆 EM78156 / EM78P156 &
16
例說 說 A = 0x99-0x55
MOV A,@0x99 MOV 0x10,A ;R 10 = 0x99 MOV A,@0x55
SUB A ,0x10 ;A = 0x44
說 A = 0x02 - A
MOV A,@0x01 ;A = 0x01
SUB A,@0x02 ;A = 0x02 - 0x01 = 0x01 ;C flag = 1 , C =
; 1
DECA Decrement R, Place in A
DECA R
0001
10rr
rrrrr
R-1 --> A Z 零
說 R A
隆 EM78156 / EM78P156 &
17
例說 說 數16
STATUS == 3 狀
Z_FLAG == 2 零 狀 BIT2
MOV A,@0x10 MOV 0x10,A LOOP:
DECA 0x10 MOV 0x10,A
JBS STATUS,Z_FLAG JMP LOOP
隆 EM78156 / EM78P156 &
18
DEC Decrement R
DEC R
0001
11rr
rrrrr
R-1 --> R Z 零
說 R 1 例說
說 數16
STATUS == 3 ; 狀
Z_FLAG == 2 零 狀 BIT2
MOV A,@0x10 MOV 0x10,A LOOP:
DEC 0x10
JBS STATUS,Z_FLAG JMP LOOP
隆 EM78156 / EM78P156 &
19
OR Inclusive OR
OR A,R
0010
00rr
rrrrr
A ∨R --> A Z 零
說 A R OR A
OR R,A
0010
01rr
rrrrr
A ∨R --> R Z 零
說 A R OR R
OR A, k
1
1001
kkkk
kkkk
A ∨k --> A Z 零
說 A 立 k OR A
例說
port6 0x10 OR port6
MOV A,0x6 ; port6 A OR A,0x10 ;OR,A 0x10 A MOV 0x6,A ; A port6
隆 EM78156 / EM78P156 &
20
說 R 10 = R 11 OR R 12. MOV A,0x11 MOV 0x10,A MOV A,0x12
OR 0x10,A ;R 10=R 11 OR R 12
說 A = A OR 0xF0.
MOV A,@0x03 ;A = 0x03 OR A,0xF0 ;A = 0xF3
隆 EM78156 / EM78P156 &
21
AND And
AND A,R
0010
10rr
rrrrr
A & R --> A Z 零
說 A R AND A
AND R,A
0010
11rr
rrrrr
A & R --> R Z 零
說 A R AND R
AND A,K
1
1010
kkkk
kkkk
A & K --> A Z 零
說 A 立 K AND A
隆 EM78156 / EM78P156 &
22
例說 port 6 R 10 register AND 來, port6
MOV A,0x6 ; port6 料 AND A,0x10 ; 料 R 10 AND MOV 0x6,A ; port6
R 10 = R 11 AND R 12
MOV A,0x11 MOV 0x10,A MOV A,0x12
AND 0x10,A ;R 10 = R 11 AND R 12
隆 EM78156 / EM78P156 &
23
XOR Exclusive OR
XOR A,R
0011
00rr
rrrrr
A ⊕ R --> A Z 零
說 A R XOR A
XOR R,A
0011
01rr
rrrrr
A ⊕ R --> R Z 零
說 A R XOR R
XOR A, k
1
1011
kkkk
kkkk
A ⊕ k --> A Z 零
說 A R XOR A
例說
0x10 0x55 0x10 不 0x55 ERROR
STATUS == 3 Z_FLAG == 2
MOV A,@0x55 XOR A,0x10
JBS STATUS,Z_FLAG
隆 EM78156 / EM78P156 &
24
JMP ERROR
令 R 10 = R 11 XOR R 12
MOV A,0x11 MOV 0x10,A MOV A,0x12
XOR 0x10,A ;R 10 = R 11 XOR R 12
令 A = A XOR 0xF0.
MOV A,@0x00 ;A = 0x00 XOR A,@0xF0 ;A = 0xF0
隆 EM78156 / EM78P156 &
25
ADD Add
ADD A,R
0011
10rr
rrrrr
A + R --> A
Z,C,DC 零 說 A R A
ADD R,A
0011
11rr
rrrrr
A + R --> R
Z,C,DC 零 說 A R R
ADD A, k
1
1111
kkkk
kkkk
K + A --> A
Z,C,DC 零 說 A 立 K A
例說
兩行 令 A = R 11 + R 12.
MOV A,0x11
ADD A,0x12 ;A = R 11 + R 12
兩行 令 R 10 = R 11 + R 12.
MOV A,0x11
隆 EM78156 / EM78P156 &
26
MOV 0x10,A MOV A,0x12
ADD 0x10,A ;R 10 = R 11 + R 12
兩行 令 A = 0x01 + 0x01.
MOV A,@0x01 ;A = 0x01 ADD A,@0x01 ;A = 0x02
隆 EM78156 / EM78P156 &
27
INCA Increment R, Place in the A register
INCA R
0101
00rr
rrrrr
R + 1 --> A Z 零
說 R 1 A
例說
MOV A,@0x11
MOV 0x10,A ;R 10 = 0x11 INCA 0x10 ;A = 0x12
隆 EM78156 / EM78P156 &
28
INC Increment R INC R
0101
01rr
rrrrr
R + 1 --> R Z 零
說 R 1 R
例說
MOV A,@0x11 MOV 0x10,A ;R 10 = 0x11 INC 0x10 ;R 10 = 0x12
隆 EM78156 / EM78P156 &
29
DJZA Decrement R, Place in the A register, Skip if 0
DJZA R
0101
10rr
rrrrr
R - 1 --> A, skip if 0
說 R 1 A 0 令
例說
HERE: DJZA 0x9 CONT:
MOV A,0x10 SKIP:
ADD A,@10
行DJZA 令 PC = address HERE
行DJZA 令 A=R 9-1
if A = 0, PC = address SKIP if A ≠ 0, PC = address CONT
隆 EM78156 / EM78P156 &
30
DJZ Decrement R, Skip if 0
DJZ R
0101
11rr
rrrrr
R - 1 --> R, skip if 0
說 R 1 R 0 令
例說
MOV A,@100 MOV 0x10,A LOOP: ?
?
?
DJZ 0x10 ; R 10 若 不 ;0 , 行JMP 令 若 0
;JMP 令不 行
JMP LOOP