了解 AVR 编程的 Subi 语法

Understanding Subi Syntax for AVR Programming

我遇到了一段我不太理解的代码,并且无法找到关于它的任何信息。这是一个接受寄存器的宏,然后应该在 LCD 上显示结果。

传入的寄存器内容应该是一位数字。

.macro do_lcd_rdata
    mov lcd, @0
    subi lcd, -'0'
    rcall lcd_data
    rcall lcd_wait
.endmacro

我感到困惑的部分是 subi lcd, -'0' 这意味着什么。 SUBI 是立即减法,但我对 -'0' 是什么感到困惑。

-'0'是字符'0'的ascii值的负数。该操作实际上是将 0x30 或 48 添加到寄存器中的值以将其转换为数字的等效 ascii 字符值。

例如,6 - -'0' = 6 + 48 = 54 = '6'