【发布时间】:2020-06-14 15:56:12
【问题描述】:
我试图了解一些汇编代码,但我不了解如何找到某些值。如果代码:
ldi ZL, low(2*table)
ldi ZH, high(2*table)
与表一起执行:
table: .db 32, 34, 36, 37, 39, 41, 43, 45, 46, 48, 50, 52, 54, 55, 57, 59, 61, 63, 64, 66
我正在查看表格中的元素 5,即 41。
在这个例子中 ldi 操作符做了什么?第一个ldi执行完后,SRAM中ZL位置存了14,但是为什么是14呢?
第二个执行后,02存储在ZH位置。
【问题讨论】:
-
它与您的表格内容无关。它正在加载基地址,显然是
0x020e。 -
那么这个值来自表值的存储位置,而不是基于表值本身?
-
没错。
-
加载表的地址乘以2的目的是什么?
-
@ndim:我认为这对 AVR 来说是正常的;出于某种原因,标签地址是字号,您需要缩放以获得字节地址。对我来说似乎完全疯了,但我想我以前见过这个。 (虽然它可能对代码地址有意义,但如果指令是对齐的。)