按指令功能,MCS-51指令系统分为数据传送(29条)、算术运算(24条)、逻辑运算及移位(24条)、控制转移(17条)、位操作(17条)5大类。共111条。
1. 数据传送(29条)
MOV A,Rn
;A← (Rn)
MOV A,direct ;A←(direct)
MOV A,@Ri
;A←((Ri))
MOV A,#data ;A← #data
MOV Rn,A
;Rn ← (A)
MOV Rn,direct
;Rn ←(direct)
MOV Rn,#data
;Rn ← #data
MOV direct ,A
;direct ← (A)
MOV direct,Rn
; direct ← (Rn)
MOV direct2 ,direct1 ;direct2 ← (direct1)
MOV direct,@Ri ; direct ← ((Rn))
MOV direct,#data ; direct ← #data
MOV @Ri,A
;(Ri) ← (A)
MOV @Ri,direct
;(Ri) ←(direct)
MOV @Ri,#data
;(Ri) ← #data
MOV DPTR,#data16;DPTR ← #data16
MOVX A,@DPTR;A ← ((DPTR))
MOVX @DPTR,A;(DPTR) ← (A)
MOVX A,@Ri
; A ← ((Ri))
MOVX @Ri,A
;(Ri)← (A)
MOVC A,@A+DPTR;A← ((A)+(DPTR))
MOVC A,@A+PC
;A ← ((A)+(PC))
XCH A,Rn
;(A)<=> (Rn)
XCH A ,direct;(A)<=>(direct)
XCH A,@Ri
;(A)<=>((Ri))
XCHD A,@Ri
;(A)0~3<=>((Ri))0~3
SWAP A
;(A)0~3<=>(A)4~7
PUSH direct ;SP ← (SP)+1, (SP) ← (direct)
POP direct ; direct ← ((SP)), SP ← (SP)-1
2. 算术运算(24条)
ADD A,Rn
;A← (A) + (Rn)
ADD A,direct
;A← (A) +(direct)
ADD A,@Ri
;A← (A) +((Ri))
ADD A,#data
;A← (A) + #data
ADDC A,Rn
;A← (A) + (Rn) + (C )
ADDC A,direct;A← (A) +(direct)+( C)
ADDC A,@Ri;A← (A) +((Ri))+( C)
ADDC A,#data;A← (A) + #data +( C)
SUBB A,Rn
;A← (A) – (Rn) –( C)
SUBB A,direct;A← (A) –(direct)-( C)
SUBB A,@Ri ;A← (A) –( (Ri)) –( C)
SUBB A,#data;A← (A) - #data –( C)
MUL AB
;BA← (A)×(B)
DIV AB;(A)÷(B)→商在A中,余数在B中
INC A
;A← (A) + 1
INC Rn
;Rn← (Rn) + 1
INC direct;(direct)← (direct)+ 1
INC @Ri
;(Ri)←((Ri))+ 1
INC DPTR
;DPTR← (DPTR) + 1
DEC A
;A← (A) - 1
DEC Rn
;Rn← (Rn) - 1
DEC direct
;direct← (direct)- 1
DEC @Ri
;(Ri)←((Ri))- 1
DA A
3. 逻辑运算及移位(24条)
ANL A,Rn ;A ← (A)∧(Rn)
ANL A,direct ;A ← (A)∧(direct)
ANL A,@Ri ;A ← (A)∧((Ri))
ANL A,#data ;A ← (A)∧#data
ANL direct,A ;direct← (A)∧(direct)
ANL direct,#data ;direct ← (direct)∧#data
ORL A,Rn ;A ← (A)∨(Rn)
ORL A,direct ;A ← (A) ∨(direct)
ORL A,@Ri ;A ←(A) ∨((Ri))
ORL A,#data ;A ← (A) ∨#data
ORL direct, A ;direct← (A) ∨(direct)
ORL direct, #data ;direct ← (direct) ∨#data
XRL A,Rn ;A ← (A) ⊕(Rn)
XRL A,direct ;A ← (A) ⊕(direct)
XRL A,@Ri ;A ←(A) ⊕((Ri))
XRL A,#data ;A ← (A) ⊕#data
XRL direct,A, ;direct ←(direct) ⊕ (A)
XRL direct,#data ;direct ← (direct) ⊕#data
CLR A ;对A清零
CPL A ;对A取反
RL A ;An+1←An, A0 ← A7 (循环左移)
RR A ;An ← An+1,A7 ← A0 (循环右移)
RLC A ;An+1 ← An ,A0 ← C,C ← A7(带进位循环左移)
RRC A ;An ← An+1,A7 ← C,C ← A0 (带进位循环右移)
4. 控制转移(17条)
LJMP addr16 ;PC ← addr16 (长转移指令)
SJMP rel ;PC ← (PC)+2+rel (短转移指令)
AJMP addr11 ;PC ←(PC)+2,PC10~0 ← addr11 (绝对转移指令)
JMP @ A+DPTR ;PC ← (A)+(DPTR) (变址寻址转移指令)
JZ rel ;若(A)= 0,则转移,否则顺序执行。转移目的地址=(PC)+ 2 + rel
JNZ rel ;若(A)≠0,则转移,否则顺序执行。转移目的地址=(PC)+2 + rel
CJNE A,#data,rel ; 转移目的地址 = (PC)+ 3 + rel
CJNE A,direct,rel ; 若第一操作数内容小于第二操作数内容,则(C)= 1,
CJNE @Ri,#data,rel ; 否则(C)= 0。
CJNE Rn,#data,rel ; 比较二个字节中的值,若不等,则转移。
DJNZ Rn,rel ;(二字节指令)转移目的地址 = (PC)+ 2 + rel
DJNZ direct,rel ;(三字节指令)转移目的地址 = (PC)+ 3 + rel
;第一操作数内容减1后,若差值不为零,则转移;否则顺序执行。
LCALL addr16 ;PC←(PC)+3,SP←(SP)+1,(SP)←(PC)7~0(长调用指令)
;SP←(SP)+1,(SP)←(PC)15~8,PC←addr16
ACALL addr11 ;PC ←(PC)+2,SP←(SP)+1,(SP)←(PC)7~0(绝对调用指令)
;SP←(SP)+1,(SP)← (PC)15~8,PC10~0←addr11
RET ;PC15~8← ((SP)),SP←(SP)-1 (返回指令)
;PC7~0← ((SP)),SP←(SP)-1
RETI ;PC15~8←((SP)),SP←(SP)-1 (返回指令)
;PC7~0 ←((SP)),SP←(SP)-1
NOP ;PC ← (PC)+1 (空操作指令)
5. 位操作(17条)
MOV
C,bit
;C←(bit)
MOV bit,C
;bit←(C )
CLR
C
;C←0
CLR
bit
;bit←0
SETB
C
;C←1
SETB
bit
;bit←1
ANL
C,bit
;C←(C )∧(bit)
ANL
C,/bit
;C←(C )∧/(bit)
ORL
C,bit
;C←(C )∨(bit)
ORL
C,/bit
;C←(C )∨/(bit)
CPL
C
;C←/(C )
CPL
bit
;bit←/(bit)
JC
rel
; 若(C )=1,则转移(PC←(PC)+2+rel);否则程序顺序执行
JNC
rel
; 若(C )=0,则转移(PC←(PC)+2+rel);否则程序顺序执行
JB
bit,rel
; 若(bit)=1,则转移(PC←(PC)+3+rel);否则程序顺序执行
JNB bit,rel
; 若(bit)=0,则转移(PC←(PC)+3+rel);否则程序顺序执行
JBC bit,rel
; 若(bit)=1,则PC←(PC)+3+rel,(bit)←0;否则程序顺序执行
题1:用数据传送指令实现下列要求的数据传送。
(1)R0的内容输出到R1。
(2)内部RAM 20H单元的内容传送到A中。
(3)外部RAM 30H单元的内容送到R0。
(4)外部RAM 30H单元的内容送内部RAM20H单元。
(5)外部RAM 1000H单元的内容送内部RAM 20H单元。
(6)程序存储器ROM 2000H单元的内容送R1。
(7)ROM 2000H单元的内容送内部RAM 20H单元。
(8)ROM 2000H单元的内容送外部RAM 30H 单元。
(9)ROM 2000H单元的内容送外部RAM 1000H单元。
解
(1) MOV A,R0
MOV R1,A
(2) MOV A,20H
(3) MOV R0,#30H 或 MOV R1,#30H
MOVX A,@R0 或 MOVX A,@R1
MOV R0,A
MOV R0,A
(4) MOV R0,#30H 或 MOV R1,#30H
MOVX A,@R0 或 MOVX A,@R1
MOV 20H,A
MOV 20H,A
(5) MOV DPTR,#1000H
MOVX A,@DPTR
MOV 20H,A
(6)
MOV DPTR,#2000H
CLR A
MOVC A,@A+DPTR
MOV R1,A
(7)
MOV DPTR,#2000H
CLR A
MOVC A,@A+DPTR
MOV 20H,A
(8)
MOV DPTR,#2000H
CLR A
MOVC A,@A+DPTR
MOV R0,#30H
MOVX @R0,A
(9)
MOV DPTR,#2000H
CLR A
MOVC A,@A+DPTR
MOV DPTR,#1000H
MOVX @DPTR,A
题2:将片内RAM 30H单元与40H单元中的内容互换。
方法1(直接地址传送法):
MOV
31H,30H
MOV
30H,40H
MOV
40H,31H
方法2(间接地址传送法):
MOV
R0,#40H
MOV
R1,#30H
MOV
A,@R0
MOV
B,@R1
MOV
@R1,A
MOV
@R0,B
方法3(字节交换传送法):
MOV
A,30H
XCH
A,40H
MOV
30H,A
方法4(堆栈传送法):
PUSH
30H
PUSH
40H
POP
30H
POP
40H
题3:两字节无符号数相加,被加数放在内部RAM30H,31H单元(低位放在前),加数放在内部RAM40H、41H单元。计算两数的和,放在50H~52H单元中。
解: MOV A,30H
ADD A,40H ;低字节相加
MOV 50H,A
MOV A,31H
ADDC A,41H ;高字节相加
MOV 51H,A
MOV A, #00H
ADDC A,#00H ;取高相加产生的进位
MOV 52H,A
题4:两个双字节数相减,被减数放在30H,31H,减数放在40H,41H中,差放入50H、51H。
解: ADD A,#00H ;将进位位清0
MOV A,30H
SUBB A,40H ;低字节相减
MOV 50H,A
MOV A,31H
SUBB A,41H ;高字节相减
MOV 51H,A
题5:编程实现下列运算:F=D1×D2+D3/D4 ,其中D1、D2、D3、D4都为非0的8位二进制无符号数。
解: MOV A,#D1
MOV
B, #D2
MUL
AB ;计算D1×D2
MOV
R2,A ;暂存D1×D2的结果
MOV
R3, B
MOV
A,#D3
MOV
B,#D4
DIV
AB ;计算D3/D4
ADD
A,R2 ;乘积的低位与商相加
MOV
R2,A ;存F低位
MOV
A,R3
ADDC A,#0 ;乘积的高位与低位和的进位相加
MOV
R3,A ;存F高位在R3中
题6:
分析
定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析
下列程序段实现的功能:
MOV A, direct
RL A
MOV R1,A
RL A
RL A
ADD A,R1
MOV direct,A
解:各指令实现的功能依次如程序右边注译,可知该程序实现的功能是将存贮单元的数乘以10。
题7:将外RAM的一个数据块(首地址为DATA1)传送到内部数据RAM(首地址为DATA2),遇到传送的数据为零时停止传送,试编程。
解: MOV R0,#DATA2 ;赋首址
MOV DPTR,#DATA1
LOOP1:MOVX A,@DPTR ;取数
JZ LOOP2 ;判断是否为0
MOV @R0,A ;不为0存数
INC R0 ;准备取下一个数
INC DPTR
SJMP LOOP1 ;重复取数过程 LOOP2:RET ;为0结束
题8:找出片内RAM的DATA为首址的数据块中第一个等于100的数,并将其地址存入A中。
解: MOV R0,#DATA
LOOP1: CJNE @R0,#64H,LOOP2
SJMP LOOP3
LOOP2: INC R0
SJMP LOOP1
LOOP3: MOV A,R0
题9:将内部RAM的30H~7FH单元清0。
解:
(分析:这是一个重复操作过程,可以使用循环指令。30H~7FH共50H个单元 ,循环次数为50H。)
程序如下:
MOV R7,#50H
MOV R0,#30H
NEXT:MOV @R0,#0
INC R0
DJNZ R7,NEXT
题10:将8031内部RAM的40H ~ 4FH单元置初值#A0H ~ #AFH。
解: MOV R0,#40H
MOV R2,#10H
MOV A,#0A0H
LOOP: MOV @R0,A
INC R0
INC A
DJNZ R2,LOOP
题11:以查表方式求出片内RAM中20H单元数的平方值,存入片内21H单元中。
解法一: 以DPTR为基址寄存器,平方表首址可灵活安排在ROM中适当的位置如2000H,即平方表的内容从2000H单元放起。程序如下:
ORG 1800H
MOV DPTR ,#2000H
MOV A,20H
MOVC A,@A+DPTR
MOV 21H,A
ORG 2000H
DB 00H, 01H ,04H , 09H ,10H, 19H
DB
24H, 31H, 40H , 51H ,64H,……
解法二:以PC为基址寄存器,此时表格须紧跟程序之后,且要计算好表格首址位置
ORG 1000H
1000 MOV A,20H
1001 ADD A,#03H
1003 MOVC A,@A+PC
1004 MOV 21H,A
1006 RET
1007 DB
00H, 01H, 04H ……