需要帮助使用指针来遍历AVR程序集atmega2560中的C字符串

时间:2015-03-15 02:29:44

标签: string pointers assembly avr lcd

我正在尝试在LCD屏幕上打印cseg中定义的字符串:

msg1_p: .db "This is the first message displayed on the first line of the lcd", 0

然后我试图模拟LCD左侧文本的移动。到目前为止,我能够打印LCD的字符串,现在我相信我需要遍历此字符串,返回内存中的地址,以便将其传递给我的显示功能。显示子程序在存储器中采用2字节地址,以便从该地址开始打印。这是它的样子:

ldi r16, high(msg1)
push r16
ldi r16, low(msg1)
push r16
call lcd_puts ;this function is used for writing to the board
pop r16
pop r16

以下是关于如何迭代指针的想法。

首先,我使用了一个名为msg1ptr的定义指针,并调用了

ldi XL, low(msg1ptr)            ;pointers to pointer
ldi XH, high(msg1ptr)

然后我将msg1的地址存储在数据存储器中,我将字符串写入之前。

ldi r17, low(msg1)
ldi r16, high(msg1)

现在我将高字节和低字节加载到X指针中。

st X+, r17          ;load low msg1ptr 
st X, r16 

我现在有msg1ptr指向字符串的开头吗?

现在我不确定如何递增指针以便移动到内存中的下一个空格。基本上我如何加载msg1 + 1的值。

我的想法是有另一个指向X的指针,然后使用adiw命令或其他东西。说实话,我很失落,任何帮助都会非常感激。

0 个答案:

没有答案