8051汇编程序中的指令序列有什么作用?

时间:2016-12-25 21:13:16

标签: 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的值?

1 个答案:

答案 0 :(得分:1)

MOVC A, @A+PC A给出的地址处移动程序存储器中的8位数据( MOVC 代表" MOVe Code"或类似地址) + PC 并将其存储到累加器中 @的存在是雄辩的,它用于表示register indirect addressing mode,完整表达式@A+PC指定它实际上是indexed addressing mode
请注意:

  1. PC在用于进行内存访问时已经增加了。
    由于MOVC A, @A+PC长度为1个字节,因此其语义为:

    PC = PC + 1
    A = (A+PC)
    
  2. 在符号表达式@A+PC中,@意味着少于优先于+,因此应将其理解为{ {1}}。

  3. SJMP Short JuMP ,它只是执行到指定为操作数的目标。

    MOV A, #04H将值04h移动到@(A+PC) 这里的符号是#34;#"表示immediate addressing mode

    RL A只需将A向右旋转一个位置即可。

    我们假设代码从 X 开始,然后

    A

    简单地说,当执行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 时,将从添加了8的下一条指令的地址(MOVC A, @A+PC中的值)中读取一个字节。
    由于A,下一条指令长1个字节,就像从SJMP读取7个字节一样。
    Cont的第七项是70h。