微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

这段汇编代码中r10和r20的地址是什么?

如何解决这段汇编代码中r10和r20的地址是什么?

当我查看此 AVR 汇编代码及其等效(部分完成)地址和二进制文件时,我无法弄清楚哪些寄存器应该是 r10 和 r20。我能弄清楚的是,至少我相信,寄存器 X 和 Y 分别是 $004A 和 $004B

Assembly code

解决方法

在 AVR 架构中,寄存器位于数据存储空间的前 32 个地址,如下图所示。

enter image description here

寄存器的地址可以用指令操作码中的 5 位表示,以确切知道操作码中的 5 位在哪里,您必须查看 AVR instruction set Manual 并查看每条指令二进制

例如,如果您查看手册中的第 115 页,您将看到 LDi 指令的二进制翻译,该指令限制您只能访问高 16 位寄存器(来自 r16到 r31) 16 仅以 4 位表示,因此它在第三个 Nibble 中显示为 litter d(d 是“目标寄存器”的缩写)注意:如果 dddd 位采用从 0000 到 1111 的一个值,这将映射从 r16 到 r31


我不知道哪些寄存器应该是 r10 和 r20

让我们手动将此代码 ClR R10 转换为操作码以找出答案

在手册(第 71 页)中,您会发现 ClR 是 Just EOR(异或),这意味着

clr R10
; is same opcode as 
EOR R10,R10

现在尝试找到 EOR 翻译而不是 ClR,在手册(第 91 页)中您会发现以下内容

EOR Rd,Rr
;will translat to 
;0010 01rd dddd rrrr

现在用 Rd 替换 Rrr10(二进制中的 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 页)


我能弄清楚的是,至少我相信,寄存器 X 和 Y 分别是 $004A 和 $004B

这是不正确的,XY 和 Z 寄存器实际上是 r27:r26、r29:r28 和 r31:r30 寄存器对

间接存储指令 ST 将根据选择的对(x、y、z 作为这些对的别名)被翻译为不同的操作码,您可以在 第 173-177 页中看到它们 在手册中

enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。