注意 期末复习速打
根据功能分类的MCS-51指令
1.数据传送类指令(29条)
MOV、MOVX、MOVC、XCH、XCHD、SWAP、PUSH、POP等
XCH A,(Rn、direct、@Ri)
XCHD A,@Ri A与Ri的低4位交换,高4位不变
SWAP A 高低半字节交换
堆栈操作指令组
PUSH direct ; 先SP+1,再将内容送到SP指示的堆栈单元
POP direct ; 先将内容弹出,再SP-1
2.算术运算类指令(24条)
ADD、ADDC、INC、SUBB、DEC、MUL、DIV 、DA等8种
进位标志(CY)(第7位有进位)、半进位标志(AC)(第3位有进位)、溢出标志(OV)置位或复位
ADD A,Rn ;(A)+(Rn)→(A)
ADD A,direct ;(A)+(direct)→(A)
ADD A,@Ri ;(A)+((Ri))→(A)
ADD A,#data ;(A)+data→(A)
ADDC 带进位的加法(+CY)
SUBB 带借位减法指令(-CY)
INC和DEC不影响各个标志
MUL AB 乘法指令
#将A和B中两个无符号8位二进制数相乘,所得的16位积的低8位存于A中,高8位存于B中
#当B不为0时,(OV)=1,CY 总是为0
DIV AB
#无符号8位二进制相除,商存A,余数存B,B不为0时,(OV)=1,CY 总是为0
DA A 对BCD码的加法结果进行调整,上一行有BCD数的相加就要有DA A
3.逻辑运算类指令(24条)
ANL、ORL、XRL、RL左移、RLC、RR右移、RRC、CPL、CLR等九种
结果不影响PSW中标志位
ANL 与 ∧ 按“位”相“与”,结果放回目的地址单元(只能是A或direct)中
ORL 或 ∨ 按“位”相“或”,结果放回目的地址单元(只能是A或direct)中
XRL 异或 ⊕ 同上 不同出1
4.控制转移类指令(17 条)
DJNZ Rn、direct,rel #decrease,jump if not zero
CJNE #compare jump if not equal
SJMP rel #short jump 短转移指令
AJMP addr11 #absolute jump绝对转移指令
LJMP addr16 #long jump
5.布尔操作(位)类指令(17条)
MOV、CLR、CPL、SETB、ANL、ORL、JC、JNC、JB、JNB、JBC等11种
JC rel (CY)=1,jump至rel
JNC rel (CY)=0,jump至rel
JB bit,rel (bit)=1,jump至rel
JNB bit,rel (bit)=0,jump至rel
JB ACC.0,LOOP1
MOV C,bit (C)←(bit)
MOV bit,C (bit)←(C)
CLR C (C)←0
CLR bit (bit)←0
SETB C ; (C)←l
SETB bit ; (bit)←1
CPL C 取反
CPL bit
几个简单举例
〔1〕R0的内容输出到R1
MOV A,R0
MOV R1,A
〔2〕内部RAM 20H单元的内容传送到A中
MOV A,20H
〔3〕外部RAM 3OH单元的内容送到R0
MOV R0,#30H
MOVX A,@R0
MOV R0,A
〔4〕外部RAM 30H单元的内容送内部RAM 20H单元
MOV R1,#30H
MOVX A,@R1
MOV 20H,A
〔5〕外部RAM 1000H单元的内容送内部RAM 20H单元
MOV DPTR,#1000H
MOVX A,@DPTR
MOV 20H,A
〔6〕片外RAM 30H单元的内容传送给片外RAM 50H单元
MOV R1,#30H
MOV R0,#50H
MOVX A,@R1
MOVX @R0,A
〔7〕程序存储器ROM 2000H单元的内容送R1
MOV DPTR,#2000H
CLR A
MOV A,@A+DPTR
MOV R1,A
〔8〕ROM 2000H单元的内容送到内部RAM 20H单元
MOV DPTR,#2000H
CLR A
MOVC A,@A+DPTR
MOC 20H,A
〔9〕用汇编语言编程将片内 RAM 中 30H 单元开始的 16 个字节数据,传送到片内 RAM 的 60H 开始的 16 个单元中,并将原数据块区域全部清零。
MAIN1: MOV R2,#10H ;设置循环次数(16次)
MOV R1,#30H ;设置数据开始单元位置
MOV R0,#11H ;设置默认数据
LOOP1: MOV A,R0 ;将初始数据赋给A
MOV @R1,A ;将A (初始数据)赋给30H,31H,32H...
INC R1 ;将地址位增
INC R0 ;默认数据增
DJNZ R2,LOOP1;若循环次数不达16次则跳转L0OP1循环