当前位置:文档之家› EM78P156语法介绍

EM78P156语法介绍

隆 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

相关主题
文本预览
相关文档 最新文档