|
|
|
|
语 法 |
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 | |