这段汇编代码中r10和r20的地址是什么?
What are the addresses of r10 and r20 in this assembly code?
当我查看此 AVR 汇编代码及其等效(部分完成的)地址和二进制文件时,我无法弄清楚哪些寄存器应该是 r10 和 r20。我能弄清楚的是,至少我相信,寄存器 X 和 Y 分别是 $004A 和 $004B
在 AVR 架构中,寄存器位于数据存储器的第一个 32 地址 space,如下图所示。
寄存器的地址可以用指令操作码中的 5 位来表示,要准确知道操作码中的 5 位在哪里,您必须查看 AVR instruction set Manual 并查看每条指令二进制
例如,如果您查看手册中的 第 115 页 ,您将看到 LDi
指令的二进制翻译,这限制您只能访问上层16 register (from r16 to r31) 16只在第4位表示,所以它出现在第三个半字节为litter d(d是“destination register”的缩写)注意:如果dddd位取一个值从 0000 到 1111 这将从 r16 映射到 r31
I cannot figure out which registers are supposed to be r10 and r20
让我们手动将这段代码ClR R10
翻译成操作码来找出答案
在手册(第 71 页)中,您会发现 ClR
只是 EOR
(异或),这意味着
clr R10
; is same opcode as
EOR R10,R10
现在尝试找到 EOR
翻译而不是 ClR
,在手册(第 91 页)中你会找到以下内容
EOR Rd,Rr
;will translat to
;0010 01rd dddd rrrr
现在用 r10
替换 Rd
和 Rr
(r10
在二进制中将是 01010)
所以输出将是
;be carful in bits location
;the bits are mixed
0010 01rd dddd rrrr
0010 0100 1010 1010
这是CLR R10
的翻译
现在尝试自己翻译 ROR r20
(提示:ROR
第 145 页)
What I can figure out is, at least I believe, that registers X and Y are [=28=]4A and [=28=]4B respectively
这是不正确的,X Y和Z寄存器实际上是一对r27:r26,r29:r28和r31:r30寄存器
间接存储指令 ST
将根据选择的对(x、y、z 作为这些对的别名)为不同的操作码进行翻译,您可以在 页中看到它们手册中的 173-177
当我查看此 AVR 汇编代码及其等效(部分完成的)地址和二进制文件时,我无法弄清楚哪些寄存器应该是 r10 和 r20。我能弄清楚的是,至少我相信,寄存器 X 和 Y 分别是 $004A 和 $004B
在 AVR 架构中,寄存器位于数据存储器的第一个 32 地址 space,如下图所示。
寄存器的地址可以用指令操作码中的 5 位来表示,要准确知道操作码中的 5 位在哪里,您必须查看 AVR instruction set Manual 并查看每条指令二进制
例如,如果您查看手册中的 第 115 页 ,您将看到 LDi
指令的二进制翻译,这限制您只能访问上层16 register (from r16 to r31) 16只在第4位表示,所以它出现在第三个半字节为litter d(d是“destination register”的缩写)注意:如果dddd位取一个值从 0000 到 1111 这将从 r16 映射到 r31
I cannot figure out which registers are supposed to be r10 and r20
让我们手动将这段代码ClR R10
翻译成操作码来找出答案
在手册(第 71 页)中,您会发现 ClR
只是 EOR
(异或),这意味着
clr R10
; is same opcode as
EOR R10,R10
现在尝试找到 EOR
翻译而不是 ClR
,在手册(第 91 页)中你会找到以下内容
EOR Rd,Rr
;will translat to
;0010 01rd dddd rrrr
现在用 r10
替换 Rd
和 Rr
(r10
在二进制中将是 01010)
所以输出将是
;be carful in bits location
;the bits are mixed
0010 01rd dddd rrrr
0010 0100 1010 1010
这是CLR R10
现在尝试自己翻译 ROR r20
(提示:ROR
第 145 页)
What I can figure out is, at least I believe, that registers X and Y are [=28=]4A and [=28=]4B respectively
这是不正确的,X Y和Z寄存器实际上是一对r27:r26,r29:r28和r31:r30寄存器
间接存储指令 ST
将根据选择的对(x、y、z 作为这些对的别名)为不同的操作码进行翻译,您可以在 页中看到它们手册中的 173-177