指令字节和指令周期
指令字长有三种:
单字节 RET
双字节 MOV A, #68H
三字节 MOV 30H, 46H
指令周期是指执行一条指令所需要的时间
1机器周期指令
2机器周期指令
4机器周期指令
4.3.1 数据传送指令:
1、内部8位数据传送指令
mov A,#data ;(A)<--- #data
mov A, data ;(A)<--- (data)
mov A, @Ri ;(A)<--- ((Ri)) i=0,1
mov A,Rn ;(A)<--- (Rn) n=0~7
mov Rn,# data;(Rn ) <--- #data
mov Rn, data ;(Rn) <--- (data)
mov Rn,A ;(Rn) <--- (A)
【例4-14】MOV A, 40H ; (A)<---(40H)
MOV A, #40H ; (A)<---40H
注意 40H 和#40H的区别
【例4-15】MOV A, Rl ; (A)<---(R1)
MOV A, @Rl ; (A)<---((R1))
注意 @R1 和R1的区别
【例4-16】MOV 90H, #40H ;(P1)<---40H
MOV P1, #40H ;(P1)<---40H
MOV R0, #90H ;(R0)<---90H
MOV @R0, #40H ;(90H)<---40H
注意:
(1) 目的操作数不能采用立即寻址。
(2) @Ri中的i范围为0和1。
(3) Rn中的n的范围为0~7。
(4) 每条指令中最多只能有1个Rn或@Ri。
【例4-17】 以下指令都是错误的。
MOV #30H, 40H
MOV A, @R2
MOV R1, R3
MOV R1, @R0
MOV @R1 , R2
MOV @R0, @R1
【例4-18】
MOV A, 60H ;(A)<---(60H),目的操作数为寄存器寻址
MOV 0E0H, 60H ;(A)<---(60H),目的操作数为直接寻址
MOV 09H, #40H ;(09H)<---40H,目的操作数为直接寻址
MOV R1, #40H ;(R1)<---40H,目的操作数为寄存器寻址
【例4-19】 分析程序的执行结果。
设内部RAM中30H单元的内容为80H,试分析执行下面程序后各有关单元的容。
MOV 60H, #30H ;(60H)<---30H
MOV R0, #60H ;(R0)<---60h
MOV A, @R0 ;(A)<---30H
MOV R1, A ;(R1)<---30H
MOV 40H, @R1 ;(40H)<---80H
程序执行结果为:(A)=30H,(Ro)=60H,(R1)=30H, (60H)=30H,(40H)=80H,(30H)=80H
2和3、外部数据传送指令
【例4-20】 将内部RAM 80H单元的内容送入外部RAM 70H单元。程序如下:
MOV R0,#80H
MOV A,@R0
MOV R0,#70H
MOVX @R0,A
此例中访问内部RAM和访问外部RAM均通过R0间接寻址,不同的是访问内部RAM用操作码MOV,访问外部RAM使用操作码MOVX,二者不能混淆。
4、交换指令
- XCH A, Rn ; (A) <=> (Rn), n=0~7
- XCH A,direct; (A)<=> (direct)
- XCH A, @Ri; (A)<=> ((Ri)) ,i=0,1
- XCH D A,@Ri ; (A) 0~3 <=> ((Ri))0~3
- SWAP A ; (A) 0~3 <=> (A)4~7
【 例4-22】 设(A)=34H , (R3)=56H, 执行指令:
XCHA, R3
则结果为: (A)=56H, (R3)=34H
【例4-23】 设(A)=34H , (R0)=30H, (30H)=56H, 执行指令:
XCHD A, @RO
则结果为: (A)=36H, (30H)=54H
5、查表指令
MOVC A, @A+PC ;(PC)<---(PC)+1;(A)<---((A)+(PC))
MOVC A, @A+DPTR ;(A)<---((A)+(DPTR))
【例4-24 】 执行程序:
地址 指令
0F00H MOV A,#30H
0F02H MOVC A,@A+PC
.
.
.
0F33H 3FH
.
.
.
实现将程序存储器0F33H 单元内容3FH送入A的功能。
【例4-25 】 执行程序:
MOV DPTR, #2000H
MOV A, #30H
MOVC A, @A+DPTR
实现将程序存储器中2030H单元的内容送入累加器A的功能。
6、堆栈操作指令
-PUSH direct ; ( sp ) <---(sp)+1, ( (sp))<--- (direct)
-POP direct ; ( direct ) <---((sp)) ,(sp)<--- (sp)-1
堆栈:一种数据结构,是“先进后出“线性表。
堆栈操作: 压入 PUSH , 弹出 POP
堆栈区: 占片内RAM 中连续的存储单元
复位后, 系统自动将SP指针指向07H
用户可将堆栈区设在30H ---7FH 数据缓冲区内,
如: MOV SP,#5FH
堆栈两种类型: 向上生长型和向下生长型, 如图2-5 所示。向上生长型堆栈,栈底在低地址单元。随着数据进栈, 地址递增, S P 的内容越来越大, 指针上移; 反之, 随着数据的出栈, 地址递减, SP 的内容越来越小, 指针下移。如(b)图所示。
MCS-51属向上生长型堆栈,这种堆栈的操作规则如下:
进栈操作: 先SP加1,后写入数据。
出栈操作: 先读出数据,SP减1 。
向下生长型堆栈, 栈底设在高地址单元。随着数据进栈, 地址递减, SP内容越来越小, 指针下移; 反之, 随着数据出栈, 地址递增, SP内容越来越大,指针上移。其堆栈操作规则与向上生长型正好相反。如(a)图所示。
堆栈的使用有两种方式:
一种是自动方式, 即在调用子程序或断点时, 断点地址自动进栈。程序返回时,断点地址再自动弹回PC。这种操作无需用户干预。
另一种是指令方式, 即使用专用的堆栈操作指令, 执行进出栈操作, 其进栈指令为PUS H, 出栈指令为POP。 例如:
保护现场就是一系列指令方式的进栈操作;
而恢复现场则是一系列指令方式的出栈操作。
需要保护多少数据由用户决定。
【例4-26】 设(SP)=70H,(ACC)=50H,(B)=60H ,
执行下述指令:
PUSH ACC ;(SP)<---(SP)+1,(71H)<---(ACC)
PUSH B ;(SP)<---(SP)+1,(72H)<---(B)
结果为:(71H)=50H, (72H)=60H,(SP)=72H
此例中ACC和B都是用直接寻址方式寻址的,不能用寄存器寻址方式。入栈指令常用于保护CPU现场等场合。
【例4-27】 设(SP)=72H,(72H)=60H,(71H)=50H,
执行下述指令;
POP DPL ;DPL((SP)),(SP)<---(SP)-1
POP DPH ;DPH((SP)),(SP)<---(SP)-1
结果为: (DPTR)=5060H,(SP)=70H
4.3.2 算术运算指令
1、加法指令
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)+(Cy)
ADDC A, direct ;(A)<---(A)+(direct)+(Cy)
ADDC A, @Ri ;(A)<---(A)+((Ri))+(Cy)
ADDC A, #data ;(A)<---(A)+ data +(Cy)
.
2、带借位的减法指令
SUBB A,Rn ; (A)<---(A)-(Rn)-(Cy)
SUBB A,direct ; (A)<---(A)-(direct)-(Cy)
SUBB A,@Ri ; (A)<---(A)-((Ri))-(Cy)
SUBB A, #data ; (A)<---(A)-data-(Cy)
3、加1指令
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
4、减1指令
DEC A ; (A) (A)-1
DEC Rn ; (Rn) (Rn)-1
DEC direct ; (direct) (direct)-1
DEC @Ri ; ((Ri)) ((Ri))-1
【例4-33】 试分析执行以下程序后, 各有关单元的结果。
解:程序如下:
MOV R1, #7FH
MOV 7EH, #00H
MOV 7FH, #40H
DEC @R1
DEC R1
DEC @R1
执行结果: (R1)=7EH (7EH)=0FFH (7FH)=3FH
【例 4-32】 设20H~21H单元存放一个16位二进制数X1(高8位存于21H单元),30H~31H单元存放另一个16位二进制数X2(高8位存于31H单元)。求X1+X2,和存于20H~21H ,设两数之和不超过16位。解:程序如下:
ORG 2000H
MOV R0, #20H
MOV R1, #30H
MOV A, @R0 ; 取被加数低8位
ADD A, @R1 ; 求和的低8位
MOV @RO, A ; 存和的低8位
INC R0 ; 指向被加数高8位
INC R1 ; 指向加数高8位
MOV A, @R0 ; 取被加数高8位
ADDC A, @R1 ; 求和的高8位
MOV @R0,A ; 求和的高8位
SJMP $ ;停机
END
运算结果:高8位存于21H单元,低8位存于20H单元。
5、十进制调整指令
DA A ; 若(AC)=1 或(A)3~0>9,则A<---(A)+06H
;若(Cy)=1 或(A)7~4>9,则A<---(A)+60H
•调整原则:形式上非BCD码 需要加 06H、60H、66H调整
-形式上是BCD码时: CY AC 调整原则
0 0 不调整
0 1 +06H
1 0 +60H
1 1 +66H
【例4-34】 编写程序完成78+93的BCD码加法程序, 并对调整过程进行分析。解: 相应BCD码加法程序为:
上一篇:80C51单片机的指令系统(二)寻址方式
下一篇:80C51单片机的指令系统(一)程序设计语言和指令
推荐阅读最新更新时间:2024-11-14 20:06
设计资源 培训 开发板 精华推荐
- LTC2175CUKG-14、14 位、125Msps 低功耗四通道 ADC 的典型应用
- 10段三色灯柱显示板
- MC33074DTBR2G 高顺从电压灌电流转换器的典型应用
- LTC2172IUKG-12、12 位、65Msps 低功耗四通道 ADC 的典型应用电路
- 具有电压回读 ADC 的 ADM1064ACPZ 超级定序器的典型应用电路
- DC2425A-F,使用 LTC2310IMSE-12 12 位、2Msps 真差分输入串行 SAR ADC 的演示板
- LTM8067IY 15V 浮动 1GBT 栅极驱动器的典型应用电路
- 使用 ON Semiconductor 的 LM317D2TXM 的参考设计
- LA5779他激式降压型开关稳压器典型应用(变量型)
- 具有三重 LDO 控制器的 Vrm 8.5 兼容 5 位可编程同步降压控制器 IC 的典型应用