|
|
|
|
语 法
|
RET
|
|
编 码
|
|
|
|
|
|
|
操作內容
|
[Top of Stack] --> PC
|
|
受影响的标志
|
无
|
|
说 明
|
从子程序中返回﹐堆栈最上面的数值载入程序计数器(Program
counter)。
|
|
举例说明
|
TEST:
·
·
·
RET
·
·
·
CALL TEST
HERE:
ADD A,@0x1
·
·
·
在呼叫RET指令之前。
堆栈的顶端Top of Stack =
address HERE
在呼叫RET指令之后。
程序计数器PC = address
HERE
|
|
|
|
|
语 法
|
RETL k
|
|
编 码
|
|
|
|
|
|
|
操作內容
|
k --> A
[Top of Stack] --> PC
|
|
受影响的标志
|
无
|
|
说 明
|
从子程序返回﹐并将立即值载入A寄存器(累加器)中。
堆栈最顶端的数值载入程序计数器中。
|
|
|
建立一个7段显示器转換表﹐並用port6驱动7段显示器。
;REGISTER DEFINE
PC == 2
|
|
|
TRANS:
ADD PC,A
RETL 0XFC
RETL 0XC0
RETL 0XEA
RETL 0XF2
RETL 0X66
RETL 0XB6
RETL 0XBE
RETL 0XE0
RETL 0XFE
RETL 0XF6
|
|
|
|
MAIN:
·
·
·
MOV A,0x10 ;将寄存器的內含值载入A中
CALL TRANS
MOV 0x6,A ;输出到7段显示器
·
·
·
|
| |
|
|
|
|
|
|
|
|
|
|
语 法
|
RLCA R
|
|
编 码
|
|
|
|
|
|
|
操作內容
|
R(n) --> A(n+1), R(7) --> C, C
--> A(0)
|
|
受影响的标志
|
C﹔进位标志
|
|
说 明
|
将所指定的寄存器的內容﹐连同进位标志一起向左移1位﹐并将结果存於A寄存器。
|
|
举例说明
|
将指定的寄存器放向左移1位﹐并将结果由port6输出。
BIT_BUF == 0x10
RLCA
BIT_BUF
MOV 0x6,A
|
|
|
|
|
语 法
|
RLCA R
|
|
编 码
|
|
|
|
|
|
|
操作內容
|
R(n) --> R(n+1), R(7) --> C, C --> R(0)
|
|
受影响的标志
|
C﹔进位标志
|
|
说 明
|
将所指定的寄存器的內容﹐连同进位标志向左移1个位原﹐结果存在原先的寄存器。
|
|
举例说明
|
将0X10寄存器的內容向左移1个位﹐进位标志并不包含在內。
RLCA 0x10
﹔寄存器的bit7移到进位标志
﹔中。并将结果存於A寄存器
RLC
0x10 ﹔將0x10寄存器的值向左移1
﹔位﹐此时执行的結果如上图。
|
|
|
|
|
语 法
|
RRCA R
|
|
编 码
|
|
|
|
|
|
|
操作內容
|
R(n) --> A(n-1), R(0) --> C, C --> A(7)
|
|
受影响的标志
|
C﹔进位标志被影响
|
|
说 明
|
R寄存器的內含值又移1-bit﹐右移时包含C(进位标志)
﹐如下图﹐并将结果存于A寄存器。
|
|
举例说明
|
将指定的寄存器放向右移1位﹐并将结果由port6输出。
BIT_BUF == 0x10
RRCA
BIT_BUF
MOV 0x6,A
|
|
|
|
|
语 法
|
RRC R
|
|
编 码
|
|
|
|
|
|
|
操作內容
|
R(n) --> R(n-1), R(0)
--> C, C --> R(7)
|
|
受影响的标志
|
C﹔进位标志
|
|
说 明
|
所指定的寄存器的內容﹐连带着进位标志接向右移1位﹐如下图。
|
|
举例说明
|
MOV A,@0x0f
CLR 0x3,0
;clear C flag
MOV 0x10,A
;R10 = 00001111
RRC 0x10
;R10 = 00000111, C = 1
|
|
|
|
|
|
|
|
语 法
|
SUB A,R
|
|
编 码
|
|
|
|
|
|
|
操作內容
|
R-A --> A
|
|
受影响的标志
|
Z,C,DC﹔零标志﹐进位标志和辅助标志都会受影响
|
|
说 明
|
將R寄存器中的值减去A寄存器中的值﹐再存回A寄存器中。
|
|
|
|
|
语 法
|
SUB R,A
|
|
编 码
|
|
|
|
|
|
|
操作內容
|
R-A --> R
|
|
受影响的标志
|
Z,C,DC﹔零标志﹐进位标志和辅助标志都会受影响
|
|
说 明
|
将R寄存器中的值减去A寄存器中的值﹐再存回R寄存器中。
|
|
|
|
|
语 法
|
SUB A, k
|
|
编 码
|
|
|
|
|
|
|
操作內容
|
k-A --> A
|
|
受影响的标志
|
Z,C,DC﹔零标志﹐进位标志和辅助标志都会受影响
|
|
说 明
|
将立即值k的值减去A寄存器中的值﹐再存回A寄存器中。
|
|
|
|
|
举例说明
|
说明如何完成A = 0x99-0x55的计算式
MOV A,@0x99
MOV 0x10,A
;R10 = 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﹐相减结果为正值。
|
|
|
|
|
语 法
|
SWAPA R
|
|
编 码
|
|
|
|
|
|
|
操作內容
|
R(3::0) --> A(7::4)
R(7::4) --> A(3::0)
|
|
受影响的标志
|
无
|
|
说 明
|
将所选定的寄存器﹐高4位以及低4位﹐互換﹐并将结果存于A寄存器。
|
|
举例说明
|
将port6的內容﹐高4位以及低4位互換。
MOV A,0x6
MOV 0x10,A
SWAP 0x10
MOV 0x6,A
|
|
|
|
|
语 法
|
SWAP R
|
|
编 码
|
|
|
|
|
|
|
操作內容
|
R(3::0) <--> R(7::4)
|
|
受影响的标志
|
无
|
|
说 明
|
将所选定的寄存器﹐高4位以及低4位﹐互換。
|
|
举例说明
|
MOV A,@0x43
MOV 0x10,A
;R10 = 0x43
SWAP 0x10
;R10 = 0x34
|
|
|
|
|
|
|
|
|
|
语 法
|
XOR A,R
|
|
编 码
|
|
|
|
|
|
|
操作內容
|
A Å R --> A
|
|
受影响的标志
|
Z ﹔零标志
|
|
说 明
|
将A寄存器的值和R寄存器的值XOR在一起﹐并且将结果存入A寄存器中。
|
|
|
|
|
语 法
|
XOR R,A
|
|
编 码
|
|
|
|
|
|
|
操作內容
|
A Å R --> R
|
|
受影响的标志
|
Z ﹔零标志
|
|
说 明
|
将A寄存器的值和R寄存器的值XOR在一起﹐并且将结果存入R寄存器中。
|
|
|
|
|
语 法
|
XOR A, k
|
|
编 码
|
|
|
|
|
|
|
操作內容
|
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
JMP
ERROR
下面的指令敘述﹐完成R10
= R11 XOR R12
MOV A,0x11
MOV 0x10,A
MOV A,0x12
XOR 0x10,A
;R10 = R11 XOR R12
下面的指令敘述﹐完成 A = A XOR 0xF0.
MOV A,@0x00
;A = 0x00
XOR A,@0xF0
;A = 0xF0
|
|
|
|
|
|
|