您的位置:首页单片机义隆单片机
内容搜索:
阅读内容
背景:#EDF0F5 #FAFBE6 #FFF2E2 #FDE6E0 #F3FFE1 #DAFAF3 #EAEAEF 默认  

第三章 EM78指令系统 (2)

[日期:2008-02-12 ] [来源:东哥开发网(www.picavr.com) 作者:] [字体: (投递新闻)
语  法 
DAA
编  码
0
0000
0001
0001
 
操作內容
if [A<3::0> > 9].OR.[DC=1]
 then A<3::0> + 6  ->  A<3::0>;
if [A<7::4> > 9].OR.[C=1]
 then A<7::4> + 6 -> A<7::4>;
受影响的标志
C进位标志
说  明
DAA用来调整在累加器中的8位的2进位数值﹐使累加器中的数值变成10进位的表示法﹐分別用两个4位來表示十位及个位。
举例说明
做一个十进位加法运算6+9

    MOV A,@0x6
    MOV 0x10,A
    MOV A,@0x9
    ADD A,0x10  ;A = 0xf
    DAA         ;A = 15H (packed BCD)
 
 
 
语  法
DECA    R
编  码
0
0001
10rr
rrrrr
 
操作內容
R-1 --> A
受影响的标志
Z零标志
说  明
递减R寄存器的值﹐并且将结果存入A寄存器中。
举例说明
说明如何作一个计数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
 
  
 
语  法 
DEC R
编  码
0
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
 
语  法
DJZA    R
编  码
0
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=R9-1
if A = 0, PC = address SKIP
if A ¹ 0, PC = address CONT
 
语  法
DJZ R
编  码
0
0101
11rr
rrrrr
 
操作內容
R - 1 -->  R, skip if 0
受影响的标志
说  明
将所指定R寄存器的內含值减1﹐并将结果存回R寄存器上﹔如果结果为0﹐则下一个指令将被跳过。
举例说明
    MOV A,@100
    MOV 0x10,A
LOOP:
    ·
    ·
    ·
    DJZ 0x10    ;寄存器R10递减﹐ 若结果不等于
                ;0 , 执行JMP指令﹐若結果等于0﹐                ;JMP指令不执行              JMP LOOP
 
 
语  法
INCA    R
编  码
0
0101
00rr
rrrrr
 
操作內容
R + 1 --> A
受影响的标志
Z﹔零标志
说  明
将被指定R寄存器的內含值加1,并将结果储于A寄存器中。
举例说明
    MOV A,@0x11
    MOV 0x10,A      ;R10 = 0x11
    INCA    0x10        ;A = 0x12

 
语  法
INC R
编  码
0
0101
01rr
rrrrr
 
操作內容
R + 1 --> R
受影响的标志
Z﹔零标志
说  明
将被指定R寄存器的內含值加1﹐並且将结果再存回R寄存器中。
举例说明
    MOV A,@0x11
    MOV 0x10,A      ;R10 = 0x11
    INC     0x10        ;R10 = 0x12
 
 
 语  法
INT
编  码
1
1110
0000
0001
 
操作內容
PC + 1  -->  [Top of Stack]
0001H  -->  PC
受影响的标志
说  明
软件中断指令﹐首先将下一个位址存入堆栈中﹐然后将0x01载入程序寄存器中。
举例说明
    ORG 0x001
    JMP SET_INT
    ·
    ·
SET_INT﹕
    ·
    ·
    RET

MAIN﹕
    ·
    ·
HERE﹕
    INT
CONT﹕
    CLRA

执行INT指令之前
PC = address HERE

执行INT指令之后
PC = 0001H
[Top of Stack] = address CONT
 
 
 
语  法
IOR R
编  码
0
0000
0001
rrrr
 
操作內容
IOCR --> A
受影响的标志
说  明
将控制寄存器IOCR中的值移到寄存器A中。
举例说明
    IOR     0xf ;取得 IOCF 中的內容﹐并载入A中
    MOV 0x10,A  ;储存在寄存器 0x10中
 
语  法
IOW      R
编  码
0
0000
0000
rrrr
 
操作內容
A <-- IOCR
受影响的标志
说  明
将A寄存器(累加器)的内容载入控制寄存器IOCR中。
举例说明
将port6設定成输出口。
    MOV A,@0
    IOW     0x6
 
 
语  法
JMP k
编  码
1
01kk
kkkk
kkkk
 
操作內容
k  -->  PC(9::0)
R3(7::5)  -->  PC(12::10)
受影响的标志
说  明
当执行一个跳转指令﹐指令后所描述的执行位址会载入程序计数器中。
举例说明
HERE    JMP BRANCH

执行JMP指令之前
PC = address HERE

执行JMP指令之后
PC = address BRANCH
 
语  法
JZA R
编  码
0
0111
10rr
rrrrr
 
操作內容
R+1 --> A, skip if result = 0
受影响的标志
说  明
将所选定的寄存器R的內容加1﹐并将结果存于A寄存器﹐若结果为0﹐则跳过下一个指令。
举例说明
Port 6输出递减的二进位数值。

    MOV A,@x00
LOOP:
    MOV 0x6,A
    MOV 0x10,A
    JZA 0x10
    JMP LOOP
 
语  法
JZ  R
编  码
0
0111
11rr
rrrrr
 
操作內容
R+1 -->  R, skip if result = 0
受影响的标志
说  明
将所选定的寄存器R的內容加1﹐并将结果存於R寄存器﹐若结果为0﹐则跳过下一个指令。
举例说明
HERE:
    JZ  0x10
CONT:
    MOV A,0x10
SKIP:
    ADD A,@10

执行JZ指令之前
PC = address HERE

执行JZ指令之后
R10 = R10-1
if R10 = 0, PC = address SKIP
if R10 ¹ 0, PC = address CONT
  
语  法
JBC R,b
编  码
0
110b
bbrr
rrrrr
 
操作內容
if R(b) = 0, skip
受影响的标志
说  明
如果寄存器R的位 “b” 是“0”,则跳过下一个指令。
举例说明
测试0x10寄存器的bit0﹐若是为”0”则port5的bit0设成”0”﹔若0x10寄存器的bit0为”1”﹐則port5的bit0设成”1”。

    JBC 0x10,0
    BS  0x5,0
    JBS 0x10,0
    BC  0x5,0
 
语  法 
JBS R,b
编  码
0
111b
bbrr
rrrrr
 
操作內容
if R(b) = 1, skip
受影响的标志
说  明
如果寄存器R的位 “b” 是“1”,则跳过下一个指令。
举例说明
HERE    JBC 0x9,3
CONT    MOV A,@10
SKIP    ADD A,0x10

执行JBC指令之前
PC = address HERE

执行JBC指令之后
if R9(3) = 0, PC = address CONT
if R9(3) ¹ 0, PC = address SKIP
  
 
语  法
MOV R,A
编  码
0
0000
01rr
rrrr
 
 操作內容
A --> R
受影响的标志
说  明
将A寄存器中的值载入寄存器R中。
语  法
MOV A,R
编  码
0
0100
00rr
rrrr
 
操作內容
R --> A
受影响的标志
Z (零标志)
 
将R寄存器中的值载入A寄存器﹐如果A寄存器的結果为零﹐就会将Z标志设成1﹔否则将Z标志清为0。
 
 
语  法
MOV A, k
编  码
1
1000
kkkk
kkkk
 
操作內容
k --> A
受影响的标志
说  明
将立即k载入A寄存器中。
举例说明
將A Move data from accumulator to register

    MOV A,@0x11 ;将立即值载入A寄存器中
    MOV 0x10,A  ;将A中的内容载入0X10中
    MOV A,9     ;将寄存器9的值载入A中
 

 
 
语  法
NOP
编  码
0
0000
0000
0000
 
操作內容
No Operation
受影响的标志
None
说  明
不做任何工做﹐用来做时间的延迟。
 
 
举例说明
P50输出3 ms的突波. (system clock = 2MHz)

    BS  0x5,0x0 ;P50输出为high
    NOP     ;延迟两个指令周期
    NOP
    BC  0x5,0x0 ;P50输出为low
 
 
 
语  法
OR  A,R
编  码
0
0010
00rr
rrrrr
 
操作內容
AÚR --> A
受影响的标志
Z 零标志
说  明
将A寄存器中的值和R寄存器中的值OR在一起﹐在存入A寄存器中。
 
 
语  法
OR  R,A
编  码
0
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


说明右式应该如何完成﹕R10 = R11 OR R12.
    MOV A,0x11
    MOV 0x10,A
    MOV A,0x12
    OR      0x10,A      ;R10=R11 OR R12


说明右式应該如何完成﹕ A = A OR 0xF0.
   
    MOV A,@0x03     ;A = 0x03
    OR      A,0xF0      ;A = 0xF3
阅读:
录入:JETTA

推荐 】 【 打印
本文评论
      全部评论
发表评论


点评: 字数
姓名:
站长推荐