知道 ldi 命令放置在 X、Y、Z 寄存器中的值
knowing the value ldi command is placing in X, Y, Z-Register
当我 运行ning 程序时,您怎么知道不同的寄存器得到什么值?就像我们在 图 1 中看到的那样,在第 8 行之后 R30 寄存器(Z 指针)更改为 0x94,如果我 运行 再多一行 R29 变为 0x01。但是R28和R31的值没有变化。
.cseg
.org 0
rjmp start
.org 0x46
start:
ldi r31,high(tabell*2)
ldi r30, low(tabell*2) //line 8
ldi r29,high(behandlet)
ldi r28,low(behandlet)
tabell:
.db 0xc2,0x09,0x64,0xab
.db 0x73, 0x01, 0x0c, 0xfb
.dseg
.org 0x100
behandlet:
.byte 8
图片1:
不确定您对什么感到困惑。只需找出所涉及符号的地址,并应用给定的操作即可。最后将结果放入给定的目标寄存器。
第 8 行:ldi r30, low(tabell*2)
好的,所以我们需要找出 tabell
的地址。由于 start
位于 0x46
且这是程序存储器,因此每条指令计为 1。因此,tabell
位于 0x4A
。乘以 2 得到 0x94
,取低字节显然是空操作。所以这就是为什么 r30
更改为 0x94
.
下一行:ldi r29,high(behandlet)
这更简单,因为 behandlet
直接在 org 0x100
之后,所以这是它的地址。取其高字节显然是0x01
.
r28
和 r31
不会改变,因为它们已经为零,并且相应的指令也将它们加载为零。参见上文了解为什么 high(tabell*2)
和 low(behandlet)
都是 0
.
当我 运行ning 程序时,您怎么知道不同的寄存器得到什么值?就像我们在 图 1 中看到的那样,在第 8 行之后 R30 寄存器(Z 指针)更改为 0x94,如果我 运行 再多一行 R29 变为 0x01。但是R28和R31的值没有变化。
.cseg
.org 0
rjmp start
.org 0x46
start:
ldi r31,high(tabell*2)
ldi r30, low(tabell*2) //line 8
ldi r29,high(behandlet)
ldi r28,low(behandlet)
tabell:
.db 0xc2,0x09,0x64,0xab
.db 0x73, 0x01, 0x0c, 0xfb
.dseg
.org 0x100
behandlet:
.byte 8
图片1:
不确定您对什么感到困惑。只需找出所涉及符号的地址,并应用给定的操作即可。最后将结果放入给定的目标寄存器。
第 8 行:ldi r30, low(tabell*2)
好的,所以我们需要找出 tabell
的地址。由于 start
位于 0x46
且这是程序存储器,因此每条指令计为 1。因此,tabell
位于 0x4A
。乘以 2 得到 0x94
,取低字节显然是空操作。所以这就是为什么 r30
更改为 0x94
.
下一行:ldi r29,high(behandlet)
这更简单,因为 behandlet
直接在 org 0x100
之后,所以这是它的地址。取其高字节显然是0x01
.
r28
和 r31
不会改变,因为它们已经为零,并且相应的指令也将它们加载为零。参见上文了解为什么 high(tabell*2)
和 low(behandlet)
都是 0
.