文章目录
一、片内RAM数据转移指令 MOV
MOV英文全称: Move
MOV A, XXX
目的:将指定的内容送入到累加器A中;
源操作数:寄存器Rn,间接寄存Ri、直接地址direct与立即数#data
助记符 | 功能 | 对标志位影响 | 字节数 | 周期数 | |||
---|---|---|---|---|---|---|---|
P | OV | AC | CY | ||||
MOV A, Rn | (Rn) -> A | √ | × | × | × | 1 | 1 |
MOV A, @Ri | ((Ri)) -> A; i = 0, 1 | √ | × | × | × | 1 | 1 |
MOV A, direct | (direct) -> A | √ | × | × | × | 2 | 1 |
MOV A, #data | data -> A | √ | × | × | × | 2 | 1 |
只有修改累加器中数据才会影响PSW标志位
例 设 R1 中内容为50H,地址50H中内容为60H
- MOV A R1:表示将R1所存放的50H内容移动到A中,(Rn) -> A,50H -> A;
- MOV A @R1:表示R1所表示的50H地址中的60H内容移动到A中,((R1)) = 60H -> A;
- MOV A, 50H:表示将地址50H存放的60H内容移动到A中,(50H) = 60H -> A;
- MOV A, #50H:表示将50H这个数移动到A中,50H -> A。
MOV Rn, XXX
目的:把源操作数所指定的内容送入当前工作寄存器组中;
源操作数:累加器A,直接地址direct与立即数data
助记符 | 功能 | 对标志位影响 | 字节数 | 周期数 | |||
---|---|---|---|---|---|---|---|
P | OV | AC | CY | ||||
MOV Rn, A | (A) -> Rn | × | × | × | × | 1 | 1 |
MOV Rn, direct | (direct) -> Rn | × | × | × | × | 2 | 2 |
MOV Rn, #data | data -> Rn | × | × | × | × | 2 | 1 |
例 累加器A中内容为50H, 地址为60H的空间内容为61H
- MOV R1, A:表示将A的内容移动到寄存器R1中, (A) = 50H -> R1;
- MOV R1, 60H:表示将60H的内容移动到寄存器R1中,(60H) = 61H -> R1;
- MOV R1, #60H:表示将60H这个数放在寄存器R1中,60H -> R1。
MOV direct, XXX
目的:把源操作数所指定的内容送入由直接地址direct所指出的内存单元
源操作数:累加器A,寄存器Rn,直接地址direct1,间接地址@Ri与立即数#data
助记符 | 功能 | 对标志位影响 | 字节数 | 周期数 | |||
---|---|---|---|---|---|---|---|
P | OV | AC | CY | ||||
MOV direct, A | (A) -> direct | × | × | × | × | 2 | 1 |
MOV direct, Rn | (Rn) -> direct | × | × | × | × | 2 | 2 |
MOV direct1, direct2 | (direc2t) -> direct1 | × | × | × | × | 3 | 2 |
MOV direct, @Ri | ((Ri) )-> direct1 | × | × | × | × | 2 | 2 |
MOV direct, #data | data -> direct | × | × | × | × | 3 | 2 |
例 设R1中内容为为50H,50H中内容为60H,累加器A中的内容为40H
- MOV 70H, A:表示为将A中内容40H送到地址为70H中,(A) = 40H -> 70H;
- MOV 70H, R1:表示为将R1中内容50H送到地址为70H中,(R1) = 50H -> 70H;
- MOV 70H, 50H:表示将地址为50H空间的内容60H送到地址为70H中,(50) = 60H -> 70H;
- MOV 70H, @R1:表示R1所表示的50H地址中的60H内容送到地址为70H空间中,((R1)) = 60H -> 70H;
- MOV 70H, #50H:表示将50H这个数送到地址为70H空间中,50H -> 70H。
MOV @Ri, XXX
目的:将源操作数的内容送入间接寄存器中内容指定的RAM单元
源操作数:累加器A,直接地址direct,立即数#data
助记符 | 功能 | 对标志位影响 | 字节数 | 周期数 | |||
---|---|---|---|---|---|---|---|
P | OV | AC | CY | ||||
MOV @Ri, A | (A) -> (Ri) | × | × | × | × | 1 | 1 |
MOV @Ri, direct | (direct) -> (Ri) | × | × | × | × | 2 | 2 |
MOV @Ri, #data | data -> (Ri) | × | × | × | × | 2 | 1 |
例 累加器A中内容为50H, 地址为60H的空间内容为61H,R1的内容为70H
- MOV @R1, A:表示将A的内容送入到R1中的内容指定的RAM单元, (A) = 50H -> (R1) = 70H即70H单元的内容为50H;
- MOV @R1, 60H:表示将60H的内容送入到R1中的内容指定的RAM单元,(60H) = 61H -> (R1) = 70H即70H单元的内容为61H;
- MOV @R1, #60H:表示将60H这个数送入到R1中的内容指定的RAM单元,60H -> (R1) = 70H即70H单元的内容为60H。
MOV DPTR XXX
目的:将16位源操作数送入16位数据指针
源操作数:16位操作数,分别对其高8位DPH、低8位DPL传送数值
助记符 | 功能 | 对标志位影响 | 字节数 | 周期数 | |||
---|---|---|---|---|---|---|---|
P | OV | AC | CY | ||||
MOV DPTR, #data16 | dataH -> DPH,dataL -> DPL | × | × | × | × | 3 | 2 |
例 对DPTR送入08D0H内容
- MOV DPTR, #08D0H;
- 或
- MOV DPH, #08H,MOV DPL, #D0H;
二、片外RAM数据转移指令 MOVX
MOVX英文全称: Move External RAM
MOVX XXX XXX
目的:CPU对片外RAM或片外I/O外设芯片访问
源操作数:8为寄存器间接寻址、16为寄存器间接寻址
助记符 | 功能 | 对标志位影响 | 字节数 | 周期数 | |||
---|---|---|---|---|---|---|---|
P | OV | AC | CY | ||||
MOVX A, @Ri | ((Ri)) -> A,且/RD = 0 | √ | × | × | × | 1 | 2 |
MOVX A, @DPTR | ((DPTR)) -> A,且/RD = 0 | √ | × | × | × | 1 | 2 |
MOVX @Ri, A | (A) -> (Ri),且/WR = 0 | × | × | × | × | 1 | 2 |
MOVX @DPTR, A | (A) -> (DPTR),且/WR = 0 | × | × | × | × | 1 | 2 |
- @DPTR:指16寄存器间接寻址,寻址范围是片外RAM 0~64KB;
- @Ri:指8位寄存器间接寻址,寻址范围是片外RAM 0~255B,包括@R1和@R2两种寄存器间接寻址;
例 R1寄存器指向片外RAM 10H,DPTR寄存器指向片外RAM 7000H,其中10H中内容为20H,7000H中内容为30H,累加器A中内容为40H
- MOVX A, @R1:表示将R1指向10H地址中的内容送入累加器A,((R1)) = 20H -> A;
- MOVX A, @DPTR:表示将DPTR指向7000H地址中的内容送入累加器A,((DPTR)) = 30H -> A;
- MOVX @R1, A:表示将A中的内容送入R1指向10H地址中,(A) = 40H -> (R1) = 10H即10H中的内容改为40H;
- MOVX @DPTR, A:表示将A中的内容送入DPTR指向7000H地址中,(A) = 40H -> (DPTR) = 7000H即7000H中的内容改为40H。
执行MOVX指令让/DR和/WR(读写选通信号)自动有效,从而对片外RAM读写
MOVX A, @Ri只能访问外部RAM 低8位00H~FFH 的256B,高8位由P2决定
三、片内片外ROM数据转移指令 MOVX
英文全称: Move Code
MOVC XXX XXX
目的:对程序存储器(ROM)进行寻址
源操作数:寄存器间接寻址
助记符 | 功能 | 对标志位影响 | 字节数 | 周期数 | |||
---|---|---|---|---|---|---|---|
P | OV | AC | CY | ||||
MOVX A, @A + DPTR | ((A) + (DPTR)) -> A | √ | × | × | × | 1 | 2 |
MOVX A, @A + PC | 先(PC) + 1 -> PC,后((A) + (PC)) -> A | √ | × | × | × | 1 | 2 |
例 A中内容为0DH,PC内容为1003H,1010H的内容为02H
- MOVC A, @A + PC:表示为将PC内容和累加器A相加形成的地址,取出该地址单元的内容送入到累加器A中,((A) + (PC)) = 02H -> A;
例 A中内容为10H,DPTR内容为7000H,1010H的内容为02H
- MOVC A, @A + DPTR:表示为将DPTR内容和累加器A相加形成的地址,取出该地址单元的内容送入到累加器A中,((A) + (DPTR)) = 02H -> A;
MOVC指令只能读取程序存储器,不能写程序存储器
MOVC A, @A + PC指令查找后面的256B
MOVC A, @A + DPTR指令查找整个程序存储器64KB
四、栈指令 PUSH POP
PUSH英文全称: Push onto Stack
POP英文全称: Pop from Stack
PUSH direct
目的:直接地址寻址的单元内容压入当前SP堆栈中
源操作数:直接地址direct
助记符 | 功能 | 对标志位影响 | 字节数 | 周期数 | |||
---|---|---|---|---|---|---|---|
P | OV | AC | CY | ||||
PUSH direct | 先(SP) + 1 -> (SP),后(direct) -> (SP) | × | × | × | × | 2 | 2 |
SP先向下移动一个单元(加一),在将direct中内容送入SP中
POP direct
目的:将堆栈顶的内容送入直接地址寻址的单元
源操作数:堆栈顶内容
助记符 | 功能 | 对标志位影响 | 字节数 | 周期数 | |||
---|---|---|---|---|---|---|---|
P | OV | AC | CY | ||||
POP direct | 先(SP) -> (direct),后(SP) - 1 -> (SP) | × | × | × | × | 2 | 2 |
先将SP指向的堆栈中数据送入直接地址direct,在SP向上移动一个单元(SP减一)
五、字节交换指令 XCH XCHD
XCH英文全称: Exchange
XCHD英文全称: Exchange low-order Digit
XCH XXX, XXX
目的:交换源操作数和累加器A的内容
源操作数:寄存器Rn,直接地址direct,间接地址@Ri
助记符 | 功能 | 对标志位影响 | 字节数 | 周期数 | |||
---|---|---|---|---|---|---|---|
P | OV | AC | CY | ||||
XCH A, Rn | (A) -> <- (Rn) | √ | × | × | × | 1 | 1 |
XCH A, direct | (A) -> <- (direct) | √ | × | × | × | 2 | 1 |
XCH A, @Ri | (A) -> <- ((Ri)) | √ | × | × | × | 1 | 1 |
例 A中内容为10H,20H的内容为30H,30H的内容为40H,R1的内容为20H
- XCH A,R1:表示为交换A与R1中的内容,A = (R1) = 20H,R1 = (A) = 10H;
- XCH A,20H:表示为交换A与20H中的内容,A = (20H) = 30H,20H = (A) = 10H;
- XCH A,@R1:表示为交换A与R1表示的地址空间的内容,A = ((R1)) = 40H,30H = (A) = 10H;
XCHD A, @Ri
目的:交换累加器A中低4位与Ri间接寻址的单元内容低4位,高4位不变
源操作数:Ri间接寻址的单元内容的低4位
助记符 | 功能 | 对标志位影响 | 字节数 | 周期数 | |||
---|---|---|---|---|---|---|---|
P | OV | AC | CY | ||||
XCHD A, @Ri | (A*) -> <- ((Ri*)) | √ | × | × | × | 1 | 1 |
注:A*是指:A0123;
注:Ri*是指:Ri0123;
由本人水平有限,文章难免有错误,望告知