Assembly 使用Z寄存器从数据空间加载值?
我是AVR汇编编程新手,理解以下代码有困难Assembly 使用Z寄存器从数据空间加载值?,assembly,avr,atmega,Assembly,Avr,Atmega,我是AVR汇编编程新手,理解以下代码有困难 .include "m328Pdef.inc" main: ldi r22, 0x20 sts 0x0100, r22 ldi zh, 0x01 ldi zl, 0x00 ldi r20, 0x05 clr r22 ld r22, z clr r16 ser r16 out DDRB, r16 out DDRC, r16 out PortB, r30
.include "m328Pdef.inc"
main: ldi r22, 0x20
sts 0x0100, r22
ldi zh, 0x01
ldi zl, 0x00
ldi r20, 0x05
clr r22
ld r22, z
clr r16
ser r16
out DDRB, r16
out DDRC, r16
out PortB, r30
out PortC, r31
ret
该计划的目标如下:
编写一个汇编语言程序,从数据中获取数字
内存地址为0x0100的空间。输出结果的低位字节
将结果的高位字节发送到端口B和端口C。(使用寄存器z
获取数字)
具体地说,在第9行(ld r22,z),寄存器z指向的值(即32)是否加载到r22中,或者指针本身的内存地址是否加载到r22中
此外,在第6行(ldi r20,0x05),该寄存器的意义是什么?它似乎没有在程序中的其他任何地方使用
如能对该计划的细节作一般性解释,将不胜感激。谢谢
具体地说,第9行(ld r22,z)是寄存器z的值
指向正在加载到r22中的32,或者是内存
正在加载到r22中的指针本身的地址
与往常一样,请参考指令集参考。
此外,一点思考也会引导你找到正确的答案。显然,如果它是地址,那么它只是从z
到r22
的简单转换,这没有什么意义。此外,目标描述清楚地说明从数据空间加载值
此外,在第6行(ldi r20,0x05),该寄存器的意义是什么?
它似乎没有在程序中的其他任何地方使用
事实上,这是毫无意义的。正如
ldr r22
之前的clr 22
或ser 16
之前的clr 16
一样。此外,该任务从未要求先写入内存。FYI,我确实查阅了指令集参考。谢谢你的信息,但是否决票是不必要的。