Assembly 8051汇编程序中的指令序列是做什么的?
我在8051汇编程序中有以下代码:Assembly 8051汇编程序中的指令序列是做什么的?,assembly,8051,Assembly,8051,我在8051汇编程序中有以下代码: MOV A,#04H RL A MOVC A,@A+PC SJMP Cont Cont: DB 10H, 20H, 30H, 40H, 50H, 60H, 70H, 80H 问题是,执行这些指令后,A的值是多少;答案是A保持值(A)=70H 我已经搜索了MOV和RL指令,我理解了,但我不清楚其余指令是什么,我们是如何获得寄存器A的值的?将程序内存中的8位数据(MOVC代表“移动代码”或类似内容)移动到A+PC给定的地址,并
MOV A,#04H
RL A
MOVC A,@A+PC
SJMP Cont
Cont: DB 10H, 20H, 30H, 40H, 50H, 60H, 70H, 80H
问题是,执行这些指令后,A的值是多少;答案是A保持值(A)=70H
我已经搜索了MOV和RL指令,我理解了,但我不清楚其余指令是什么,我们是如何获得寄存器A的值的?将程序内存中的8位数据(MOVC代表“移动代码”或类似内容)移动到A+PC给定的地址,并将其存储到累加器中。@
的出现是有说服力的,它用于表示a,完整表达式@a+PC
指定它实际上是a。请注意:
PC
已按其用于内存访问的时间递增。由于
MOVC A、@A+PC
为1字节长,其语义为:
PC = PC + 1
A = (A+PC)
@A+PC
中,@
的优先级低于+
,因此应将其理解为@(A+PC)
A
这里的符号“#”表示 只需将右
A
旋转一个位置即可
假设代码从X开始,然后
描述后状态前的地址数据指令状态
X+00:74 04:MOV A#04:A=?PC=X:A=4 PC=X+02将A设置为4
X+02:23:RLA:A=4个PC=X+02:A=8个PC=X+03向左旋转4=0000 0100->0000 1000=8,现在A是8
X+03:83:MOVC A,@A+PC:A=8 PC=X+03:A=70 PC=X+04从内存A+PC读取,A=MEM[A+PC后]=MEM[8+X+04]=MEM[X+0C]=70
X+04:80 00:SJMP X+06:A=70 PC=X+04:A=70 PC=X+06转到X+06,PC这是什么处理器的代码?8051微处理器
Address Data Instruction State before State after Description
X + 00 : 74 04 : MOV A, #04 : A = ? PC = X : A = 4 PC = X + 02 Set A to 4
X + 02 : 23 : RL A : A = 4 PC = X + 02 : A = 8 PC = X + 03 Rotate left 4 = 0000 0100 -> 0000 1000 = 8, now A is 8
X + 03 : 83 : MOVC A, @A+PC : A = 8 PC = X + 03 : A = 70 PC = X + 04 Read from memory A+PC, A = MEM[A + PC after] = MEM[8 + X + 04] = MEM[X + 0C] = 70
X + 04 : 80 00 : SJMP X + 06 : A = 70 PC = X + 04 : A = 70 PC = X + 06 Goto X + 06, PC <- X + 06
X + 06 : 10
X + 07 : 20
X + 08 : 30
X + 09 : 40
X + 0A : 50
X + 0B : 60
X + 0C : 70
X + 0D : 80