Atmega32汇编程序反转字符串

时间:2013-11-11 16:16:53

标签: assembly atmega

我在ATMEGA32中反转存储在FLASH存储器中的字符串时遇到问题。我尝试以这种方式做到但是效果不好。当我尝试将它放入堆栈时,第一阶段有无限循环。也许之前有人有这个问题。提前感谢您的提示。

LDI R16,LOW(RAMEND) //stack initialisation
OUT SPL,R16
LDI R16, HIGH(RAMEND)
OUT SPH,R16

NAPIS: .DB "Hello world0"
LDI ZL,LOW(NAPIS*2)
LDI ZH,LOW(NAPIS*2)
LPM R1, Z

LOOP:
LDI R26,'0'
TOSTACK:
    LDD R11, Z+2
    PUSH R11
    CPSE R11,R26
JMP TOSTACK
FROMSTACK:
    POP R11
    STD Z+2, R11
    CPSE R11,R26    
JMP FROMSTACK


JMP LOOP

现在好像是

LDI R16,LOW(RAMEND) 
OUT SPL,R16
LDI R16, HIGH(RAMEND)
OUT SPH,R16

NAPIS: .DB "Hello world0"
LDI ZL,LOW(NAPIS*2)
LDI ZH,LOW(NAPIS*2)
LPM R1, Z

LOOP:

LDI R26,48
TOSTACK:
    LDD R11, Z+2
    PUSH R11
    CPSE R11,R26
JMP TOSTACK
FROMSTACK:
    POP R11
    STD Z+2, R11
    CPSE R11,R26    
JMP FROMSTACK


JMP LOOP

第一个TOSTACK中有不定式循环。

1 个答案:

答案 0 :(得分:1)

我猜想" Hello world0"应该终止字符串,但它应该是二进制0而不是字符0的ASCII码(小数点后48位)。