Assembly 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给定的地址,并

我在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给定的地址,并将其存储到累加器中。
@
的出现是有说服力的,它用于表示a,完整表达式
@a+PC
指定它实际上是a。
请注意:

  • PC
    已按其用于内存访问的时间递增。
    由于
    MOVC A、@A+PC
    为1字节长,其语义为:

    PC = PC + 1
    A = (A+PC)
    
  • 在符号表达式
    @A+PC
    中,
    @
    的优先级低于
    +
    ,因此应将其理解为
    @(A+PC)

  • 是一个短跳转,它只是执行到指定为操作数的目标

    将值04h移动到
    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