- 打卡等级:以坛为家II
- 打卡总天数:510
- 最近打卡:2025-05-06 08:17:28
中级会员
- 积分
- 424
|
发表于 2023-8-21 10:15:53
|
显示全部楼层
本帖最后由 wpppmlah 于 2023-8-21 11:54 编辑
何宾教授 :从8051到32位8051 2023年8月18日下午课程主要内容
1,注意PC自动增1 或 增2的细节,增1 或增2 是由机器指令字节数来决定的。
2,指令A5前缀的由来(上一节课中详细的进行了分析)
第六章 单片机CPU指令集架构
本节介绍逻辑指令,包括
■逻辑“与”指令
■逻辑“或”指令
■逻辑“异或”指令
■清除指令
■取反指令
■移位指令
■半字交换指令
■逻辑“与”指令
ANL A,Rn(*)
ANL dir8,A(*)
[例6-24]下面的指令执行逻辑"与"操作,即
ANL P1 ,#011100118
执行该指令,将清除P1端口的第7位、第3位还有第2位
[例6・25]下面的指令执行逻辑"与"操作,即
ANL R1,R0
在执行指令之前,寄存器R1的内容(R1) = "1100 0011",寄
存器R0的内容(R0) = "0101 0101"
■在执行该指令后,寄存器R1的内容(R1) = "0100 0001"
ANL Rm,#data
ANL Rm,dir8
ANL WRj,#data16
ANL WRj,dir16
■逻辑“或”指令
逻辑“或“指令在指定变量之间执行按位逻辑“或“运算, 并将结果保存在目的操作数中
■该指令影响符号标志N和零标志Z
ORL A,Rn (*)
[例6・25]下面的指令执行逻辑"或”操作,即
ORL A,R0
在执行该指令之前,累加器A中的内容(A) = "1100 0011",
寄存器R0中的内容(R0) = "0101 0101"
运行该指令后,累加器A中的内容(A) = "1101 0111"
ORL A,@Ri(*)
ORL A,#data (*)
ORL dir8,A (*)
ORL dir8,#data (*)
[例6-26] 下面的指令执行逻辑"或"操作,即
ORL P1, #00110010B
在执行该指令后,将P1端口的第5位、第4位和第1位设置为 1
ORL Rm,dir8
ORL Rm,dir16
ORL Rm,@DRk
■逻辑“异或”指令
逻辑“异或“指令,在指定变量之间执行按位逻辑“异或" 运算,并将结果保存在目标操作数中
XRL A,Rn (*)
【例6・27】下面的指令执行逻辑"异或"操作,即
XRL A,R0
在执行指令之前,累加器A中的内容(A)= “1100 0011” ,寄存器
R0中的内容(R0) = "1010 1010"
执行完该指令后,累加器A中的内容(A)=” 0110 1001"
XRL dir8,A (*)
XRL dir8,#data (*)
XRL Rm,dir8
XRL Rm,dir16
XRL Rm,@DRk
■清除指令
CLR A (*)
[例6-29]下面的指令执行清除操作,即
CLR A
执行指令之前,累加器A中的内容(A) ="1100 0011"
■执行完该指令后,累加器A中的内容(A) = "0000 0000"
■取反指令
CPL A (*)
■移位指令
RL A (*)
RLC A (*)
■该指令的功能是使得累加器A的内容带进位标志循环左移
■具体来说,累加器A中的8位和进位标志一起向左循环移动1位,累加器A 的第7位移动到进位标志位
CY中,且进位标志位CY的之前状态移动到累加器A的第0位
■影响N和Z标志位
RR A(*)
■该指令的功能是使得累加器A的内容循环右移
■具体来说,累加器A中的8位向右循环移动一位,且累加器A的第0位循环移动到其第7位的
位置
■只影响N和Z标志
RRC A(*)
■该指令的功能是使得带进位标志的累加器A的内容循环右移
■具体来说,累加器A中的8位和进位标志一起向右循环移动1位,累加器的 第0位移动到进位标志位CY中,进位标志位CY的之前状态移动到累加器A 第7位的位置
■ N和Z标志位也会收到影响
SLL Rm
该指令将寄存器Rm的内容逻辑左移一位,最低有效位用"0" 填充,移出的MSB保存在
进位标志位CY中,影响N和Z标志位
SLL WRj
该指令将寄存器WRj的内容逻辑左移一位,最低有效位用"0" 填充,移出的MSB保存在
进位标志位CY中,影响N和Z标志位
SRA Rm
该指令将寄存器Rm的内容算术右移一位,移出的最高有效位保 持不变。移出的LSB
保存在进位标志位CY中,影响N和Z标志位
SRA WRj
该指令将寄存器WRj的内容算术右移一位,移出的最高有效位保持不变。移出的LSB
保存在进位标志位CY中,影响N和Z标志位
SRL Rm
该指令将寄存器Rm的内容逻辑右移一位,最高有效位用"0” 填充,移出的LSB保存在
进位标志位CY中,影响N和Z标志位
SRL WRj
该指令将寄存器WRj的内容逻辑右移一位,最高有效位用"0” 填充,移出的LSB保存在
进位标志位CY中,影响N和Z标志位
■半字交换指令
SWAP A(*)
[例6-31]下面的指令执行半字交换操作,即
SWAP A
在执行指令之前,累加器A中的内容(A)="1100 0101"
■在执行完该指令后,累加器A中的内容(A) =" 0101 1100”
数据传送指令
MCS-251 ISA中的数据传送指令包括:
■数据传输指令
■堆栈操作指令
■数据交换指令
STC单片机中的数据传输指令包括:
■内部数据传输指令
■外部数据传输指令
■查找表传输指令
/************************************/
■数据传输指令
通用传输(MOV)
它是最通用的指令。该类型指令用于传输(搬运)变量, 它将源操作数指定的字节变量复制到目标操作数指定的位 置,
而源操作数不受影响
■与MCS-51 ISA相比,其寻址模式在MCS-251 ISA中进行扩展
■ MOV可以在任意两个寄存器之间或寄存器与地址空间中的任何位置之间 传输字节(8位)、字(16位)或双字(32位)
■该类型指令不影响标志位
MOV A,dir8 (*)
MOV dir8,Rn (*)
MOV dir8,dir8 (*)
MOV dir8,@Ri (*)
MOV dir8,#data (*)
MOV @Ri,a (C语言中的指针就会编译成间接寻址的方式 )
MOV @Ri,dir8 (*)
MOV @Ri,#data (*)
【例6・32】下面的指令执行传输操作,即:
假设片上数据存储器RAM地址0x30的位置保存着数据为0x40,即(0x30) =0x40;数据存储器RAM地址0x40的位置
保存着数据为0x10,即(0x40) =0x10, P1 端口的内容(P1) =" 11001010" (OxCA)
依次执行下面的指令:
MOV R0,#30H ;(R0)=0x30
MOV A,@R0 ;(A)=0x40
MOV R1,A ;(R1)=0x40
MOV B,@R1 ;(B)=0x10
MOV @R1,R1 ;(0x40) =0xCA
MOV P2,P1 ;(P2) =0xCA
MOV DPTR,#data16 (*)
MOV Rm,#data
MOV Rm,#data16
MOV WRj,#data16
MOV WRjd,WRjs
MOV DRk,#0data16
MOV DRk,#1data16
MOV DRkd,DRks
MOV DRk,#dir16
MOV DRk,dir16
MOV Rm,dir8
MOV WRj,dir8
MOV Rm,@WRj
MOV WRjd,@WRjs
MOV @WRjd,WRjs
MOV Rm,@WRj+dis16
MOV @WRjd+dis16,WRjs
MOV @DRk+dis24,Rm (edata-xdata)
MOVH DRk(hi),#data16
■该指令执行的操作和机器指令格式该指令将16位立即数#data16搬移到双字寄存器DRk的高位字中
■具体来说,将16位立即数#data16移动到32位双字寄存器DRk的高位字中。双字寄存器的低位字保持不变,该指令不影响标志位
MOVS WRj,Rm
该指令将8位寄存器的内容加载到有符号扩展的16位寄存器中
具体来说,将8位寄存器Rm的内容加载到16位寄存器WRj的低字节,然 后用符号扩展填充16位寄存器WRj的高字节。
该指令不影响标志位
注:当符号扩展时,使用0xFF/Ox00填充高字节,取决于源寄存器Rm的MSB。
MOVZ WRj,Rm
■该指令将8位寄存器的内容加裁到16位寄存器,并用全“0”填 充高字节
■具体来说,将8位寄存器Rm的内容加载到16位寄存器WRj的低字节中, 高字节用全"0"填充,该指令不影响标志位
MOVC 代码空间数据传输指令
■如果在调用该子程序之前累加器A的内容(A) =0x02,执行完 该子程序后,累加器A的内容(A) =0x88
■ MOVC指令之前的INC A指令是为了在查表时跨越RET而设置的
■如果MOVC和表格之间被多个字节隔开,则为了正确地读取表格 必须将相应的字节数预先加到累加器A上
使用了MOVC指令 就可以知道 DPTR指向了代码空间!
MOVX 外部数据存储器传输指令
该类型指令在累加器A和外部数据RAM (包括片内扩展 RAM和片外扩展RAM)中的一个字节之间传输数据有两 种类型的指令,
包括:
■为外部数据RAM提供8位间接地址
■由于只有8位地址,因此所访问的外部数据RAM的地址范围为 0x00~OxFF (0-255),可访问的外部数据RAM的容量为256字节
■为外部数据RAM提供16位间接地址
■由于16位地址,因此所访问的外部数据RAM的地址范围为 0x0000~0xFFFF (0-65535),可访问的外部数据RAM的容最为2的16次方
即 64KB
■堆栈操作指令
压栈(PUSH)
■该指令执行压入堆栈(入栈)操作
■具体来说,当入栈时,堆核指针自动加1,然后将指定变量的内容保存到 当前堆栈指针所指向的片上数据RAM的存储地址中
■该指令不影响标志位
PUSH dir8(*)
PUSH #data16
出栈(POP)
POP WRj
POP DRk
■数据交换指令
XCHD A,@Ri (*)
|
|